时间序列数据库,简称时序数据库,Time Series Database,一个全新的领域,最大的特点就是每个条数据都带有Time列。

时序数据库到底能用到什么业务场景,答案是:监控系统。

Baidu一下,互联网监控系统,大家会发现小米、饿了吗等互联网巨头都在用时序数据库实现企业级的互联网监控系统。

很多人会说,用Zabbix不就搞定了,其实不是这样的,简单的主机资源监控、网络监控、小规模的部署环境,Zabbix能搞定。

如果在IDC 上千台服务器环境下,分布式应用架构、各种中间件,这种情况下我们要监控上千台服务的主机资源、网络、按不同纬度监控服务的性能、TPS,监控各类中间件,程序监控埋点。Zabbix就无法

满足需要了。此时,我们要独立搭建自己的监控体系了。说到这,每一个监控图表的背后,都有什么?

1. 时间轴

2. 数据值(不同指标纬度)

例如,一段时间内CPU使用率

这时,各种Google、Baidu之后,你肯定会搜索到Influxdb、OpenTSDB等时序数据库。

Influxdb我们研究了很长的时间,准备用2篇文章,推荐给大家,本文中,我们分享一下Influxdb的关键特性、查询语法和使用场景。

一、Influxdb关键特性

1. 支持类似SQL的查询语法

2.提供了Http Api直接访问

3.存储超过10亿级别的时间序列数据

4.灵活的数据保留策略,可以定义到Database级别(只保留最热的数据)

5.内置管理接口和CMD

6.飞一般速度的聚合查询

7.按不同时间段进行聚合查询

8.内置持续查询功能,定时计算指定时间段的数据,插入到指定表中,可以理解为定时归集数据

9. 水平扩展,支持集群模式

二、Influxdb 版本和.Net支持

1. 根据我们的使用经验,V0.10版本是非常稳定的,V0.9.6我们用过,有内存泄漏问题

2. GitHub上有非常多的.Net Libraby,方便我们写入和读取数据

三、数据写入Write Data(Points)

Http API:
curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load,host=server01,region=us-west value=0.64 1434055562000000000‘
db:mydb, 要写入的数据库
measurement:cpu_load,表
tag keys:host  region  tag value:server01 us-west
tag标签可以理解为维度,可选参数,用于标识不同的数据源,基于tag使查询更加简单和高效
 Tags are indexed so queries on tag keys or tag values are more performant than queries on fields.
key field:value  value field:0.64
Timestamp:1434055562000000000 可选参数、UTC

支持批量写入
支持同一个Timestamp写入不同的数据
Influxdb 支持存储结构灵活变化,可以在任意增加measure、tags、fields,但是每个tag、field的数据类型必须固定。

四、查询Query

Http API:
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode "q=SELECT value FROM cpu_load_short WHERE region='us-west‘
返回JSON格式数据
支持同时多个Query SQL
查询最大返回10000个点的数据,如果超过阈值,可以设置chunk_size
Measurement、Tag、Field、数据等大小写敏感,SQL关键字不区分大小写

支持算术计算:
SELECT (water_level * 2) + 4 from h2o_feet
支持对Tags进行过滤查询,条件必须使用单引号
SELECT water_level FROM h2o_feet WHERE location = 'santa_monica'
Tag value 为空、不为空过滤
SELECT * FROM h2o_feet WHERE location !~ /.*/
SELECT * FROM h2o_feet WHERE location =~ /.*/
时间范围过滤
SELECT * FROM h2o_feet WHERE time > now() - 7d
Field value过滤
SELECT * FROM h2o_feet WHERE location = 'coyote_creek' AND  water_level > 8

聚合函数、选择函数、转换函数

五、持续查询(Continuous Queries)

持续查询是Influxdb自动、周期的运行的查询,结果自动存储

设计持续查询的目的是为了规则采样数据,比如按天、按月采样数据

CREATE CONTINUOUS QUERY <cq_name> ON <database_name> [RESAMPLE [EVERY <interval>] [FOR <interval>]] BEGIN SELECT <function>(<stuff>)[,<function>(<stuff>)] INTO <different_measurement> FROM <current_measurement> [WHERE <stuff>] GROUP BY time(<interval>)[,<stuff>] END

六、 监控应用场景

通过上面几个部分的介绍,Influxdb的基本语法就可以掌握了。有什么作用:

1. 实时采集监控数据,按时间写入Influxdb

2. 按不同纬度聚合查询监控数据,用于监控展现

3. 持续查询,定时归集指定时间的数据,用于更大时间范围监控数据的展现

总结一下,场景结合实践,通过实际监控系统的应用,和大家分享了Influxdb的使用和技能。我们自己的监控系统就是通过这个套路一点点搭建起来的。

目前,我们的监控平台,2500个监控项,500台服务器实时监控,每日处理上T数据,几百个监控图表,Influxdb满足了我们日常超大规模监控的需要。

同时,Influxdb在大数据展现领域,也有不俗的表现,Druid的集成也很棒的。

周国庆

2017/7/11

