上下观古今,起伏千万途。这篇文章主要讲述性能工具之JMeter+InfluxDB+Grafana打造压测可视化实时监控相关的知识,希望能为你提供帮助。
文章图片
概述本文我们将介绍如何使用JMeter+InfluxDB+Grafana打造压测可视化实时监控。
引言我们很多时候在使用JMeter做性能测试,我们很难及时察看压测过程中应用的性能状况,总是需要等到测试完成后去看Report,如果是长时间压测,比如压测1~2天,那就更烦人了。
压测的时候,我们实时通过监听器 ?
?GenerateSummaryResults?
?汇总输出,可以看到如下内容文章图片
?
?GenerateSummaryResults?
?汇总展示了压测中需要关注的大量信息,其中包括:Avg (Average), Min (Minimum) 、Max (Maximum)响应时间,TPS,错误率,活跃线程数等,
??jmeter.properties?
?默认是30秒的统计频率,如果我们想使用小于30秒更细颗粒度的统计频率的时候,那么在控制台会有大量的输出,这个时候我们就不好观察结果了。1. # jmeter.properties
2. # Define the following property to automatically start a summariser with that name
3. # (applies to non-GUI mode only)
4. # summariser.name=summary
5. #
6. # interval between summaries (in seconds) default 3 minutes
7. # summariser.interval=30
8. #
9. # Write messages to log file
10. # summariser.log=true
11. #
12. # Write messages to System.out
13. # summariser.out=true
另一方面,如果需要分享给其它人员,这种控制台输出方式并不是一个很友好的方式,我们需要一个简单漂亮的图形,比如html Dashboard,但需要等待整个测试完成。
文章图片
【性能工具之JMeter+InfluxDB+Grafana打造压测可视化实时监控】因此,我们可以在测试计划中去除?
?GenerateSummaryResults?
?,把测试结果发送到数据库中持久化,这样我们就可以通过SQL查询数据库来创建展示图表。从JMeter2.13开始,通过提供实现AbstractBackendListenerClient的类,可以使用(JDBC,JMS,Webservice,...)通过Backend Listener发送到数据库的存储实时结果。
?
?BackendListenerGraphiteBackendListenerClien?
?t,允许将统计指标发送到Graphite
此功能提供:
- 实时数据
- 漂亮图表
- 能够对比2个以上的测试计划
- 只要JMeter产生相同的Backend,就可以存储监控数据
- ...
?InfluxDBBackendListenerClient?
?允使用UDP或HTTP协议将统计指标发送到InfluxDB
此功能提供:
- 实时数据
- 漂亮图表
- 能够对比2个以上的测试计划
- 能够向图表添加注释
- 只要JMeter产生相同的Backend,就可以存储监控数据
- ...
文章图片
相关介绍:
时序数据库:处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。想象它就像一个sql表,其中时间是它的主键官网地址:https://www.influxdata.com/
InfluxDB:是一款用Go语言编写的开源分布式时序、事件和指标数据库,无需外部依赖。该数据库现在主要用于存储涉及大量的时间戳数据,如DevOps监控数据,APP metrics, loT传感器数据和实时分析数据。
数据DEMO
1. > select* from weather
2. name: weather
3. -------------
4. timealtitudeareahumiditytemperature
5. 14563869850940000001000北1817
6. 14563869850940000005000上2047
7. 14563869850940000005000北2668
8. 14563869850940000001000广1783
9. 14563872676680000001000上1277
10. 14563872676680000001000北1620
11. 14563872676680000005000广-366
12. 14563872676680000005000上1960
与传统数据库中的名词做比较
influxDB中的名词 | 传统数据库中的概念 |
database | 数据库 |
measurement | 数据库中的表 |
points | 表里面的一行数据 |
Point由时间戳(time)、数据(field)、标签(tags)组成。
Point属性 | 传统数据库中的概念 |
time | 每个数据记录时间,是数据库中的主索引(会自动生成) |
fields | 各种记录值(没有索引的属性)也就是记录的值:温度, 湿度 |
tags | 各种有索引的属性:地区,海拔 |
安装要求网络端口InfluxDB默认使用以下网络端口:
- TCP端口8086用于通过InfluxDB的HTTP API进行客户端-服务器通信
- TCP端口8088用于RPC服务以进行备份和还原
- 除了上面的端口,InfluxDB还提供了多个可能需要自定义端口的插件。可以通过配置文件修改所有端口映射,配置文件位于
/etc/influxdb/influxdb.conf
默认位置。
下载安装
1. wget et https://dl.influxdata.com/influxdb/releases/influxdb-1.6.2.x86_64.rpm
2. sudo yum localinstall influxdb-1.6.2.x86_86_64.rpm
InfluxDB配置
找到InfluxDB配置文件(/etc/influxdb/influxdb.conf)
1. vi /etc/influxdb/influxdb.conf
?
?influxdb.conf?
?中的大多数设置都被注释掉了;
所有注释掉的设置将确定为内部默认值。如果配置文件中的任何未注释的设置都会覆盖内部默认值。请注意,本地配置文件不需要包含每个配置设置。
如果你无法找到配置文件,可以使用InfluxDB显示配置命令
1. Influxd config
Jmeter使用graphite协议去写入数据到InfluxDB,因此,需要在InfluxDB配置文件启用它,如下图所示:
1. [[graphite]]
2.enabled = true
3.bind-address = ":2003"
4.database = "jmeter"
5.retention-policy = ""
6.protocol = "tcp"
7.batch-size = 5000
8.batch-pending = 10
9.batch-timeout = "1s"
10.consistency-level = "one"
11.separator = "."
12.udp-read-buffer = 0
修改后,使用以下命令加载InfluxDB启动
有两种方法可以使用配置文件启动InfluxDB:
1.使用以下-config选项将进程指向正确的配置文件
1. influxd -config /etc/influxdb/influxdb.conf
2.将环境变量设置为INFLUXDBCONFIGPATH配置文件的路径并启动
1. echo $INFLUXDB_CONFIG_PATH
2. /etc/influxdb/influxdb.conf
3.
4. influxd
InfluxDB操作
1. [root@zuozewei ~]# influx#登录数据库
2. Connected to http://localhost:8086 version 1.6.2
3. InfluxDB shell version: 1.6.2
4. > show databases#查看所有数据库
5. name: databases
6. name
7. ----
8. _internal
9.
10. > CREATE DATABASE "jmeter" #创建数据库
11. > use jmeter#切换数据库
12. Using database jmeter
13. > CREATE USER "admin" WITH PASSWORD \'admin\' WITH ALL PRIVILEGES # 创建管理员权限的用户
JMeter配置
- 创建一个测试计划,并添加Backend Listener
- 设置InfluxDB IP及端口
- 运行测试,等待几秒
- 查看JMeter是否生成错误日志
文章图片
端口说明:
- 8086端口,Grafana用来从数据库取数据的端口
- 2003端口,JMeter往数据库发数据的端口
1. > show measurements
2. name: measurements
3. name
4. ----
5. delta
6. jmeter.all.a.avg
7. jmeter.all.a.count
8. jmeter.all.a.max
9. jmeter.all.a.min
10. jmeter.all.a.pct90
11. jmeter.all.a.pct95
12. jmeter.all.a.pct99
13. jmeter.all.h.count
14. jmeter.all.ko.count
15. jmeter.all.ok.avg
16. jmeter.all.ok.count
17. jmeter.all.ok.max
18. jmeter.all.ok.min
19. jmeter.all.ok.pct90
20. jmeter.all.ok.pct95
21. jmeter.all.ok.pct99
22. jmeter.test.endedT
23. jmeter.test.maxAT
24. jmeter.test.meanAT
25. jmeter.test.minAT
26. jmeter.test.startedT
27. total
OK,我们已经可以将统计指标数据成功发送到InfluxDB
Grafana& InfluxDB集成什么是Grafana?
Grafana是一个开源软件,拥有丰富的指标仪表盘和图形编辑器,适用Graphite, Elasticsearch, OpenTSDB, Prometheus,InfluxDB。简单点说就是一套开源WEB可视化平台。
官网地址:https://grafana.com/
安装启动
下载安装
1.wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.2.0-1.x86_64.rpm
2.sudo yum localinstall grafana-4.2.0-1.x86_64.rpm
启动
1. service grafana-server start
2. Starting grafana-server (via systemctl):[OK]
使用浏览器打开 ?
?http://IP:3000/login?
?,访问Grafana主页文章图片
创建InfluxDB数据源
文章图片
单击 ?
?save&
test?
?,确保可以连接上InfluxDB文章图片
创建dashboard
文章图片
添加Graph面板
文章图片
数据绑定
文章图片
文章图片
文章图片
线程数/用户相关指标压测中的效果
响应时间指标
- test.minAT-Min active threads:最小活跃线程数
- test.maxAT-Max active threads:最大活跃线程数
- test.meanAT-Mean active threads:活跃线程数
- test.startedT-Started threads:启动线程数
- test.endedT-Finished threads:结束线程数
Backend Listener的默认百分位设置为“90; 95; 99”,即百分位数为90%,95%和99%。
- .ok.count:采样器的成功响应数
- .h.count:每秒点击数
- .ok.min:采样器成功最短响应时间
- .ok.max:采样器成功最长响应时间
- .ok.avg:采样器成功平均响应时间
- .ok.pct:采样器成功响应百分比
- .ko.count:采样器失败响应数
- .ko.min:采样器失败的响应最短时间
- .ko.max:采样称失败最长响应时间
- .ko.avg:采样器失败平均响应时间
- .ko.pct:采样器失败响应百分比
- .a.count:采样器响应数(ok.count和ko.count的总和)
- .a.min:采样器最小响应时间(ok.count和ko.count的最小值)
- .a.max:采样器最大响应时间(ok.count和ko.count的最大值)
- .a.avg:采样器平均响应时间(ok.count和ko.count的平均值)
- .a.pct:采样器响应百分比(根据和失败样本的总数计算)
Graphite使用点(“.”)去拆分的元素,这可能与十进制百分位值混淆。JMeter转换任何此类值,用下划线(“ - ”)替换点(“.”)。例如,“99.9 ”变为“99_9 ”
默认情况下,JMeter发送在samplerName“all”下累计的所有采样器的指标。 如果配置了 ??BackendListenerSamplersList?
?,那么JMeter还会发送匹配样本名称的指标,前提是配置 ??summaryOnly=true?
?
文章图片
导入Dashboard模版
如果让大家去设计一个好看的Dashboard,估计大家都不太想从零开始自己设计,其实Grafana官网提供丰富的模版的库,大家可以自己上去找,然后进行二次扩展。
官网模版库:https://grafana.com/dashboards
搜索看板模版
文章图片
此处,我选择下载这个下载量3000+的模版
文章图片
下模版JSON文件
文章图片
导入模版
文章图片
文章图片
选择数据源
文章图片
JMeter Backend Listener设置
文章图片
压测期间的动画效果
文章图片
至此,我初步打造的压测可视化实时监控大功告成~
推荐阅读
- 01 django框架基础
- 在WordPress中使用add_shortcode()在主页中创建内容section
- 在timber/twig主题中使用WordPress自定义标题图像
- 将WP更新到Salient主题中的5.0.2之后,使用Classic Visual Composer代码
- 对子类别使用不同的模板
- 在WordPress自定义帖子类型循环中将ACF分类字段用作变量
- 更新特定acf_form()时更新帖子的分类法
- 无限的自定义字段WordPress
- 独特功能图片作为wordpress中每页的标题图片