基于时序数据库的分布式网络波动监控系统

2018-04-25 11:42柴亚刚
中国传媒科技 2018年3期
关键词:时序波动监控

文/柴亚刚

1.业务场景及需求

随着数据中心系统规模的不断扩大,应用系统间通信经常跨越多个机房或者多个核心网络区域,网络通信质量波动的概率大幅增加,直接影响应用系统的正常运行。因此,全网网络波动监控就成为基础平台监控中不可或缺的基础环节。网络波动监控主要是对可用性、可靠性和用户体验进行监测,具体为以下几方面:(1)选取每个网络区域的随机节点作为采集点,同时对跨机房和跨网络区域的ICMP探测响应往返时间进行持续监测。(2)选取用户端网络节点作为采集点,对所有服务域名和关键URL的响应时间、响应状态和响应内容等持续监测。(3)能够对历史数据进行实时查询,能够对一定时期内的监测指标进行聚合计算,通过各类图表形式展示网络响应。(4)能够定义告警策略,当采集指标符合告警策略时,通过Web Hook、Email等方式进行告警。网络波动监控的数据类型主要是时间序列数据,因此,考虑用时序数据库,配合分布式采集工具、消息系统以及监控前端系统来实现。

2.时序数据库的当前发展

与普通数据不同,每条时间序列数据都带有一个时间戳,反映的是某个时间点的度量情况。时间序列数据库(Time Series Database)则是针对时间戳或时间序列数据而优化的数据库,专门用于跟踪、监控、聚合和处理随时间变化的度量或者事件,这里的度量可以是服务器指标、应用性能监控数据、网络性能数据、传感器数据、事件、点击、市场交易以及其他各类数据。

时间序列数据库并不是新生事物,但其早期主要用于交易系统,用来监测股票交易的波动性。然而,过去十年中,随着PC服务器逐步替代大型机和小型机,互联网、物联网和大数据技术飞速发展,各类时间序列数据、指标和事件随时随地、无时无刻在产生,随着数据源的变化而衍生的对数据生命周期管理、长时间跨度下实时快速查询和聚合计算、根据历史数据对未来趋势进行预判等新的业务需求,要求底层数据基础架构也随之变化,需要更适合互联网的分布式时间序列数据库。

在时间序列数据库领域,InfluxDB、RRDtool、Graphite和OpenTSDB、Druid、Prometheum的排名比较靠前,使用也更为广泛。如下图所示。

时序数据库11月份排名情况(摘自db-engines.com[1])

3.时序数据库的几个关键概念

以使用最广泛的Influxdb为例,有以下几个关键概念:

(1)field key/field value/field set,度量指标数据,field key为度量指标字段,filed value为对应的值,两者构成field set。Field key没有索引,基于field的过滤查询都是全表扫描。Field value的值类型只能为字符串、浮点数、整型数或者布尔类型。每条度量指标数据都和一个时间戳绑定。

(2)tag key/tag value/tag set,可选的索引标签,tag key为索引标签字段,tag value为对应的值,两者构成tag set。在查询语句中,可以跟在where短语后面。

(3)measurement,类似于关系型数据库中的表,存放tags、fields以及对应的时间戳。

(4)retention policies,数据存储策略,默认为永久保存,可以为数据表设置过期时间,influxdb会定期清理。

(5)database,类似于关系型数据库中的数据库,逻辑概念,包含用户权限、存储策略、时序数据等。

(6)series,数据序列,相同的数据表、存储策略和tag set,构成1个series。一般情况下,表中有tag标签时,根据不同tag标签的排列组合会形成多条数据序列。这是时序数据库中最关键的概念。

4.实时监控技术架构

由于采集网络范围广、节点多、采集时间间隔短、数据插入并发高,因此,网络波动指标数据的采集处理选用分布式架构。在全网采集点上部署采集工具,分别以JSON标准格式上传到消息系统,接收处理入库程序,从消息系统接收消息,处理后插入时间序列数据库。前端监控系统从时间序列数据库读取数据,并在前台进行展示,依据定制策略进行告警。如下图所示。

