ITest

Jmeter压测实时监控

2020-12-23

前言

jmeter 在调试脚本时,用的是gui界面,可以通过界面监控插件实时查看数据.但在真实测试中,我们往往用的的是非gui界面,这样可以避免界面对性能测试
的影响,此时我们就需求在非gui界面做一些实时监控,这里介绍一种方法满足这个需求。jmeter.Backend Listener + Grafana + InfluxDB

InfluxDB

简介:InfluxDB是一个开源的没有外部依赖的时间序列数据库 适用于记录度量,事件及执行分析

安装InfluxDB

1
2
3
4
5
6
7
8
mac    > brew update
> brew install influxdb
> ln -sfv /usr/local/opt/influxdb/*.plist ~/Library/LaunchAgents
> launchctl load ~/Library/LaunchAgents/homebrew.mxcl.influxdb.plist


linux >wget https://dl.influxdata.com/influxdb/releases/influxdb-0.13.0.x86_64.rpm
>sudo yum localinstall influxdb-0.13.0.x86_64.rpm

配置InfluxDB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@localhost ~]# vi /etc/influxdb/influxdb.conf

# 找到graphite并且修改它的库与端口
[[graphite]]
enabled = true
database = "jmeter"
bind-address = ":2003"
protocol = "tcp"
consistency-level = "one"

# 找到admin,将前面的#号去掉,开放它的UI端口
[admin]
# Determines whether the admin service is enabled.
enabled = true

# The default bind address used by the admin service.
bind-address = ":8083"

# Whether the admin service should use HTTPS.
# https-enabled = false

# The SSL certificate used when HTTPS is enabled.
# https-certificate = "/etc/ssl/influxdb.pem

创建数据库

1
2
> influx
> CREATE DATABASE jmeter

启动InfluxDB

1
2
3
4
5
[root@localhost ~]# /etc/init.d/influxdb restart
Stopping influxdb...
influxdb process was stopped [ OK ]
Starting influxdb...
influxdb process was started [ OK ]

按配置启动

1
> influxd -config /usr/local/etc/influxdb.conf

Jmeter

要将性能指标从JMeter推送到InfluxDB,我们需要使用Backend Listener。
此侦听器允许将度量标准直接写入数据库。

Backend Listener 参数解释:

1
2
3
4
5
6
7
8
9
10
Backend Listener implementation - 这是一个实现类,将用作JMeter测试指标的监听器。此参数的值基于我们将要使用的协议。如果您还记得,我们使用了为InfluxDB配置指定的石墨协议配置。为此,我们需要使用'GraphiteBackendListenerClient'
Async Queue size - 队列值包含异步处理它们的度量标准。除非有一些特定的性能问题,否则最好不要将此值从默认的“5000”值更改。
graphiteMetricsSender - 将用作度量标准发送方的实现类。只需使用默认值。
graphiteHost - InfluxDB所在的主机
graphitePort - 我们在InfluxDB配置文件的'graphite'部分中指定的端口
rootMetricsPrefix - 将用于存储在数据库中的所有度量标准的基本前缀。请注意,指标没有默认分隔符。这就是为什么最好使用'。' 此属性中指定的前缀末尾的符号
summaryOnly - 如果您只想在数据库中保留摘要结果并且不希望在测试执行期间收集所有详细指标,请使用“true”
samplersList - 如果要仅将特定采样器发送到数据库,请使用此字段。在我们的例子中,我们想要发送所有样本,因此我们将此参数留空
useRegexpForSamplersList - 如果要在'samplersList'字段中指定正则表达式以选择应发送到数据库的采样器,则输入'true'
percentiles - 用于指定应发送到数据库的度量百分位数

一旦配置到位,我们就可以运行我们的测试执行。

查看InfluxDB

1
2
3
4
> influx
> USE jmeter
> SHOW MEASUREMENTS
> SELECT * FROM "jmeter.all.a.avg" // 有数据则连接数据库成功

常用参数如下:

1
2
3
4
5
6
名称	                           描述
jmeter.all.h.count 所有请求的TPS
jmeter.<请求名称>.h.count 对应<请求名称>的TPS
jmeter.all.ok.pct99 99%的请求响应时间
jmeter.<请求名称>.ok.pct99 对应<请求名称>99%的请求响应时间
jmeter.all.test.startedT 线程数

Grafana

安装 Grafana

1
2
3

mac > brew install grafana
linux > yum install https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.4.3-1.x86_64.rpm

启动 Grafana

1
> service grafana-server start

登录 Grafana

1
2
默认用3000端口  例如 本地用 http://localhost:3000
使用“admin”作为默认用户名和密码登录

首先,我们需要使用指标指定数据源。点击欢迎页面上的“Add data source”

根据我们之前的步骤进行适当的配置,然后单击“添加”按钮以验证Grafana是否可以连接到InfluxDB

在Grafana中创建我们的第一个仪表板。单击左上角的按钮打开Grafana菜单,然后转到Dashboards -> New

Grafana从JMeter收集了InfluxDB中的数据。通过单击每行的顶部,您可以选择该行应表示的度量标准。

更多Grafana操作点击这里