Jmeter + Grafana + InfluxDB 性能测试监控
一、前言
之前有用过Grafana,界面看起来有点高端的样子,后面就想学习下,用Grafana监控jmeter的数据,实际操作了一波后,知道了整个搭建流程和原理,基本上,就是Jmeter通过“Backend Listener”,将测试的数据上传到服务器上,通过InfluxDB来存储,Grafana来展示出来。
主要参考了以下博客https://www.cnblogs.com/yyhh/p/5990228.html,https://www.cnblogs.com/poloyy/p/12219145.html
篇幅比较长,要有耐心哈,其实很简单的。
二、工具介绍
1、InfluxDB
Go 语言开发的一个开源分布式时序数据库,非常适合存储指标、事件、分析等数据。
2、Grafana
是纯粹用js编写出来的,专门用来展示数据用的。
3、Jmeter
压测、接口工具
三、阿里云服务器Linux-Centos 安装InfluxDB
我是阿里云新用户,可以试用一下服务器,哈哈哈。因为我是搭建好了,所以就不截图了,直接贴执行命令
1、直接执行命令安装
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.6.3.x86_64.rpm sudo yum localinstall influxdb-1.6.3.x86_64.rpm
2、安装完成后,修改InfluxDB的配置,主要配置jmeter存储的数据库与端口号
vim /etc/influxdb/influxdb.conf
tips:进入配置文件后,i进入编辑模式,esc退出编辑模式,shift+冒号 输入wq 退出并保存,shift+冒号 输入q 退出不保存
3、找到graphite并且修改它的库与端口
4、找到http,将前面的#号去掉
5、安装InfluxDB可视化工具
可通过InfluxDB可视化工具来查看我们的数据库和数据哦,具体安装和简单使用参照此篇博文:https://www.cnblogs.com/poloyy/p/12213495.html
6、配置成功后,启动InfluxDB
启动命令:
systemctl start influxdb.service
查看状态命令:
systemctl status influxdb.service
到此,InfluxDB已安装并配置完成了!
特别说明:
- 8083端口:InfluxDB的UI界面展示的端口
- 8086端口:Grafana用来从数据库取数据的端口
- 2003端口:刚刚设置的,Jmeter往数据库发数据的端口
四、阿里云服务器Linux-Centos 安装Grafana
1、直接执行命令安装
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
2、然后启动即可
启动命令:
systemctl start grafana-server.service
查看状态命令:
systemctl status grafana-server.service
3、外网访问IP加端口http://xxx.xx.xx.xx:3000
输入用户名,密码登录系统,用户名与密码都是"admin",若能访问到grafana就是成功
4、附上阿里云服务对外开放端口教程
参考https://www.cnblogs.com/poloyy/p/12213297.html#gallery-4
附上教程理由:当grafana和influxdb的状态都是active时,访问3000还是失败,说明可能3000端口未开放
1)一句话:如果你是买的各大厂商的云服务器,去安全组配置对应需要使用到的端口就可以啦!
2)添加安全组规则,需要开放哪个端口就填写哪个端口
tips:再附上linux的些些命令,额外学习——如果要用linux开放端口,首先要启动防火墙,开放端口后,要reload更新防火墙规则
//查看firewall状态 systemctl status firewalld.service //启动firewall systemctl start firewalld //停止firewall systemctl stop firewalld //开机启动firewall systemctl enable firewalld //开机禁止firewall systemctl disable firewalld //查看启动失败的服务列表 systemctl --failed //查看firewall全部信息 firewall-cmd --list-all //查看已开放的端口 firewall-cmd --list-ports //更新防火墙规则 firewall-cmd --reload //开放端口 firewall-cmd --zone=public --add-port=3000/tcp --permanent //关闭端口 firewall-cmd --zone=public --remove-port=3000/tcp --permanent
五、配置Jmeter
1、在线程组中,添加监听器(Listener)- Backend Listener
2、配置Backend Listener
- graphiteHost:InfluxDB安装的服务器的ip
- graphitePort:端口;默认就是2003
- rootMetricsPrefix:指标的根前缀;将测试结果存入数据库时,不同指标会生成不同表,但这些表都最好要有一个共同的前缀,在下面可以看到表名前缀都是jmeter开头的
- summaryOnly:当你线程组有多个请求又想知道每个请求的结果数据时,最好填false,因为true只会返回所有请求的集合数据报告,不会输出每条请求的数据报告
- samplersList:取样器列表;想收集哪些请求就填哪些,最好用正则去匹配,减轻工作量
- useRegexpForSamplersList:是否使用正则;如果true则使用,samplersList里可以匹配正则表达式
- percentiles:百分比;即类似聚合报告里90% Line,95% Line,99% Line的数据;倘若想要99.9时,需要写成【99_9】,用下划线代替点
3、运行Jmeter后,查看influxdb
可以看到生成了三种前缀的表,分别是:jmeter.all jmeter.get jmeter.post
jmeter.all:代表了所有请求;当summaryOnly=true时,就只有samplerName=all的表了
jmeter.get:代表了HTTP请求的名字是get,即samplerName=get
jmeter.post:代表了HTTP请求的名字是post,即samplerName=post
六、配置Grafana
1、先创建数据源,再创建数据面板
2、选择influxdb作为数据源
3、配置数据看板
4、选择图表类型后,配置数据源
如果想在同一个panel里展示多个指标数据的话,可以通过在Panel里Add Query,想要展示什么数据直接改变表名就行了
以上,初级版的Grafana+Jmeter+Influxdb 性能实时监控平台初步搭好啦,如果想把监控平台做的好,其实是需要了解influxdb查询语句的,目前我只是个渣渣,将就着用先。
上面讲的是基于jmeter的GraphiteBackendListenerClient来采集数据的,因为请求多起来的时候会有非常多的表,维护成本也会增加,所以下面第七章将介绍通过InfluxDBBackendListenerClient来采集数据。
七、配置Backend Listener之InfluxDBBackendListenerClient
1、jmeter的配置项
2、配置项含义
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
3、运行jmeter脚本后,查看influxdb
使用InfluxDBBackendListenerClient好处就是,再多的请求也只会生成两张表
events:主要拿存事件的
jmeter:存测试结果数据的,grafana也是从这个表获取数据再展示
4、再次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;可以滑到页面下面看到针对某个请求的数据展示