监控告警系统简介
监控告警系统的实现各有不同,大致如下所述:
在数据采集方面:主动采集方式、被动上报方式、上述二者兼备。
在数据传输方面:socket传输、HTTP传输。
在数据存储方面:关系数据库MySQL、时序数据库MongoDB、OpenTSDB、InfluxDB等。
但是,所有的监控告警系统的核心都是采集和处理数据。
监控系统通常由指标采集子系统和数据处理子系统组成。
1)指标采集子系统主要负责信息采集,过滤,汇总和存储。
2)数据处理子系统主要负责数据分析,展现,预警,告警动作触发和告警等。
常见监控告警系统
目前常见的监控告警系统主要有Prometheus+ AlertManager,Open-Falcon,Zabbix等。
Prometheus+AlertManager
Prometheus是由SoundCloud公司开发的开源告警系统并且带时序数据库,基于Go语言开发。
Prometheus架构及生态系统组件图
Open-Falcon
Open-Falcon是小米公司开源的一款监控与告警系统,基于Go语言开发。
Open-Falcon架构图
Zabbix
Zabbix 是由 Alexei Vladishev 开发的一种网络监视、管理系统,支持多种采集方式和采集客户端,同时支持SNMP,IPMI,JMX,Telnet,SSH等多种协议,它将采集到的数据存放到数据库中,然后对其进行分析整理,如果符合告警规则,则触发相应的告警。
zabbix架构图
监控告警系统构建
就上述介绍可知,监控系统的核心是数据采集和数据存储。此外,一般为了方便实时查看监控状态,数据展示部分也是其不可或缺的一部分。本文搭建的实时监控系统,采用的是TICK中的数据采集(Telegraf)和数据存储(InfluxDB)部分,数据可视化部分采用的是目前较为成熟且广泛使用的Grafana。下面主要就所采用的方案分块进行介绍。
Telegraf介绍
Telegraf是一个插件驱动的服务器代理,用于收集和报告指标。Telegraf通过插件系统可轻松添加支持其他服务的扩展,输出插件可将指标发送到各种其他数据存储,服务,消息队列,如InfluxDB,Graphite,OpenTSDB,Datadog,Librato,MQTT,NSQ等等。Telegraf作为数据采集模块,需要安装至被监控的目标主机上。
注:Telegraf尚不支持Oracle数据库统计数据的实时监控。
Telegraf由4个独立的插件驱动:
1)Input Plugins(输入插件,收集系统、服务、第三方组件的数据。)
2)Processor Plugins(处理插件,转换、处理、过滤数据。)
3)Aggregator Plugins(聚合插件,数据特征聚合。)
4)Output Plugins(输出插件,写metrics数据。)
主要具有以下特性:
1)使用Go语言编写,编译成单个二进制文件,没有外部依赖项。
2)极小的内存占用。
3)插件系统允许轻松添加新的输入和输出。
4)许多流行服务的插件已经存在于众所周知的服务和API中
Telegraf支持的插件主要有:Apache、MySQL、Tomcat、TCP Listener等等,具体可访问Github。在以上都没有可用的监控采集配置外,可以使用自定义sh脚本格式收集指标。
InfluxDB介绍
InfluxDB是一个时间序列数据库,用于处理高写入和查询负载。可作为任何带有大量时间戳数据使用场景的数据仓库,包括 DevOps 监控,日志数据,应用指标,物联网(IoT)传感器数据以及实时分析数据。所有来自 Telegraf 的指标都可以被发送至 InfluxDB。InfluxDB 可以被配置为仅仅保留特定时长的数据,从系统中自动过期并删除不再需要的数据,这样可以节省机器的存储空间。InfluxDB作为数据存储模块,可直接安装至被监控的目标主机,也可部署在独立的服务器上。
InfluxDB具有的特色功能有以下几点:
1)基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等)。
2)可度量性:可以实时对大量数据进行计算。
3)基于事件:它支持任意的事件数据。
InfluxDB的主要特点有:
1)无结构:可以是任意数量的列。
2)可拓展:支持min, max, sum, count, mean, median 等一系列函数,方便统计。
3)原生的HTTP支持,内置HTTP API,使用HTTP读写
4)强大的类SQL语法。
5)自带压力测试工具等,功能强大。
InfluxDB与传统数据库中的名词对比:
Point:Point由时间戳(time)、数据(field)、标签(tags)组成。
Grafana介绍
Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。目前已经支持Prometheus、Graphite、InfluxDB、OpenTSDB、Elasticsearch、MySQL、PostgreSQL等等40多种数据库类型。
其具有以下特点:
1)可视化:具有多种选择的快速灵活的客户端图。面板插件以多种方式可视化指标和日志。
2)动态仪表盘:使用模板变量创建动态且可重复使用的仪表盘,这些模板变量显示在仪表盘顶部。
3)浏览指标:通过即席查询和动态明细浏览数据。拆分视图并排比较不同的时间范围,查询和数据源。
4)浏览日志:快速搜索所有日志或实时流式传输。
5)警报:直观地定义最重要指标的警报规则。Grafana将不断评估并向Slack,钉钉等系统发送通知。
6)混合数据源:在同一图中混合不同的数据源!可以基于每个查询指定数据源。
压测可视化实时监控
很多时候我们在使用JMeter做性能测试时,很难及时察看压测过程中应用的性能状况,总是需要等到测试完成后去看生成的Report,如果是进行长时间的压测,如1-2天,那更是让人难受。
一般JMeter GUI模式下,在线程组或用户较多的情况下进行测试时,非常影响其他的工作,因此一般这种情况下只能使用non-GUI模式执行测试,在non-GUI模式下,Generate Summary Results汇总展示了需要关注的一些信息,其中包括:Avg,Min,Max,TSP,错误率,活跃线程数等。
默认情况下,jmeter.properties默认是30秒的统计频率,如果我们想使用小于30秒更细颗粒度的统计频率的时候,那么控制台会有大量的输出,这个时候我们就不好观察结果了。另一方面,如果需要分享给其他人员,这个时候控制台输出方式就不是一个很友好的方式,这个时候可以选择HTML Dashboard,但需要等待整个测试的完成。
因此,我们可以将测试结果发送到数据库中持久化,这样就可以通过SQL查询数据库来创建展示图表了。
解决方案
JMeter引入后端监视器Backend Listener,用于在压测过程中发送统计指标数据给时序数据库InfluxDB,通过配置Grafana数据源连接到InfluxDB,我们就可以创建可视化看板,并可以实时获取到测试指标数据。
InfluxDB配置
1、下载influxdb:从网址https://www.influxdata.com/get-influxdb/中下载influxdb,并解压到D:/tick目录。
2、配置influxdb.conf文件:使用notepad++打开influxdb.conf文件,修改配置文件。
修改存放目录路径:修改26行、45行和48行目录路径如下:
注:influxdb.conf中的大多数设置都被注释掉了;所有注释掉的设置将确定为内部默认值。
3、修改后,执行以下命令运行InfluxDB数据库服务器(运行后不要关闭)。
influxd.exe -config influxdb.conf
运行成功后显示InfluxDB图案。
4、执行以下命令运行InfluxDB数据库客户端
influx.exe
注:InfluxDB可以使用InfluxDB Studio进行管理。
JMeter配置
1、创建一个测试计划,并添加Backend Listener。
2、配置Backend Listener。
3、运行测试。
4、查看jmeter数据库中是否有events和jmeter两个表。
注:使用create database "jmeter"命令创建jmeter数据库。
InfluxdbBackendListenerClient配置简介:
版权声明:本文出自《51测试天地》第六十期。51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任