Grafana + InfluxDB 实现 Jmeter 压测的图形化监控

时间:2022-07-28
本文章向大家介绍Grafana + InfluxDB 实现 Jmeter 压测的图形化监控,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

本方案采用 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:

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.confhttp 下面的配置是否打开并 enable,Grafana 通过 http 从 influxdb 拉取数据,默认是打开的。

1.4 启动 InfluxDB

保存配置后用下面的命令启动 influxdb,并查看运行状态。

sudo service influxdb start
service influxdb status

也可使用下面的 curl 命令验证 InfluxDB 是否能正常访问:

curl -i influxdb-ip:8086/ping

正常情况下,会得到下图输出的信息:

接着登录 influxdb 创建数据库和用户

// 登录 influxdb
influx -precision rfc3339  //直接 influx 也可以

CREATE DATABASE perftest  // 创建数据库,和上面配置文件中的数据库名对应
use perftest 

// 创建用户并制定密码,这里的用户名和密码,在配置 Grafana 时会用到
create user "admin" with password '123456' with all privileges 

使用 InfluxDB 的 HTTP API 可以更简单的创建数据库,比如下面就创建了一个名为 loadtest 的库:

curl -i -XPOST http://influxdb-ip:8086/query --data-urlencode "q=CREATE DATABASE loadtest"

2. 配置 Jmeter Backend Listener


Jmeter 支持 GraphiteHTTP 两种协议向 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 验证数据上报是否正常:

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:

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:

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 看到压测数据,如下图: