暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

手把手教你打造Jmeter压测可视化高逼格监控平台

原创 風立ちぬ〆🧸ིྀ 2023-11-07
181

手把手教你打造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  来采集数据。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论