性能测试工具 性能测试监控工具--Jmeter + Grafana + InfluxDB

优雅的测试媛 · 2021年01月07日 · 最后由 小L 回复于 2023年06月13日 · 6811 次阅读

JMeter 执行完压测脚本后,会自动生成 html 格式的测试报告,之前我也是一直用这种形式看报告。看到 InfluxDB + Grafana 展示的测试报告后,忍不住想尝试下。

而且用 JMeter 自带的报告,有时会生成报告失败,需要再重跑压测脚本,而且生成的 html 报告也会占用较多时间,使用 Grafana+InfluxDB 避免了这个问题。

先上个报告模板对比图:

JMeter 自动生成的 HTML 报告 :


Grafana 仪表盘展示的测试报告:

Grafana 的报告是不是很炫酷?那就开始搞起!

先大概梳理下报告展示原理:见下图,JMeter 本身有个监听器叫 “Backend Listener”,这个监听器可以将 jmeter 统计的 TPS、响应时间、错误率等数据异步发送到 InfluxDB 数据库中;而 Grafana 是一个可视化展示工具,可以从 InfluxDB 中获取数据进行展示。

接下来就是安装 InfluxDB 和 Grafana,前提条件:InfluxDB 和 Grafana 部署的服务器网络要通, JMeter 部署到的机器和 InfuxDB 服务器网络要通。

我是将 InfuxDB、Grafana 部署在了同一台 Linux 服务器上,JMeter 安装在 Windows 机上。

1)安装 InfluxDB

InfluxDB 官网有详细的安装文档,根据服务器的系统选择对应的安装方式,我的服务器是 CentOS,所以进行如下安装。

Tips:最新的 2.0 版本更新了数据交互方式,我选择了 1.8 版本。

先将 InfluxDB 版本导入到 yum manager 中,然后用 yum install 直接安装,启动服务即可。

cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
[influxdb]
name = InfluxDB Repository - RHEL \$releasever
baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF
sudo yum install influxdb
sudo service influxdb start

InfluxDB 可以通过 http 协议方式和 JMeter、Grafana 通信,默认的端口号 8086,如果想修改端口号和其它配置,可修改其配置文件,配置文件:/etc/influxdb/influxdb.conf。

网上也有一些说是可以修改一些配置在 web 端访问 InfluxDB,不过我试了下高版本的没办法通过 web 访问。

InfluxDB 部署的服务器 IP:XXX.XXX.XX.XX,后面会用到。

服务启动成功后,可以使用了。直接输入 influx,进入到数据库中,可以查看下当前有哪些库和表。

默认是只显示一个_internal,我们可以新建一个 database,比如 jmeter。

create database jmeter
show databases

ok,那这个 jmeter 数据库就可以作为 jmeter 监控指标输出库,先记下,后面会用到。

InfluxDB 官网安装文档: https://docs.influxdata.com/influxdb/v1.8/introduction/install/

2)部署 Grafana

Grafana 的安装比较简单了,去官网选择对应服务器系统的安装方式,还是 CentOS,服务和 InfluxDB 为同一台。

wget https://dl.grafana.com/oss/release/grafana-7.3.6-1.x86_64.rpm
sudo yum install grafana-7.3.6-1.x86_64.rpm

安装成功后,启动 Grafana。

sudo service grafana-server start

Grafana 默认的 http 端口号是 3000,由于之前我在这台服务器部署了别的服务,占用了 3000。 所以修改 Grafana 的配置文件,将端口号修改为 3001,保存后,就可以通过浏览器访问 Grafana 啦。

访问 http://XXX.XXX.XX.XX:3001,如果出现登录页面就说明部署没问题啦。 默认账号密码都是 admin,可以修改。

Grafana 官网:https://grafana.com/grafana/download?platform=linux

3)配置 Grafana

开篇说了展示逻辑,Grafana 需要从 InfluxDB 取数据展示,所以我们先来配置数据库。登录进去后,点击 “Configuration→Data Source”,添加刚才创建的 jmeter 数据库。

