InfluxDB原理与实战
上QQ阅读APP看书,第一时间看更新

1.1 什么是InfluxDB

1.1.1 简介

在介绍InfluxDB之前,先来介绍下时序数据。按照时间顺序记录系统、设备状态变化的数据被称为时序数据(Time Series Data),如CPU利用率、某一时间的环境温度等。时序数据以时间作为主要的查询纬度,通常会将连续的多个时序数据绘制成线,制作基于时间的多纬度报表,用于揭示数据背后的趋势、规律、异常,进行实时在线预测和预警,时序数据普遍存在于IT基础设施、运维监控系统和物联网中。时序数据主要有如下3个特点:

❑抵达的数据几乎总是作为新条目被记录,无更新操作。

❑数据通常按照时间顺序抵达。

❑时间是一个主坐标轴。

时序型数据库是存放时序数据的专用型数据库,并且支持时序数据的快速写入、持久化、多纬度的实时聚合运算等功能。传统数据库通常记录数据的当前值,时序型数据库则记录所有的历史数据,在处理当前时序数据时又要不断接收新的时序数据,同时时序数据的查询也总是以时间为基础查询条件,并专注于解决以下海量数据场景的问题:

❑时序数据的写入:如何支持千万级/秒数据的写入。

❑时序数据的读取:如何支持千万级/秒数据的聚合和查询。

❑成本敏感:海量数据存储带来的是成本问题,如何更低成本地存储这些数据,是时序型数据库需要解决的关键问题。

InfluxDB是一个由InfluxData公司开发的开源时序型数据库,专注于海量时序数据的高性能读、高性能写、高效存储与实时分析,在DB-Engines Ranking时序型数据库排行榜上位列榜首,广泛应用于DevOps监控、IoT监控、实时分析等场景。具体的DB-Engines Ranking时序型数据库的排行榜(源自2019年5月的DB-Engines Ranking数据)如图1-1所示。

图1-1 时序型数据库DB-Engines Ranking排名

InfluxDB部署简单、使用方便,在技术实现上充分利用了Go语言的特性,无须任何外部依赖即可独立部署;提供类似于SQL的查询语言,接口友好,使用方便;拥有丰富的聚合运算和采样能力;提供灵活的数据保留策略(Retention Policy)来设置数据的保留时间和副本数;在保障数据可靠性的同时,及时删除过期数据,释放存储空间;提供灵活的连续查询(Continuous Query)来实现对海量数据的采样。支持多种通信协议,除了HTTP、UDP等原生协议,还兼容CollectD、Graphite、OpenTSDB、Prometheus等组件的通信协议。

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

图1-2 TICK系统架构

Telegraf是用于采集和上报指标的数据采集程序,采用灵活的、可配置的插件实现。Telegraf可以通过配置文件的配置,采集当前运行主机的指定指标,如CPU负载、内存使用等,也可以从第三方消费者服务(如StatsD、Kafka等)拉取数据,上报到已支持的多种存储系统、服务或消息队列,如InfluxDB、Graphite、OpenTSDB、Datadog、Librato、Kafka、MQTT、NSQ等。

InfluxDB是专注于时序数据场景(如DevOps监控、IoT监控、实时分析等)的高性能时序型数据库,支持灵活的自定义保留策略和类SQL的操作接口。

Chronograf是可视化的、BS架构的管理系统,可用于配置和管理接收到的监控数据、告警,并支持通过灵活强大的模块和库,快速配置数据可视化仪表盘、告警规则、可视化规则。

Kapacitor是从零构建的原生数据处理引擎,支持流式处理和批量处理,支持灵活强大的自定义功能,如定义新的告警阈值、告警指标特征、告警统计异常特征等,以及后续的告警处理行为。除了灵活,Kapacitor也很开放,能灵活地集成对接第三系统,如HipChat、OpsGenie、Alerta、Sensu、PagerDuty、Slack等。

1.1.2 历史和发展

2013年下半年,Errplane的创始人Paul Dix和Todd Persen以开源项目的形式开始了InfluxDB的开发,其目标是提供一个高性能的监控及告警的解决方案。2014年11月,Errplane获得了由梅菲尔德风险投资公司与Trinity Ventures领投的810万美元的A轮投资。2015年,Errplane正式更名为InfluxData Inc.,更名后又分别于2016年9月和2018年2月获得了金额分别高达1600万美元和3500万美元的B轮、C轮投资。

2016年3月,在向InfluxDB开源社区贡献了一个名为InfluxDB-Relay的高可用套件后,InfluxData宣布闭源仍在开发中的InfluxDB集群功能,水平扩展等集群功能将包含在商业产品(InfluxDB企业版和InfluxDB Cloud)中单独销售,目的是为InfluxDB的持续开发建立一个稳定的收入来源。

1.1.3 使用场景

InfluxDB是一个专注于时序数据场景的时序型数据库,适用于各种时序数据场景,如服务器指标、应用程序性能指标、函数接口调用指标、网络流量数据、探测器数据、日志、市场交易记录等,在本节中将以DevOps监控、IoT监控为例详细介绍InfluxDB的使用场景。

DevOps监控,通过监控基础设施(如服务器、容器、数据库、微服务、云服务等)的核心指标来及时发现问题并在影响关键业务之前解决问题。尽管新兴技术,如微服务、容器、网络存储、软件自定义网络、混合云等,提升了基础设施的DevOps监控的复杂性,但InfluxDB都能很好地适应。InfluxDB通过灵活的Telegraf插件的形式,采集系统指标或从第三方服务(如StatsD、Kafka等)拉取数据,并通过自定义配置按需上报给外部存储系统,如InfluxDB、Graphite、OpenTSDB、Datadog、Librato、Kafka、MQTT、NSQ等,然后实时分析和执行预定义操作,在影响核心业务运行前,发现并解决问题。典型客户(如Coupa)就采用InfluxDB作为DevOps监控的时序存储和分析的后台。

IoT监控,用于接收和处理来自IoT设备的海量数据,并进行实时分析,在无人工干预的情况下,执行预定义操作。IoT设备无处不在,公路摄像头、智能网联车、智能衣服、手机、微波炉、冰箱等都有它的身影。不过由于IoT设备的硬件性能及缓存能力有限,数据往往是以流式的方式实时上报,所以需要一个弹性、扩展性强的高性能时序后台来应对突发流量的挑战。InfluxDB的水平扩展、实时分析等能力,是专门针对这类场景设计的。它具有足够的读写性能和容量弹性,在突发流量下,可以稳定地接收数据,并进行实时分析,快速决策。典型用户(如tado°)使用InfluxDB云PaaS,接收和分析采集到的海量时序数据,帮助用户理解节省能源的方法并节省能源使用。

1.1.4 社区和生态

前文提到,InfluxDB是一个开源时序型数据库,是开源时序中台TICK的组成部分,基于持续开发和建立一个稳定收入来源的考虑,InfluxData还推出了具备水平扩展集群能力、强大可运营性的商业化产品——InfluxDB企业版和InfluxDB Cloud。

InfluxDB是由开源社区驱动的单机版时序型数据库,专注于时序存储和实时分析,当前稳定版本为v1.7.8,集群能力在v0.11.1版之后闭源,InfluxData推出了一个开源版负载均衡工具——InfluxDB-Relay,提供基本可用性。InfluxDB和InfluxDB-Relay源码地址如代码清单1-1所示。

代码清单1-1 InfluxDB和InfluxDB-Relay源码地址

        InfluxDB GitHub:https://github.com/influxdata/influxdb
        InfluxDB-Relay GitHub:https://github.com/influxdata/influxdb-relay

注意

本书将以InfluxDB-v1.7.8版本为例介绍InfluxDB的功能和用法,默认使用的是开源版,当涉及集群等企业版才有的功能时,将以InfluxDB-v1.7.8企业版为例进行介绍和讲解。

TICK是一个集成了采集、存储、分析、可视化等能力的开源时序型中台,由Telegraf实现采集功能、InfluxDB实现时序存储和分析功能、Chronograf实现可视化功能、Kapacitor实现实时流式处理功能,是一个完善的时序数据解决方案。TICK组件源码地址如代码清单1-2所示。

代码清单1-2 TICK组件的源码地址

        Telegraf GitHub:https://github.com/influxdata/telegraf
        InfluxDB GitHub:https://github.com/influxdata/influxdb
        Chronograf GitHub:https://github.com/influxdata/chronograf
        Kapacitor GitHub:https://github.com/influxdata/kapacitor

InfluxDB企业版和InfluxDB Cloud是InfluxData推出的商业产品,该产品强化了集群能力、安全性、可运营性等功能,是一款支持水平扩展、具有强大可运营性、支持私有化部署等的商业产品,可部署于客户自定义的IaaS上。InfluxDB Cloud是一个支持水平扩展集群能力、自动备份和恢复、包含TICK和Grafana等的云端PaaS。

建议

如果相关时序数据和分析结果不敏感,推荐使用InfluxDB Cloud版本。