使用 TDengine 快速搭建运维监测系统

提到监测,有不少成熟的解决方案,彷佛已经没有再讨论的必要,但随着计算机技术的发展,愈来愈多的场景开始须要监测,它会向着更深更广的方向发展。从业务领域来看,运维、电力、交通、工控、煤炭、油气、科研等,全部具备量化监测指标的产业,都须要数据的采集、存储、分析、可视化。但具体到不一样业务,其监测的重点却能够差异很大。ios

运维监测系统概述

本文将业务领域局限在IT运维监测方向,谈谈这里面须要关注的一些事情。IT运维监测数据一般都是对时间特性比较敏感的数据,例如git

  • 系统资源指标:CPU、内存、IO、带宽等
  • 软件系统指标:存活状态、链接数目、请求数目、超时数目、错误数目、响应时间、服务类型及其余与业务有关的指标

这些数据的来源很丰富。能够来自操做系统自带命令,如free、vmstat、sar、iostat等。若是程序部署在Tomcat、WebLogic、IIS、JBoss等容器上,则由这些容器对外提供采集接口。但真正对软件系统起做用的,业务上真正关注的指标,主要来自于数据埋点。埋点的事情有不少,先后端均可能有,一般都是业务上的行为,可是如何存储与分析埋点后的数据,是监测系统的一个重要问题。经过以上实时采集的数据,主要目标是得到以下信息github

  • 宿主机的健康状态
  • 软件是否处于正常运行状态,系统稳定性如何
  • 软件负载状况,是否可以知足线上性能要求,是否须要增长实例,性能的瓶颈在哪里,如何提升性能
  • 用户行为分析、用户画像

运维监测系统的组成

一个典型的监测系统,一般分为数据采集、数据传输、数据存储、数据统计分析、数据可视化五个模块,分析结果最终会反馈到产品经理或者软件研发人员,以确保线上软件稳定运行,并进一步提供改进软件的关键信息。web

1. 数据采集模块

数据采集是监测系统的第一步,采集信息是否丰富、是否足够准确、是否存够实时,直接影响到了监测系统的应用效果。shell

若是是对主机状态、软件基本运行状况进行数据采集,最简单易用的是Telegraf,它是一个插件驱动的服务器代理程序,可直接从其运行的容器和系统中提取各类指标,事件和日志,从第三方API提取指标。Telegraf还具备输出插件,可将指标发送到各类其余数据存储,服务和消息队列,包括InfluxDB、OpenTSDB、TDengine、NSQ等等。数据库

若是是对软件系统产生的日志数据作数据采集,则须要该软件系统的开发人员来完成。日志数据可分为结构化日志和非结构化日志两类,对业务分析有益的数据,一般是结构化的,只是采用非结构化的文本进行了表示而已。不少软件开发人员由于偷懒,但更多的是没有这方面的意识,随意的编写记录日志的程序。这些日志于是格式变化较大,压缩比不好,等于将数据存储成本和数据分析的工做量彻底推给了下游的数据分析人员,而分析人员受限于采用的开发工具,基本上没法准确、实时的给出分析结果。恰巧,软件系统中最容易更改且影响面最小的就是日志模块,因此,把日志模块抽象、改进、使得日志结构化,这是比较重要且简单的工做。json

2. 数据传输模块

网络环境不会是监控系统要考虑的主要问题,可是考虑到监控数据的大小和实时性要求,能够将日志区分慢日志和快日志。后端

对快日志,比较流行的传输方式采用RESTFul接口,不一样点在于选择Pull仍是Push。若是是与业务关联比较多的,建议采用Push方式,保证明时性的同时,也不须要缓存数据。Pull方式则比较简单,通常只须要被监控的软件系统提供Http接口便可,适用于拉取一些简单数值,例如系统状态、访问数量、访问时间等。快日志通常须要存储到实时分析系统,以生成实时报表为主要目标。TDengine提供的RESTFul接口,能够快速处理Push过来的Http请求,实时处理快日志。缓存

慢日志一般记到日志文件,而后再单独作一个通用的日志收集程序,将日志写入到Kafka中,再分流出去。以后,由日志机消费这些数据,进入到数据存储模块中。服务器

