前言
- 本篇文章引用了小菠萝测试笔记,大部分内容非原创,基于自身实操过程中,完善了部分。
- 本篇随笔是在Linux上搭建的,后面会补充在docker以及k8s上如何部署安装
工具介绍
工具 |
介绍 |
Jmeter |
压测工具 |
InfluxDB |
Go 语言开发的一个开源分布式时序数据库,非常适合存储指标、事件、分析等数据 |
Grafana |
Javascript 开发的前端工具,用于访问 InfluxDB,自定义报表、显示图表等,支持二次开发 |
Centos8安装InfluxDB
InfluxDB 官网下载路径:https://portal.influxdata.com/downloads/
安装InfluxDB
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.6.3.x86_64.rpm
sudo yum localinstall influxdb-1.6.3.x86_64.rpm
修改配置文件
vim /etc/influxdb/influxdb.conf
【http】模块
- 8086端口:Grafana访问Influxdb数据库的端口
enabled = true bind-address = ":8086"
【graphite】模块
- database = “jmeter” :写入到Influxdb哪个数据库,此处配置了jmeter,相当于jmeter压测工具写入数据到Influxdb的jmeter数据库中(配置文件配置了,但是库还没有,需要自己创建)
- 2003端口:Jmeter连接数据库,写入数据的端口
enabled = true
database = "jmeter"
retention-policy = ""
bind-address = ":2003"
protocol = "tcp"
consistency-level = "one"
启动InfluxDB
- 启动命令: systemctl start influxdb.service
- 查看状态命令: systemctl status influxdb.service
- 备注:如果启动后,配置文件未生效(jmeter压测工具写入数据到Influxdb的jmeter数据库报错),执行命令
cd /etc/influxdb/
influxd -config influxdb.conf
创建InfluxDB的jmeter数据库
进入influxdb数据库命令行:influx -precision rfc3339
查看当前有哪些数据库:show databases
创建【graphite】模块配置的database:create database jmeter
退出influxdb数据库命令行:exit
Influxdb数据库部分操作已全部完成
Centos8安装Grafana
安装Grafana
wget https://dl.grafana.com/oss/release/grafana-6.5.2-1.x86_64.rpm sudo yum localinstall grafana-6.5.2-1.x86_64.rpm
启动Grafana
启动命令: systemctl start grafana-server.service
查看状态命令: systemctl status grafana-server.service
访问Grafana
- 访问Grafana的端口为3000,由于端口未配置进出站规则,所以暂时无法访问(当然如果你防火墙没开,就没有这个问题),需要配置Linux防火墙相关参数
开放3000端口:firewall-cmd --zone=public --add-port=3000/tcp --permanent
更新进出站规则:firewall-cmd --reload
- 访问Grafana,当前Linux系统IP地址(ifconfig)加3000端口号
- 用户名密码均是admin
Jmeter压测工具
往Influxdb数据库写入数据,通过监听器的后端监听器实现
后端监听器配置
运行Jmeter脚本,查看数据库数据是否写入
命令行进入Influxdb数据库,发现数据成功写入
influx -precision rfc3339
show databases
use jmeter
show measurements
Jmeter压测工具写入Influxdb数据含义
Influxdb生成的表前缀含义
- jmeter.all :代表了所有请求;当后端监听器选项summaryOnly=true时,只有samplerName=all的表
- jmeter.get :使用get方法的HTTP请求
- jmeter.post :使用post方法的HTTP请求
Influxdb生成的表数据含义
- 跟Jmeter线程组设置相关的表
- jmeter.:是后端监听器rootMetricsPrefix选项配置
指标 | 含义 |
jmeter.test.minAT | 最小活跃线程数 |
jmeter.test.maxAT | 最大活跃线程数 |
jmeter.test.meanAT | 平均活跃线程数 |
jmeter.test.startedT | 启动线程数 |
jmeter.test.endedT | 结束线程数 |
请求响应时间指标的表
- 重点:每个sampler都包含了所有响应时间指标,每个sampler的每个指标都会有单独的一个表存储结果数据
- jmeter.get/post.:后端监听器rootMetricsPrefix选项配置+实际请求的方法
- <percentileValue>:后端监听器percentiles选项配置,展示百分之多少的数据
指标 | 含义 |
jmeter.get/post.ok.count | sampler的成功响应数 |
jmeter.get/post.h.count | 服务器每秒命中次数(每秒点击数,即TPS) |
jmeter.get/post.ok.min | sampler响应成功的最短响应时间 |
jmeter.get/post.ok.max | sampler响应成功的最长响应时间 |
jmeter.get/post.ok.avg | sampler响应成功的平均响应时间 |
jmeter.get/post.ok.pct<percentileValue> | sampler响应成功的所占百分比 |
jmeter.get/post.ko.count | sampler的失败响应数 |
jmeter.get/post.ko.min | sampler响应失败的最短响应时间 |
jmeter.get/post.ko.max | sampler响应失败的最长响应时间 |
jmeter.get/post.ko.avg | sampler响应失败的平均响应时间 |
jmeter.get/post.ko.pct<percentileValue> | sampler响应失败的所占百分比 |
jmeter.get/post.a.count | sampler响应数(ok.count+ko.count) |
jmeter.get/post.sb.bytes | 已发送字节 |
jmeter.get/post.rb.bytes | 已接收字节 |
jmeter.get/post.a.min |
sampler响应的最短响应时间 (ok.count和ko.count的最小值) |
jmeter.get/post.a.max |
sampler响应的最长响应时间 (ok.count和ko.count的最大值) |
jmeter.get/post.a.avg |
sampler响应的平均响应时间 (ok.count和ko.count的平均值) |
jmeter.get/post.a.pct<percentileValue> |
sampler响应的百分比 (根据成功和失败的总数来计算) |
配置Grafana
首先进入Grafana的首页,可以看到官方画了个流程:先创建数据源,再创建数据面板
创建数据源
一共有两个入口哈,可以在首页直接点击 Create your first data source ,也可以看第二张图按步骤进入创建页面
然后,选择InfluxDB作为我们的数据源
到此为止,数据源就配置成功啦!!
配置数据看板
Grafana&InfluxDB集成,展示测试结果数据
panel基础使用
按上面的步骤创建好DashBoard后,再通过panel展示具体数据,先介绍下panel的入口
一般选 Add Query 先,当然选 Choose Visualization 也可以,进去后可以相互切换的
Convert to row 就是生成一行,可以将展示差不多一致类型数据的panel放到里面,统一管理,收起or展开;
如下图,我将描述线程数和响应数的panel放在同一个Row了
数据绑定
查看总线程数、成功响应数、失败响应数
可以先点Add Query,进入到下面的界面
若想看成功响应数和失败响应数,只需要切换表名即可;
可以发现跟我一开始只展示数字不太一样,因为图表类型还没设置;当我们只想看数据而不想看数据趋势图的话,可以改变它的类型;
在同一个界面,点击左侧列表选中第二个icon,然后选择Singlestat即可
查看所有请求、get请求、post请求的TPS
如果想在同一个panel里展示多个指标数据的话,可以通过在Panel里Add Query
基本的数据绑定已经教会大家啦,自己想要展示什么数据直接改变表名就行了
顺带附上官方提供的一个数据看板图,大家也可以照搬照抄用它的panel,手动添加每个指标
至此,初级版的Grafana+Jmeter+Influxdb 性能实时监控平台初步搭好啦!
当然博主是不建议Jmeter使用 GraphiteBackendListenerClient 来采集数据的,因为请求多起来的时候会有非常多的表,维护成本也会增加;后面将会介绍如何通过 InfluxDBBackendListenerClient 来采集数据
配置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
不懂application和testTitle的小伙伴可以看看下面的图,可以看到同一个testTitle的两条记录的时间差就是执行测试计划的总时长
建议:只需修改application和testTitle即可,可以相同也可以不相同,其他配置跟着图片走就好了;当然安装路径还是要改的哈
查看InfluxDB
使用InfluxDBBackendListenerClient好处就是,再多的请求也只会生成两张表:
events :主要拿存事件的
jmeter :存测试结果数据的,Grafana也是从这个表获取数据再展示
再次Grafana&InfluxDB集成,展示测试结果数据
这次就不再需要自己去创建DashBoard和Panel了,因为在官方模板库,已经有一个非常完美的模板了,当然前提是你要用 InfluxDBBackendListenerClient 采集数据才能有效的哈
首先,进入官方模板库: https://grafana.com/dashboards ,然后跟着图片导入模板并初始化即可
只要你的数据源,表名配的没有错,Jmeter再执行一下测试计划,DashBoard中筛选下时间,就可以成功看到数据啦!
模板自带了三个下拉筛选框
data_source:数据源,在Grafana配置了多少个就显示多少个
application:在Jmeter配置好的application,如果每次测试计划执行时的application都不一样,你就可以通过这个筛选出对应测试时机的结果数据了
transaction:在Jmeter配置好的sampleList,譬如我只发了get、post请求,这里就只会给你选get、post;可以滑到页面下面看到针对某个请求的数据展示