添加数据库类型选择 “InfluxDB”,"URL"填写 InfluxDB 所在的服务器连接地址,上面已经说了部署在了 XXX.XXX.XX.XX 这台服务器,InfluxDB 默认 http 通信端口为 8086,所以 URL 配置为:http://XXX.XXX.XX.XX:8086
当然,因为我们的 Grafana 和 InfluxDB 部署在同一台服务器,也可以配置为:http://localhost:8086

点击 “Save&Test”,如果提示 “Data source is working”,说明配置数据库成功。

接下来还需要添加一个 Dashboard,用来展示 JMeter 的测试报告。点击 “Dashboards → Manager”,这里可以使用官方提供模板,导入 ID 为 5496 的模板,



点击 “load” 后,会自动获取模板名称,DBname 我们选择 InfluxDB,measurement name 输入 jmeter,就是刚才我们创建的数据库。

因为我已经添加过这个 dashboard,所有会提示是不是要覆盖,如果你是第一次添加,不会出现下图的红色文字。

最后点击下方的 “load” 后,就成功添加 dashboard 了,这时候就可以展示出来了,只是此时 jmeter 数据库中还没有数据。

4)配置 JMeter,在 Grafana 中展示测试报告

一开始说了 JMeter 自带的 Backend Listener 可以将数据传送到 InfluxDB,所以我们在 Jmeter 的压测脚本中,添加这个监听器,并且配置对应参数就可以了。

influxurl:就是 InfluxDB 的通信地址,还记得上面的配置吗?IP 是 XXX.XXX.XX.XX,它的 http 默认通信端口为 8086,我们创建的数据库名称为 jmeter,所以配置为 http://XXX.XXX.XX.XX:8086/write?db=jmeter

application:我理解的这个是用来标识不同的 job 的,在 Grafana 选择展示的仪表盘时会用到。

measurement:是 InfluxDB 的语法,代表数据库表的意思。我们创建的是 jmeter。

Summaryonly:我选择了 false,这样在 Grafana 里不仅会展示这个测试计划的概括报告,还会展示每个事务的 TPS,响应时间和错误率信息。

至此,Backend Listener 就配置好了。

我们把脚本调试通,配置上线程数(压测量),执行脚本。压测时一般不在 GUI 模式下,我们可以使用命令行执行 jmeter -n -l [压测脚本路径]。执行完毕后,我们可以先去服务器上查询下 jmeter 数据库表中的数据。

#influx
> use jmeter
> select * from jmeter

如果是加了 n 个线程组,那么数据库表中就会有 n 条数据。这说明 JMeter 通过监听器已经将数据传送到了 InfluxDB 中了,接下来我们在 Grafana 中我们添加的 Dashboard 中查看测试结果啦。

这里可以看到我们想要的性能参数,TPS,响应时间、错误率等。我们也可以点击 “share” 将报告保存下来,保存的是个链接地址。下次查看可直接访问该链接。


application 为 test01,就是刚才在 JMeter 中配置的。如果有多个测试计划,可以用不同的 application 标志。

可以点击每项,放大显示。

运行完压测脚本后,Grafana 里不会立刻展示测试报告,需要等几分钟,然后我们可以刷新查看。

性能测试过程中,我们需要不断的加线程数来找到系统的最大并发量,每设置一次线程组执行一次,会往 InfluxDB 写入数据,而 Grafana 会展示该 measurement 里所有的数据。

所以,我觉得可以先创建多个 measurement,不同的测试计划写入到不同的表中,在 Grafana 中创建多个 dashboard 选择不同的 measurement 展示测试报告。

共收到 5 条回复 时间 点赞

学到了,谢谢~

牛逼、虽然我没自己搭建、我让运维帮我搭建了、因为我没权限去生产服务器上去操作

这一套都搭建好了,但是 grafana 一直没有数据显示,influxdb 有数据,这个是怎么回事呢?

晴天 回复
  1. 先看 grafana 里配置的 influxdb 的 ip 和端口对不对。
  2. grafana 部署的服务器和 influxdb 部署的服务器通不通?ping 下试试
  3. 然后看 influxdb 服务器的 8086 端口通不通,telnet 下

厉害 学习了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册