3. 数据存储模块

数据存储选型在监测系统中相当重要,可供选择的大数据引擎不少。针对时序数据作了优化的,例如Prometheus、InfluxDB、TDengine、ClickHouse、OpenTSDB、Graphite等时序数据库;通用分析型的,例如Hadoop体系及其上的流式计算引擎。具体怎么选?仍是要从记录的数据类型来看,关注的指标能够从写入速度、采集频率、数据压缩比、查询分析速度方面着手。

若是和时间关联不大,采用Hadoop处理这类问题较好。若是确实是时序数据的,则采用时序数据库比较好。在时序数据库上,若是为非结构化数据的,能够采用InfluxDB、OpenTSDB、Cassendra、MongoDB,若是为结构化数据的,能够采用Prometheus、ClickHouse、TDengine。后面这三种,Prometheus受限于设计,须要在水平扩展的问题上妥善考虑;ClickHouse偏重于分析,实时数据的处理能力稍差;TDengine推出时间较短,但在写入速度、查询速度、压缩比等方面都有突出的性能表现。

4. 数据统计分析模块

统计分析的目标,不该该被选择的存储引擎限制了想象力。可是一般来讲,监控数据的统计分析也都是与时间序列有关的一系列分析,能够分为两类

  • 实时分析:最新值、实时曲线、流式计算、滑动窗口、历史截面等
  • 非实时分析:年报、月报、日报、分组、聚合等

这些指标的查询性能,是选择数据存储引擎的关键因素。TDengine查询性能很是好,可以将绝大多数传统思惟下的非实时分析,转变为实时分析,充分利用这个特色,能够为用户提供新功能,进一步拓展新业务。

5. 数据可视化模块

数据可视化方面,除了Grafana以外,并无太多可供选择的开源可视化软件。若是部门内部使用,是足够的;若是是对外的项目,或者须要跨部门提供数据,就须要本身编写更加易用、查询条件更丰富的界面,展现实时或者定时任务的计算结果,以期获得更好的反馈。

基于TDengine的运维监测系统的快速搭建

参照TDengine的白皮书,它创新性的定义了时序数据的存储结构,并且具有安装使用方便、压缩比高、查询性能好等特色,特别适用于处理实时监测类数据。与具体业务上有关的监测逻辑,不容易举例说明。但因为TDengine可以与开源数据采集系统Telegraf和开源数据可视化系统Grafana快速集成,因此本节参照以上各系统的用户手册,快速搭建运维数据监测系统,整个过程无需任何代码开发。

1. 架构图

系统监测架构图
图1 系统监测架构图

2. TDengine的安装与配置

  • 下载tdengine-1.6.0.0.tar.gz,地址http://www.taosdata.com/downloads/
  • 安装TDengine,解压后运行install.sh进行安装
  • 启动TDengine,运行sudo systemctl start taosd
  • 测试是否安装成功,运行TDengine的shell命令行程序taos,能够看到以下相似信息
1Welcome to the TDengine shell, server version:1.6.0  client version:1.6.0
2Copyright (c) 2017 by TAOS Data, Inc. All rights reserved.
3
4taos> 
复制代码

3. Telegraf的安装与配置

  • 下载telegraf_1.7.4-1_amd64.deb,地址https://portal.influxdata.com/downloads/
  • 安装telegraf,sudo dpkg -i telegraf_1.7.4-1_amd64.deb
  • 配置telegraf,修改Telegraf配置文件/etc/telegraf/telegraf.conf中与TDengine有关的配置项

在output plugins部分,修改[[outputs.http]]配置项

1url:http://ip:6020/telegraf/udb,其中ip为TDengine集群的中任意一台服务器的IP地址,6020为TDengine RESTful接口的端口号,telegraf为固定关键字,udb为用于存储采集数据的数据库名称,可预先建立
2method: "POST" 
3username: 登陆TDengine的用户名
4password: 登陆TDengine的密码
5data_format: "json"
6json_timestamp_units: "1ms"
复制代码

例如

1[[outputs.http]]
2   url = "http://127.0.0.1:6020/telegraf/udb"
3   method = "POST"
4   username = "root"
5   password = "taosdata"
6   data_format = "json"
7   json_timestamp_units = "1ms"
复制代码

在agent部分,修改以下配置项

1hostname: 区分不一样采集设备的机器名称,需确保其惟一性
2metric_batch_size: 30,容许Telegraf每批次写入记录最大数量,增大其数量能够下降Telegraf的请求发送频率,但对于TDegine,该数值不能超过50
复制代码

例如

1[agent]
2   hostname = "gsl"
3   metric_batch_size = 30
4   interval = "10s"
5   debug = true
6   omit_hostname = false
复制代码
  • 启动telegraf,sudo systemctl start telegraf
  • 测试是否接收到Telegraf的数据
    • 在shell中输入show databases语句,应该看到名为udb的数据库
    • 运行use udb语句
    • 运行show stables语句,能够看到cpu等超级表
    • 运行show stables语句,能够看到cpu_gsl_cpu0等普通数据表

图 2 Telegraf数据接入到TDengine
图 2 Telegraf数据接入到TDengine

3.Grafana的安装与配置

  • 下载grafana_6.2.5_amd64.deb,地址https://grafana.com/grafana/download
  • 安装Grafana,sudo dpkg -i grafana_6.2.5_amd64.deb
  • 配置Grafana,TDengine 的 Grafana 插件 /usr/local/taos/connector/grafana 目录下,将之拷贝到/var/lib/grafana/plugins 目录
  • 启动Grafana,sudo systemctl start taosd
  • 用户能够直接经过localhost:3000的网址,登陆Grafana服务器(用户名/密码:admin/admin),配置TDengine数据源,此时能够在数据源列表中看到TDengine数据源类型

图 3 Grafana载入TDengine插件
图 3 Grafana载入TDengine插件

  • 在Host文本框中输入http://localhost:6020并保存

图 4 建立TDengine数据源
图 4 建立TDengine数据源

  • 而后,就能够在Grafana的数据源列表中看到刚建立好的TDengine的数据源

图 5 TDengine数据源配置成功

  • 建立Dashboard的时候使用TDengine数据源

图 6 建立Dashboard时选择TDengine数据源
图 6 建立Dashboard时选择TDengine数据源

点击Add Query按钮增长三个新查询,在INPUT SQL输入框中输入查询SQL语句,该SQL语句的结果集应为两行多列的曲线数据,例如

1select avg(f_usage_idle) from udb.cpu WHERE ts>=$from and ts<$to interval($interval)
2
3其中,$from、$to和$interval为TDengine插件的内置变量,表示从Grafana插件面板获取的查询范围和时间间隔
4点击GENERATE SQL按钮能够看到Grafana发给TDengine的SQL语句。
5
6select avg(f_usage_idle) from udb.cpu WHERE ts>='2019-07-04T01:23:44.509Z' and ts<'2019-07-04T07:23:44.511Z' interval(20000a)
复制代码

图 7 Grafana展现的Cpu监测图
图 7 Grafana展现的Cpu监测图

总结

监测系统能够采用的技术方案有不少,若是仅仅是作一个玩具,选择面是很大的。但若监测的数据量很大,对于写入尤为是分析性能要求很高的场景,不妨试试TDengine。

本文只是简单对TDengine使用作了初步探讨,要想真正了解它超强的读写能力,还须要进一步构造大规模的测试数据集。

关于 TDengine

TDengine是涛思数据拥有自主知识产权的高性能、可伸缩、高可靠、零管理的物联网大数据平台软件,能够将数据库、缓存、消息队列、流式计算等功能彻底融合在一块儿。因为针对物联网大数据特色作了各类优化,TDengine的数据插入、查询的性能比通用的大数据平台好10倍以上,存储空间也大为节省,采用SQL接口,与第三方软件能无缝集成,大幅简化了物联网平台的系统架构,大幅减小了研发和运维的复杂度与成本。TDengine可普遍运用于物联网、车联网、工业大数据等领域。2019年7月12日,TDengine开源,在GitHub全球趋势排行榜上连续几天排名第一。

目前在GitHub上,TDengine的Star数已超10,000,GitHub地址:github.com/taosdata/TD… ,欢迎来GitHub上Star咱们!

相关文章
相关标签/搜索