天天看点

《InfluxDB原理与实战》读书笔记

概述

前言部分,作为第一印象(虽然很多人,包括我有时候不怎么看),写得很牛逼,总结的结论很中肯:

海量监控数据的真正挑战在于以下几点:

1.能否做到实时。实时是种质变的能力,可将一个离线监控平台提升为一个实时决策系统。难点在于能否设计实现高性能的架构,以及能否实现水平扩展等。

2.分集群后,单个业务的流量大小、标签集多少是关键。流量大,相对容易解决,主要涉及系统性能和水平扩展等。标签集多,海量标签,海量时间序列线,如何做查询优化是挑战,如笔者遇到的一些业务上报的监控数据,有几十个维度的标签,并将QQ号和URL作为标签值,有非常海量的时间序列线。

3.针对监控数据多写少读、成本敏感的特点,如何设计高效的存储引擎?既能充分发挥硬件性能,又能在高效压缩存储的同时保障查询效率。

技术理念定位:技术降成本,坚决反对开源软件堆砌。

要做的是借助强大的技术和工程能力,直面问题,在架构和源码层面解决它,而不是引入和堆砌更多的开源软件。

第一章 初识InfluxDB

时序数据

时序数据的定义,总结的若干个特点:

  1. 抵达的数据几乎总是作为新条目被记录,无更新操作。
  2. 数据通常按照时间顺序抵达。
  3. 时间是一个主坐标轴。

InfluxData与TICK

InfluxData公司的开源高性能时序中台TICK(Telegraf +InfluxDB + Chronograf +Kapacitor), InfluxDB是作为TICK的存储系统进行设计和开发的。TICK专注于DevOps监控、IoT监控、实时分析等应用场景,是一个集成了采集、存储、分析、可视化等能力的开源时序中台,由Telegraf、 InfluxDB、Chronograf、Kapacitor 4个组件以一种灵活松散但紧密配合、互为补充的方式构成,各个模块相互配合、互为补充,整体系统架构:

《InfluxDB原理与实战》读书笔记

该公司开源​​InfluxDB-Relay​​的高可用套件后,宣布闭源其集群功能,作为商业付费版本(InfluxDB Enterprise和InfluxDB Cloud)分发。

使用场景

时序数据的存储、分析与监控

优势

特性与简介

第二章 InfluxDB入门

安装

命令行简介

配置文件

第三章 写入和查询

写入

InfluxDB写操作支持简明的行协议(Line Protocol,一种基于文本格式的协议),以及CollectD、Graphite、OpenTSDB、Prometheus、UDP等第三方协议。

行协议

单行文本,表示一条时序数据,由表、标签集、指标集和时间戳4部分组成

第四章 连续查询和保留策略

连续查询

保留策略

第五章 认证与授权

通过认证和授权,InfluxDB的不同账户拥有完全独立的数据空间和权限空间。

认证

授权

第六章 集群和高可用

第七章 备份管理和节点管理

备份管理

InfluxDB企业版提供两个工具集:

  1. 备份和还原备份工具集

    用于大多数场景,通用型工具;支持以数据库、保留策略、分片3个维度选定要操作的数据,进行备份或还原备份操作,

  2. 导出和导入数据工具集

    针对海量数据集(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。

节点管理

第八章 第三方协议

现今的开源世界太繁荣,闭门造车一家独大,大概率会玩死。所以,需要支持与其他系统原生集成或者以插件形式集成的可扩展能力。

UDP

CollectD

​​官网​​,

架构图:

《InfluxDB原理与实战》读书笔记

多指标插件(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架构:

《InfluxDB原理与实战》读书笔记

Prometheus

Prometheus的灵感来源于Google的Borgmon监控系统,主要模块包括Prometheus Server、Exporters、Push Gateway、PromQL、Alertmanager以及图形界面,系统架构:

《InfluxDB原理与实战》读书笔记

第九章 基于TICK的DevOps监控实战

TICK,即Telegraf、InfluxDB、Chronograf、Kapacitor4个组件,是一个集采集能力、运算和存储能力、告警能力、可视化能力为一体,支持数百种第三方系统和软件的监控系统,专注于DevOps监控、IoT监控、实时分析。

TICK架构图:

《InfluxDB原理与实战》读书笔记

Telegraf采集配置文件指定的监控数据,并通过InfluxDB API接口上报到InfluxDB服务器,InfluxDB服务器接收到上报的时序数据后,执行预设的连续查询、聚合运算等操作并进行压缩存储。通过Chronograf可以查看Dashboard等可视化信息,通过Kapacitor可以对接收到的时序数据执行预设的告警策略。

Telegraf

InfluxDB

Chronograf

Kapacitor

第十章 基于InfluxDB、Prometheus、Grafana的DevOps监控实战

开源世界,开放和生态才是未来。InfluxDB支持集成Prometheus、Grafana。Prometheus缺乏数据持久存储能力的问题?

Prometheus

安装,略过。

Grafana

  • 可视化:从热图到直方图,从图表到地理地图,Grafana支持大量的可视化选项,通过一种精美呈现的方式帮助读者理解数据。
  • 告警:可以可视化地定义阈值、配置告警策略、处理指标数据和生成相应的告警信息,并支持Slack、PagerDuty、VictorOps、OpsGenie等通知系统。
  • 统一显示:将多种数据源的数据整合起来统一显示,支持30多个开源和商业数据源,也可以基于多种数据源构建统一仪表盘。
  • 开放:完全开源的,并由一个充满活力的社区开发和运营;安装方便,支持全部主流操作系统,提供Docker安装镜像;提供云托管的Grafana服务。
  • 可扩展性:当前Grafana官方库支持数百个仪表盘和插件,充满激情和活力的Grafana社区每周都会推出新的仪表盘或插件。
  • 协同:可在团队之间共享数据和仪表盘。

集成

第十一章 InfluxDB源码架构剖析

继续阅读