概述
前言部分,作为第一印象(虽然很多人,包括我有时候不怎么看),写得很牛逼,总结的结论很中肯:
海量监控数据的真正挑战在于以下几点:
1.能否做到实时。实时是种质变的能力,可将一个离线监控平台提升为一个实时决策系统。难点在于能否设计实现高性能的架构,以及能否实现水平扩展等。
2.分集群后,单个业务的流量大小、标签集多少是关键。流量大,相对容易解决,主要涉及系统性能和水平扩展等。标签集多,海量标签,海量时间序列线,如何做查询优化是挑战,如笔者遇到的一些业务上报的监控数据,有几十个维度的标签,并将QQ号和URL作为标签值,有非常海量的时间序列线。
3.针对监控数据多写少读、成本敏感的特点,如何设计高效的存储引擎?既能充分发挥硬件性能,又能在高效压缩存储的同时保障查询效率。
技术理念定位:技术降成本,坚决反对开源软件堆砌。
要做的是借助强大的技术和工程能力,直面问题,在架构和源码层面解决它,而不是引入和堆砌更多的开源软件。
第一章 初识InfluxDB
时序数据
时序数据的定义,总结的若干个特点:
- 抵达的数据几乎总是作为新条目被记录,无更新操作。
- 数据通常按照时间顺序抵达。
- 时间是一个主坐标轴。
InfluxData与TICK
InfluxData公司的开源高性能时序中台TICK(Telegraf +InfluxDB + Chronograf +Kapacitor), InfluxDB是作为TICK的存储系统进行设计和开发的。TICK专注于DevOps监控、IoT监控、实时分析等应用场景,是一个集成了采集、存储、分析、可视化等能力的开源时序中台,由Telegraf、 InfluxDB、Chronograf、Kapacitor 4个组件以一种灵活松散但紧密配合、互为补充的方式构成,各个模块相互配合、互为补充,整体系统架构:
该公司开源InfluxDB-Relay的高可用套件后,宣布闭源其集群功能,作为商业付费版本(InfluxDB Enterprise和InfluxDB Cloud)分发。
使用场景
时序数据的存储、分析与监控
优势
特性与简介
第二章 InfluxDB入门
安装
命令行简介
配置文件
第三章 写入和查询
写入
InfluxDB写操作支持简明的行协议(Line Protocol,一种基于文本格式的协议),以及CollectD、Graphite、OpenTSDB、Prometheus、UDP等第三方协议。
行协议
单行文本,表示一条时序数据,由表、标签集、指标集和时间戳4部分组成
第四章 连续查询和保留策略
连续查询
保留策略
第五章 认证与授权
通过认证和授权,InfluxDB的不同账户拥有完全独立的数据空间和权限空间。
认证
授权
第六章 集群和高可用
第七章 备份管理和节点管理
备份管理
InfluxDB企业版提供两个工具集:
-
备份和还原备份工具集
用于大多数场景,通用型工具;支持以数据库、保留策略、分片3个维度选定要操作的数据,进行备份或还原备份操作, -
导出和导入数据工具集
针对海量数据集(100G以上)场景补充设计的备份工具。- 导出:influx_inspect export,以行协议格式导出数据,参数选项:
- -compress:使用gzip压缩数据,默认不压缩
- -database
<db_name>
:要导出的数据对应的数据库名称 - -datadir
<data_dir>
:DATA节点数据对应的存储目录,默认值$HOME/.influxdb/data
- -end
<timestamp>
:时间范围结束的时间戳,rfc3339格式 - -out
<export_dir>
:导出数据的存储目录,默认值$HOME/.influxdb/export
- -retention
<rp_name>
:要导出的数据对应的保留策略名称 - -start
<timestamp>
:时间范围开始的时间戳,rfc3339格式 - -waldir
<wal_dir>
:DATA节点WAL文件对应的存储目录,默认值为$HOME/.influxdb/wal
- 导入:influx-import,选项:
- -path:要导入的数据文件的存储目录
- -compressed:如果导入文件为压缩文件,则设置为true,支持.gz格式压缩
- -pps:导入允许的速率。默认pps为0不限速。
- -precision ‘h|m|s|ms|u|ns’:指定导入数据的时间戳精度,支持h小时、m分钟、s秒、ms毫秒、u微秒、ns纳秒,精度默认为ns。
- 导出:influx_inspect export,以行协议格式导出数据,参数选项:
节点管理
第八章 第三方协议
现今的开源世界太繁荣,闭门造车一家独大,大概率会玩死。所以,需要支持与其他系统原生集成或者以插件形式集成的可扩展能力。
UDP
CollectD
官网,
架构图:
多指标插件(Multi-value Plugins)用于指定多指标数据的处理方式,有两种处理方式:split和join
Graphite
OpenTSDB
OpenTSDB是基于HBase的分布式、可伸缩的时序型数据库,由时间序列守护程序(Time Series Daemon,TSD)及命令行实用程序集组成。可以通过运行一个或多个TSD来提供OpenTSDB服务,每个TSD都是独立的,没有主设备和共享状态,因此用户可以根据需要运行任意数量的TSD,以支撑业务需求。每个TSD使用HBase或托管的Google Bigtable服务来存储和检索时间序列数据,数据模式针对类似时间序列的快速聚合进行高度优化,以最大程度节省存储空间。用户不需要直接访问底层存储,可通过telnet协议、HTTP API或内置GUI与TSD通信,来获取相关的数据或执行预设操作。所有通信都在同一指定端口上进行,TSD通过查看接收的前几个字节来确定客户端的协议。OpenTSDB架构:
Prometheus
Prometheus的灵感来源于Google的Borgmon监控系统,主要模块包括Prometheus Server、Exporters、Push Gateway、PromQL、Alertmanager以及图形界面,系统架构:
第九章 基于TICK的DevOps监控实战
TICK,即Telegraf、InfluxDB、Chronograf、Kapacitor4个组件,是一个集采集能力、运算和存储能力、告警能力、可视化能力为一体,支持数百种第三方系统和软件的监控系统,专注于DevOps监控、IoT监控、实时分析。
TICK架构图:
Telegraf采集配置文件指定的监控数据,并通过InfluxDB API接口上报到InfluxDB服务器,InfluxDB服务器接收到上报的时序数据后,执行预设的连续查询、聚合运算等操作并进行压缩存储。通过Chronograf可以查看Dashboard等可视化信息,通过Kapacitor可以对接收到的时序数据执行预设的告警策略。
Telegraf
InfluxDB
Chronograf
Kapacitor
第十章 基于InfluxDB、Prometheus、Grafana的DevOps监控实战
开源世界,开放和生态才是未来。InfluxDB支持集成Prometheus、Grafana。Prometheus缺乏数据持久存储能力的问题?
Prometheus
安装,略过。
Grafana
Grafana特点:
- 可视化:从热图到直方图,从图表到地理地图,Grafana支持大量的可视化选项,通过一种精美呈现的方式帮助读者理解数据。
- 告警:可以可视化地定义阈值、配置告警策略、处理指标数据和生成相应的告警信息,并支持Slack、PagerDuty、VictorOps、OpsGenie等通知系统。
- 统一显示:将多种数据源的数据整合起来统一显示,支持30多个开源和商业数据源,也可以基于多种数据源构建统一仪表盘。
- 开放:完全开源的,并由一个充满活力的社区开发和运营;安装方便,支持全部主流操作系统,提供Docker安装镜像;提供云托管的Grafana服务。
- 可扩展性:当前Grafana官方库支持数百个仪表盘和插件,充满激情和活力的Grafana社区每周都会推出新的仪表盘或插件。
- 协同:可在团队之间共享数据和仪表盘。
安装,略过。