互联网级监控系统必备-时序数据库之Influxdb技术的更多相关文章

  1. 互联网级监控系统必备-时序数据库之Influxdb集群及踩过的坑

    上篇博文中,我们介绍了做互联网级监控系统的必备-Influxdb的关键特性.数据读写.应用场景: 互联网级监控系统必备-时序数据库之Influxdb 本文中,我们介绍Influxdb数据库集群的搭建, ...

  2. 互联网级监控系统必备-时序数据库之Influxdb

    时间序列数据库,简称时序数据库,Time Series Database,一个全新的领域,最大的特点就是每个条数据都带有Time列. 时序数据库到底能用到什么业务场景,答案是:监控系统. Baidu一 ...

  3. 互联网企业级监控系统 OpenFalcon

    Open-Falcon 人性化的互联网企业级监控系统,Open-Falcon 整体可以分为两部分,即绘图组件.告警组件.其中: 安装绘图组件 负责数据的采集.收集.存储.归档.采样.查询.展示(Das ...

  4. 认识Influxdb时序数据库及Influxdb基础命令操作

    认识Influxdb时序数据库及Influxdb基础命令操作 一.什么是Influxdb,什么又是时序数据库 Influxdb是一个用于存储时间序列,事件和指标的开源数据库,由Go语言编写而成,无需外 ...

  5. 时序数据库连载系列: 时序数据库一哥InfluxDB之存储机制解析

    InfluxDB 的存储机制解析 本文介绍了InfluxDB对于时序数据的存储/索引的设计.由于InfluxDB的集群版已在0.12版就不再开源,因此如无特殊说明,本文的介绍对象都是指 InfluxD ...

  6. Open-Falcon第七步安装报警模块(小米开源互联网企业级监控系统)

    sender调用各个公司提供的mail-provider和sms-provider,按照某个并发度,从redis中读取邮件.短信并发送,alarm生成的报警短信和报警邮件都是直接写入redis即可,s ...

  7. Open-Falcon第六步安装Dashboard(小米开源互联网企业级监控系统)

    安装Dashboard dashboard是面向用户的查询界面,在这里,用户可以看到push到graph中的所有数据,并查看其趋势图. yum install -y python-virtualenv ...

  8. Open-Falcon第五步安装Query(小米开源互联网企业级监控系统)

    安装Query query组件,绘图数据的查询接口,query组件收到用户的查询请求后,会从后端的多个graph,查询相应的数据,聚合后,再返回给用户. cd /usr/local/open-falc ...

  9. Open-Falcon第四步安装Graph(小米开源互联网企业级监控系统)

    安装Graph graph组件是存储绘图数据.历史数据的组件.transfer会把接收到的数据,转发给graph. cd /usr/local/open-falcon/graph mv cfg.exa ...

随机推荐

  1. java之堆和栈的比较

    当我们第一次接触堆和栈时很多人都不不明白java中为什么要设置这两个概念,他们都有什么作用?堆和栈有什么区别,各自都有什么特点?还有Java中存在栈这样一个后进先出(Last In First Out ...

  2. kubernetes的应用数据持久化

    1.无状态应用与有状态应用 应用的有状态和无状态是根据应用是否有持久化保存数据的需求而言的,即持久化保存数据的应用为有状态的应用,反之则为无状态的应用.常见的系统往往是有状态的应用,比如对于微博和微信 ...

  3. php获取数据库结构

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 初识waindows窗体程序错题整理

    解析:A:Items表示集合B:获取或设置 ComboBox 的可编辑部分中选定的文本.C:SelectedIndex是索引D:获取或设置 控件中选定项的模板 解析:本题目考不同窗体之间跳转的方法,使 ...

  5. win10 下JDK10的下载安装与环境变量配置

    一.下载 首先,要在win10 操作系统上安装jdk,就要去oracle官网下载合适的jdk版本,在这里以jdk10进行安装 下载链接:http://www.oracle.com/technetwor ...

  6. Ubuntu上Xilinx ARM交叉编译器安装

    1,Windows中下载交叉编译器 2,在ubuntu中创建zedboard目录,并将交叉编译器复制进来 3,将该交叉编译器设置成可执行程序 chmod  a+x  xilinx-2011.09-50 ...

  7. 【Selenium】selenium中隐藏元素如何定位?

    前言 面试题:selenium 中隐藏元素如何定位?这个是很多面试官喜欢问的一个题,如果单纯的定位的话,隐藏元素和普通不隐藏元素定位没啥区别,用正常定位方法就行了 但是吧~~~很多面试官自己都搞不清楚 ...

  8. MYSQL的价格

    MYSQL的价格 来自:http://www.greatlinux.com/column/column.do?nodeid=2c90c6093416705c013416f283f40004&c ...

  9. 怎么修改TOMCAT的默认主页为你自己项目的主页

    如果webapp下有一个abc的文件来下有一个index.html,想设置为首页怎么操作 方法: 修改tomcat/conf/web.xml文件.在web.xml文件中,有一段如下:<welco ...

  10. IE8.0如何关闭启用内存保护帮助减少联机攻击?

    默认情况下,该选项卡是灰色的(表示用户不能直接修改),win7电脑可以通过“以管理员身份”运行 IE 来放开该功能,但个别电脑即便用这种方法仍无法解决,此时,您可以试试如下方法: 1.在“运行”框中输 ...