手把手教你打造Jmeter压测可视化高逼格监控平台
Jmeter原生测试报告带来的"痛苦":
1.
不具备实时性。
2.
报告文件随着测试时间的增长而增长,磁盘的读写瓶颈,随时都可能让它崩溃。
3.
报告中的数据是测试时间段内的平均值。
4.
报告比较难看,实际测试过程中只关心三条曲线的数据:TPS、响应时间、错误率;在生成的结果图中,有很多生成的图我们并不是那么关注。
性能监控平台的优势:
1.
实时展示Jmeter压测数据,数据直观。
2.
数据范围可选,筛选功能强大。
3.
界面更友好,拓展能力强。
性能监控平台组成:
1.
Jmeter:压测工具,产生测试数据
2.
InfluxDB:开源时序数据库,特别适合用于处理和分析资源监控数据,用于存储压测数据
3.
Grafana:度量分析与可视化图表展示工具,可以支持不同类的数据源,用于将存储于InfluxDB中的数据以图表的形式展示出来。
1.
工具介绍
|
工具 |
介绍 |
|
Jmeter |
Java语言开发的压力测试工具 |
|
InfluxDB |
Go
语言开发的一个开源分布式时序数据库,非常适合存储指标、事件、分析等数据 |
|
Grafana |
纯 Javascript 开发的前端工具,用于访问 InfluxDB,自定义报表、显示图表等 |
JMeter发送压力到服务器的同时,统计TPS、响应时间、线程数、错误率等信息,配置了Backend Listener之后,将统计出的结果异步发送到InfluxDB中,最后在Grafana中配置InfluxDB数据源和JMeter显示模板,就可以实时查看 JMeter的测试结果了。
2. Centos7安装InfluxDB
2.1 influxdb安装部署
软件包下载:
wget
https://dl.influxdata.com/influxdb/releases/influxdb-1.7.11.x86_64.rpm
软件包安装:
yum install -y
influxdb-1.7.11.x86_64.rpm
influxdb提供两种安装方式二进制安装及rpm安装,新手推荐使用rpm包,请使用yum安装它会自动下载并安装依赖包。
2.2 influxdb配置文件修改
查看influxdb版本及配置文件路径:
修改InfluxDB的配置,配置jmeter存储的数据库与端口号:
2.3 influxdb启动
启动命令: systemctl start
influxdb.service
查看状态命令: systemctl status
influxdb.service
查看端口:netstat –tnulp |grep influxd
3. Centos7安装Grafana
3.1 Grafana安装部署
软件包下载:
wget https://dl.grafana.com/oss/release/grafana-7.3.0~beta2-1.x86_64.rpm
软件包安装:
yum grafana-7.3.0~beta2-1.x86_64.rpm
3.2 Grafana启动
启动命令: systemctl start
grafana-server.service
查看状态命令: systemctl status
grafana-server.service
查看启动端口:netstat –tnulp
|grep granfana
3.3 Grafana浏览器访问
http://xxx.xx.xx.xx:3000 ,输入用户名,密码登录系统。用户名与密码都是"admin"
4. Jmeter配置
4.1添加监听器(Listener)- Backend Listener
4.2配置Backend
Listener-GraphiteBackendListenerClient
Jmeter默认选中的是GraphiteBackendListenerClient
GraphiteBackendListenerClient配置:
graphiteHost:InfluxDB安装的服务器的ip
graphitePort:端口;默认就是2003
rootMetricsPrefix:指标的根前缀;将测试结果存入数据库时,不同指标会生成不同表。
summaryOnly:当你线程组有多个请求又想知道每个请求的结果数据时,选false,true只会返回所有请求的集合数据报告,不会输出每条请求的数据报告。
samplersList:取样器列表;想收集哪些请求就填哪些,通过正则去匹配,提高工作效率。
useRegexpForSamplersList:是否使用正则;如果true则使用,samplersList里可以匹配正则表达式。
percentiles:百分比;即类似聚合报告里90%
Line,95% Line,99% Line的数据。
配置
4.2.1 InfluxDB表结构
执行Jmeter测试脚本,通过InfluxDB Studio(客户端工具)链接InfluxDB查看表结构
Backend Listener配置了rootMetricsPrefix 值为 jmeter. ,可自定义前缀在Backend Listener里直接改 rootMetricsPrefix 的值即可。
可以看到生成了三种前缀的表,分别是: jmeter.all 、 jmeter.get 、 jmeter.post
jmeter.all :代表了所有请求;当summaryOnly=true时,就只有samplerName=all的表了
jmeter.get :代表了HTTP请求的名字是get,即samplerName=get
jmeter.post :代表了HTTP请求的名字是post,即samplerName=post
4.3配置Backend
Listener-InfluxDBBackendListenerClient
influxdbUrl:安装influxdb的路径;主要格式:http://主机地址:8086/write?db=数据库名。
application:应用名称;在 events 表中对应的字段是
application 。
measurement:表名;数据存储到哪个表,默认是jmeter。
summaryOnly:同GraphiteBackendListenerClient 。
samplersRegex:同GraphiteBackendListenerClient 。
percentiles:同GraphiteBackendListenerClient 。
testTitle:测试名称;在 events 表中对应的字段是 text ,JMeter在测试的开始和结束时自动生成注释,该注释的值以'start'和'end'结尾。
eventTags:Grafana允许为每个注释显示标签,在
events 表中对应的字段是 tags。
4.3.1 InfluxDB表结构
执行Jmeter测试脚本,通过InfluxDB Studio(客户端工具)链接InfluxDB查看表结构
events :主要拿存事件的
jmeter :存测试结果数据的,Grafana也是从这个表获取数据再展示。
⊙_⊙小知识:
使用InfluxDBBackendListenerClient好处就是,再多的请求也只会生成两张表。
4.2 InfluxDB指标含义表结构
几个关键指标释义:
|
指标 |
全称 |
含义 |
|
<rootMetricsPrefix>test.minAT |
Min active threads |
最小活跃线程数 |
|
<rootMetricsPrefix>test.maxAT |
Max active threads |
最大活跃线程数 |
|
<rootMetricsPrefix>test.meanAT |
Mean active threads |
平均活跃线程数 |
|
<rootMetricsPrefix>test.startedT |
Started threads |
启动线程数 |
|
<rootMetricsPrefix>test.endedT |
Finished threads |
结束线程数 |
|
<rootMetricsPrefix><samplerName>.ok.count |
sampler的成功响应数 |
|
|
<rootMetricsPrefix><samplerName>.h.count |
服务器每秒命中次数(每秒点击数,即TPS) |
|
|
<rootMetricsPrefix><samplerName>.ok.min |
sampler响应成功的最短响应时间 |
|
|
<rootMetricsPrefix><samplerName>.ok.max |
sampler响应成功的最长响应时间 |
|
|
<rootMetricsPrefix><samplerName>.ok.avg |
sampler响应成功的平均响应时间 |
|
|
<rootMetricsPrefix><samplerName>.ok.pct<percentileValue> |
sampler响应成功的所占百分比 |
|
|
<rootMetricsPrefix><samplerName>.ko.count |
sampler的失败响应数 |
|
|
<rootMetricsPrefix><samplerName>.ko.min |
sampler响应失败的最短响应时间 |
|
|
<rootMetricsPrefix><samplerName>.ko.max |
sampler响应失败的最长响应时间 |
|
|
<rootMetricsPrefix><samplerName>.ko.avg |
sampler响应失败的平均响应时间 |
|
|
<rootMetricsPrefix><samplerName>.ko.pct<percentileValue> |
sampler响应失败的所占百分比 |
|
|
<rootMetricsPrefix><samplerName>.a.count |
sampler响应数(ok.count+ko.count) |
|
|
<rootMetricsPrefix><samplerName>.sb.bytes |
已发送字节 |
|
|
<rootMetricsPrefix><samplerName>.rb.bytes |
已接收字节 |
|
|
<rootMetricsPrefix><samplerName>.a.min |
sampler响应的最短响应时间 |
|
|
(ok.count和ko.count的最小值) |
||
|
<rootMetricsPrefix><samplerName>.a.max |
sampler响应的最长响应时间 |
|
|
(ok.count和ko.count的最大值) |
||
|
<rootMetricsPrefix><samplerName>.a.avg |
sampler响应的平均响应时间 |
|
|
(ok.count和ko.count的平均值) |
||
|
<rootMetricsPrefix><samplerName>.a.pct<percentileValue> |
sampler响应的百分比 |
|
|
(根据成功和失败的总数来计算) |
||
具体详见官方文档:http://jmeter.apache.org/usermanual/realtime-results.html
4. Grafana配置
4.1配置数据源
进入Grafana的首页,Configuration--> Add DataSource,配置Name、URL、Database
4.2配置图形看板
Grafana 官方看板地址:https://grafana.com/grafana/dashboards/5496
至此, Grafana+Jmeter+Influxdb 性能实时监控平台已搭建完毕,官方模板提供的看板能满足大多数要求,Grafana支持的图表自定义配置,看板样式可随意配置。
Jmeter Backend Listener使用 GraphiteBackendListenerClient 来采集数据的,请求多起来的时候会有非常多的表,会增加维护成本;推荐使用 InfluxDBBackendListenerClient 来采集数据。