网络波动监控系统架构

采集工具选用HeartBeat,属于Elastic Stack中的轻量型数据采集器Beats工具集中的一种。它采用Go语言开发,并发性能较高,支持icmp/http/tcp三种类型的心跳监控,动态地添加和删除目标,既支持直接输出到ElasticSearch和Logstash,也支持输出到Kafka和Redis消息队列。消息系统选用Kafka,属于Apache基金会项目,被定义为分布式流处理平台,通常用于实时流数据的管道或者流数据处理应用。它采用Java语言开发,并发性能高,支持发布/订阅的消息系统场景以及日志存储场景。

时序数据库选用InfluxDB,是InfluxData所开源的项目。在db-engines.com所公布的时序数据库中长期排名第一,是目前应用最广泛的时序数据库。它支持对时序数据定期存储,可以根据数据量和时间定时清理过期数据,避免磁盘空间超标;支持对时序数据进行mean/min/max/last/first/avg等各种快速聚合计算。

监控告警前端选用Grafana,支持InfluxDB、ElasticSearch、Graphite、Prometheus等各类数据源,支持图表、表格、仪表盘等各类展示方式,通过自定义告警水位和告警信息实现告警。

5.时序数据存储与查询

网络波动以ICMP和HTTP响应结果指标数据为主,分别存储在不同数序数据库中,每个数据库中根据数据来源、时间等字段适当拆表,同时对响应状态错误的结果数据复制一份入库到错误表,方便查询。

由于是对网络波动度量指标数据进行监测,因此,field数据主要是ICMP和HTTP请求的响应时长数据,将采集器名称、监测目标、返回状态等作为tag数据。

ICMP响应的指标数据仅有一个rtt时长,HTTP响应的指标数据较为复杂。各列数据的含义为:time为时间戳,wreponse_status表示响应状态,wup表示是否有响应,wresolve_rtt表示DNS解析时间,wtcp_connect表示tcp连接时间,whttp_rtt表示http响应时。

Influxdb的查询语法与SQL类似,增加和优化了对一定时间范围内的指标数据进行最大值/最小值/平均数计算。以网络区域间ICMP响应序列查询为例,选取某个区域节点的ICMP响应时长的平均值进行聚合查询,用时间间隔作为聚合依据。以下为查询语句。

相较于网络区域间ICMP响应监控,重点网站的URL监控的HTTP响应数据的指标更多,包括TCP连接时间、DNS解析时间、HTTP响应时间,HTTP响应状态。以下为查询语句:

6.总结与展望

本文从跨机房和网络区域的网络质量波动监控实际需求出发,设计了基于时序数据库的分布式网络波动监测系统。通过消息队列系统实现指标数据的管道传输,使得分布部署在不同机房和网络区域的采集节点和数据接收处理模块解耦,有效地扩大了监控范围和容量;通过时序数据库来存储网络质量指标数据,通过前端展示组件实现指标数据的图表展示,有效解决了网络质量和波动的实时监测和历史数据查询的可视化监控需求。

[1]林芝.基于信息论网络的时序数据库挖掘[J]计算机工程与应用,2003(01).

[2]黄河.时序数据库中快速相似搜索的算法研究[J]模式识别与人工智能,2003(02).

[3]郭四稳.基于小波技术的网络时序数据挖掘[J]计算机工程,2007(02).

猜你喜欢
时序波动监控
顾及多种弛豫模型的GNSS坐标时序分析软件GTSA
清明
The Great Barrier Reef shows coral comeback
基于不同建设时序的地铁互联互通方案分析
羊肉价回稳 后期不会大幅波动
你被监控了吗?
11月汇市:波动率降低 缺乏方向
微风里优美地波动
Zabbix在ATS系统集中监控中的应用
2019年国内外油价或将波动加剧