本方案采用 Grafana InfluxDB 实时展示 Jmeter 的压测数据,下面为本文实验的压测指标数据流向图。
本文研究了 Jmeter 提供的两种方式向 InfluxDB 写数据方式,具体在文中第二节重点描述其使用和配置:
- 使用 Graphite 协议
- 使用 HTTP 协议
Jmeter 提供的方式需要自己配置 Grafana Dashboard,不是很方便,本文第四节:JMeter-InfluxDB-Writer-plugin & Jmeter Load Test Dashboard
介绍了 NovaTec-APM 提供的 JMeter 插件以及配套的 Grafana Dashboard,可以节省大量配置工作,推荐大家使用这种方式。
此外,本文中使用的环境配置如下:
- 腾讯云 CVM CentOS 7.7
- InfluxDB 1.8
- Jmeter 5.3
- Grafana 7.1.3
1. InfluxDB 安装配置
1.1 安装 InfluxDB
CentOS 系统可使用以下命令下载安装 InfluxDB:
代码语言:txt复制wget http://dl.influxdata.com/influxdb/releases/influxdb-1.8.1.x86_64.rpm
sudo yum localinstall influxdb-1.8.1_64.rpm
1.2 Graphite 配置
编辑 influxdb 配置文件/etc/influxdb/influxdb.conf
, 使用 graphite 协议上报数据到 InfluxDB,需要将 graphite 下面的注释去掉,设置enable=true
启用 graphite。
1.3 HTTP 配置
检查配置文件/etc/influxdb/influxdb.conf
http 下面的配置是否打开并 enable,Grafana 通过 http 从 influxdb 拉取数据,默认是打开的。
1.4 启动 InfluxDB
保存配置后用下面的命令启动 influxdb,并查看运行状态。
代码语言:txt复制sudo service influxdb start
service influxdb status
也可使用下面的 curl 命令验证 InfluxDB 是否能正常访问:
代码语言:txt复制curl -i influxdb-ip:8086/ping
正常情况下,会得到下图输出的信息:
接着登录 influxdb 创建数据库和用户
代码语言:txt复制// 登录 influxdb
influx -precision rfc3339 //直接 influx 也可以
CREATE DATABASE perftest // 创建数据库,和上面配置文件中的数据库名对应
use perftest
// 创建用户并制定密码,这里的用户名和密码,在配置 Grafana 时会用到
create user "admin" with password '123456' with all privileges
使用 InfluxDB 的 HTTP API 可以更简单的创建数据库,比如下面就创建了一个名为 loadtest 的库:
代码语言:txt复制curl -i -XPOST http://influxdb-ip:8086/query --data-urlencode "q=CREATE DATABASE loadtest"
2. 配置 Jmeter Backend Listener
Jmeter 支持 Graphite 和 HTTP 两种协议向 InfluxDB 上报压测指标数据。
2.1 使用 Graphite 协议上报 metric
2.1.1 添加后端监听器:Test Plan > Add > Listener > Backend Listener
2.1.2 选择 org.apache.jmeter.visualizers.backend.graphite.GraphiteBackendListenerClient
- Backend Listener implementation - Jmeter 压测指标监听器的实现类,按使用的数据上报协议进行选择。本文使用 graphite 协议上报压测指标数据,因而选择 GraphiteBackendListenerClient。
- Async Queue size - 指标处理一般队列大小,除非遇到性能问题,否则保持默认 5000 不变。
2.1.3 配置后端监听器
- graphiteMetricsSender - metric sender 的实现类,保持默认即可。
- graphiteHost - InfluxDB 所在的主机 IP。
- graphitePort - InfluxDB 配置文件的 graphite 中指定的端口号。
- rootMetricsPrefix - 对应 InfluxDB 的 measurement 前缀。
- summaryOnly - true 只保留汇总数据结果,不会存储详细的压测 metrics 数据。
- samplersList - 保留 blank 或填 .* 表示上报所有 sampler 压测 metric。若按需上报,此处指定 sampler 的名称正则表达式。
- useRegexpForSamplersList - true 表示使用 samplersList 指定的正则表达式,过滤 sampler 上报。
- percentiles - 指定上报的 百分位 数据。
2.2 使用 HTTP 协议上报 metric
使用 HTTP 协议时,选择监听器org.apache.jmeter.visualizers.backend.influxdb.InfluxdbBackendListenerClient
- influxdbMetricsSender - metric sender 的实现类,当前只有 HttpMetricsSender 一个实现类,保留默认即可。
- influxdbUrl - InfluxDB 的 url,格式:
http://[influxdb_host]:[influxdb_port]/write?db=[database_name]
。 - application - 在多个应用压测数据共享一个 DB 时,可指定应用名,以便区分。
- measurement - 存储 metric 的 measurement 名称,默认为 jmeter。
- summaryOnly - true 只保留汇总数据结果,不会存储详细的压测 metrics 数据。
- samplersRegexp - 保留 blank 或填 .* 表示上报所有 sampler 压测 metric。若按需上报,此处指定 sampler 的名称正则表达式。
- percentiles - 指定上报的 百分位 数据。
- eventTags - 可指定 tag,如制定则存储在 events measurement 中。
运行 Jmeter 后可使用 InlfuxDB 的 API 验证数据上报是否正常:
代码语言:txt复制curl 'http://influxdb-ip:8086/query?pretty=true' --data-urlencode "db=loadtest" --data-urlencode "q=SHOW SERIES"
出现下图的输出,表示 metric 数据收集正常:
3. Grafana 安装配置
3.1 安装 Grafana
CentOS 中可使用下面的命令下载和安装 grafana:
代码语言:txt复制wget https://dl.grafana.com/oss/release/grafana-7.1.3-1.x86_64.rpm
sudo yum install grafana-7.1.3-1.x86_64.rpm
也可去官网下载 Grafana 下载:https://grafana.com/grafana/download?platform=linux
安装完成后,使用以下命令启动 Grafana:
代码语言:txt复制systemctl start grafana-server
接着打开浏览器,使用 http://<IP 地址>:3000
即可访问 grafana。如果无法访问,请检查下安全组是否开放了3000端口。
3.2 添加 InfluxDB Data Source
Grafana初始用户名密码都是 admin, 登入之前提示先改初始密码,可按需修改。进入 Grafana 后按下图配置 influxdb Data Source。
3.3 配置监控大盘
按下图中的步骤添加 dashboard。
重复上面 panel 的创建步骤,添加自己感兴趣的监控图表。
Jmeter 官网上给出了每个指标的含义,具体见:https://jmeter.apache.org/usermanual/realtime-results.html
4. JMeter-InfluxDB-Writer-plugin & Jmeter Load Test Dashboard
直接使用 NovaTec-APM 提供了 JMeter-InfluxDB-Writer-plugin 以及配套的 Grafana Dashboard Jmeter Load Test 可省去配置 grafana dashboard 的麻烦。
4.1 配置 JMeter-InfluxDB-Writer-plugin
- 下载 JMeter-InfluxDB-Writer-plugin
- 将下载的 JMeter-InfluxDB-Writer-plugin-1.2.jar(这里选择了 1.2 版)放入 Jemter 的插件目录
JMETER_HOME/lib/ext
- 重启 Jmeter
- 按下图所示配置 Backend Listener,选择
rocks.nt.apm.jmeter.JMeterInfluxDBBackendListenerClient
,填上 InfluxDB 信息后运行启动压测,Jmeter 的日志窗口可以看到插件正常工作。
4.2 导入并使用 Jmeter Load Test 看板
在 Grafana 的 Dashboards Manage 页面,输入Jmeter Load Test 的 Dashboard ID 1152 后,点击 Import 按钮即可导入。
启动 Jmeter 压测后,即可在 Jmeter Load Test Dashboard 看到压测数据,如下图: