互联网级监控系统必备-时序数据库之Influxdb技术
时间序列数据库,简称时序数据库,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技术的更多相关文章
- 互联网级监控系统必备-时序数据库之Influxdb集群及踩过的坑
上篇博文中,我们介绍了做互联网级监控系统的必备-Influxdb的关键特性.数据读写.应用场景: 互联网级监控系统必备-时序数据库之Influxdb 本文中,我们介绍Influxdb数据库集群的搭建, ...
- 互联网级监控系统必备-时序数据库之Influxdb
时间序列数据库,简称时序数据库,Time Series Database,一个全新的领域,最大的特点就是每个条数据都带有Time列. 时序数据库到底能用到什么业务场景,答案是:监控系统. Baidu一 ...
- 互联网企业级监控系统 OpenFalcon
Open-Falcon 人性化的互联网企业级监控系统,Open-Falcon 整体可以分为两部分,即绘图组件.告警组件.其中: 安装绘图组件 负责数据的采集.收集.存储.归档.采样.查询.展示(Das ...
- 认识Influxdb时序数据库及Influxdb基础命令操作
认识Influxdb时序数据库及Influxdb基础命令操作 一.什么是Influxdb,什么又是时序数据库 Influxdb是一个用于存储时间序列,事件和指标的开源数据库,由Go语言编写而成,无需外 ...
- 时序数据库连载系列: 时序数据库一哥InfluxDB之存储机制解析
InfluxDB 的存储机制解析 本文介绍了InfluxDB对于时序数据的存储/索引的设计.由于InfluxDB的集群版已在0.12版就不再开源,因此如无特殊说明,本文的介绍对象都是指 InfluxD ...
- Open-Falcon第七步安装报警模块(小米开源互联网企业级监控系统)
sender调用各个公司提供的mail-provider和sms-provider,按照某个并发度,从redis中读取邮件.短信并发送,alarm生成的报警短信和报警邮件都是直接写入redis即可,s ...
- Open-Falcon第六步安装Dashboard(小米开源互联网企业级监控系统)
安装Dashboard dashboard是面向用户的查询界面,在这里,用户可以看到push到graph中的所有数据,并查看其趋势图. yum install -y python-virtualenv ...
- Open-Falcon第五步安装Query(小米开源互联网企业级监控系统)
安装Query query组件,绘图数据的查询接口,query组件收到用户的查询请求后,会从后端的多个graph,查询相应的数据,聚合后,再返回给用户. cd /usr/local/open-falc ...
- Open-Falcon第四步安装Graph(小米开源互联网企业级监控系统)
安装Graph graph组件是存储绘图数据.历史数据的组件.transfer会把接收到的数据,转发给graph. cd /usr/local/open-falcon/graph mv cfg.exa ...
随机推荐
- LeetCode 876 Middle of the Linked List 解题报告
题目要求 Given a non-empty, singly linked list with head node head, return a middle node of linked list. ...
- python摸爬滚打之day01----初识Python
1.编程语言分类 编译型语言:程序被一次性全部翻译成机器语言,计算机直接以机器语⾔言来运⾏行行此程序. 优点:运行效率高,可脱离语言环境独立运行. 缺点:开发效率低,可移植性差. 解释型语言:将程序逐 ...
- mysql 5.7.12 新增 X plugin x 协议 详解
mysql 5.7.12 新增 X plugin x 协议 详解http://xiaozhong991.blog.51cto.com/2354914/1763792 x 协议 操作nosql数据库 ...
- 20171123初学demo爬去网页资料
一.工具vs2015 +python3.5 import urllib.request import urllib.error import re def getcontent(url,page): ...
- 爬虫请求库——selenium
selenium模块 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题.selenium的缺点是效率会变得很慢. sel ...
- 数据库每分钟运行监控SQL
每1分钟运行一次,记录正在运行的SQL,监控数据 放在ReportServer库的t_WhoIsActive表中,保留最近30天的数据! USE [ReportServer] GO /****** O ...
- cxImage控件使用
属性: Picture:载入要显示的图片 Properties->Caption在没有内容的时候显示在图片框中间的文字 Properties->PopupMenuLayout->Me ...
- 永久有效的 webstorm license server 20180808
下载地址 https://download.jetbrains.com/webstorm/WebStorm-2018.3.2.exe 2018年10月26日,最近老是过期,搞了一个1年有效的代码,是 ...
- 【剑指offer】数组中出现次数超过一半的数字
一.题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2 ...
- [LeetCode] 610. Triangle Judgement_Easy tag: SQL
A pupil Tim gets homework to identify whether three line segments could possibly form a triangle. Ho ...