全网最详细!Centos7.X 搭建Grafana+Jmeter+Influxdb 性能实时监控平台
背景
日常工作中,经常会用到Jmeter去压测,毕竟LR还要钱(@¥&*...),而最常用的接口压力测试,我们都是通过聚合报告去查看压测结果的,然鹅聚合报告的真的是丑到家了,作为程序猿这当然不能忍!那我们要怎么给它变得好看点捏?
如何华丽变身?
|
方式 |
优点 |
缺点 |
场景 |
|
Jmeter+ant+Jenkins |
快捷,上手简单 |
报告还是不够美观、直观,如果测试接口一多,报告就会显示臃肿不够直观 |
看最终报告 |
|
Grafana+Jmeter+Influxdb(推荐) |
数据可视化,数据直观,筛选功能强大,拓展能力强 |
当然就是要自己部署环境咯,还得了解Influxdb的语法和常用查询语句,系统方法等..... |
看压测过程中参数的变化 |
工具介绍
|
工具 |
介绍 |
|
Jmeter |
Java语言开发的压力测试工具(不多介绍) |
|
InfluxDB |
Go 语言开发的一个开源分布式时序数据库,非常适合存储指标、事件、分析等数据 |
|
Grafana |
纯 Javascript 开发的前端工具,用于访问 InfluxDB,自定义报表、显示图表等 |

Centos7安装InfluxDB
备注:博主是自己买的阿里云服务器哈,就不介绍虚拟机下如何安装了(毕竟虚拟机很多坑...)
Influxdata官网下载路径:https://portal.influxdata.com/downloads/
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
3、找到graphite并且修改它的库与端口
enabled = true
database = "jmeter"
retention-policy = ""
bind-address = ":2003"
protocol = "tcp"
consistency-level = "one

4、找到http,将前面的#号去掉

5、现在新版本的InfluxDB已取消自带的数据可视化界面了,旧版的还是有,可通过找到admin,将前面的#号去掉,开放它的UI端口;(该步骤非必须!)
可通过InfluxDB可视化工具来查看我们的数据库和数据哦,具体安装和简单使用参照此篇博文:https://www.cnblogs.com/poloyy/p/12213495.html
[admin]
# Determines whether the admin service is enabled.
enabled = true # The default bind address used by the admin service.
bind-address = ":8083"
6、配置成功后,启动InfluxDB
启动命令: systemctl start influxdb.service
查看状态命令: systemctl status influxdb.service

到此,InfluxDB已安装并配置完成了!!*:ஐ٩(๑´ᵕ`)۶ஐ:*
特别说明:
- 8083端口:InfluxDB的UI界面展示的端口
- 8086端口:Grafana用来从数据库取数据的端口
- 2003端口:刚刚设置的,Jmeter往数据库发数据的端口
Centos7安装Grafana
Grafana官网下载路径:https://grafana.com/grafana/download
1、直接执行以下命令进行安装:
wget https://dl.grafana.com/oss/release/grafana-6.5.2-1.x86_64.rpm
sudo yum localinstall grafana-6.5.-.x86_64.rpm
2、然后启动即可
启动命令: systemctl start grafana-server.service
查看状态命令: systemctl status grafana-server.service

3、访问IP加端口 http://xxx.xx.xx.xx:3000 ,输入用户名,密码登录系统。用户名与密码都是"admin",如果能打开页面则已经成功了!但是...装环境这东西怎么可能这么简单??
4、当你查看状态是active但是访问3000时是失败的话,辣么有可能就是你的3000端口还未开放!
跟着这篇文章来操作就可以开放3000端口啦:https://www.cnblogs.com/poloyy/p/12213297.html
5.访问IP加端口 http://xxx.xx.xx.xx:3000 ,若能访问到grafana就是成功啦!
配置Jmeter
这里就不教如何安装Jmeter了哈,主要讲Jmeter作为采集端是通过什么采集数据的
步骤一:在线程组中,添加监听器(Listener)- Backend Listener

步骤二:配置Backend Listener

可以看到,Jmeter默认选中的Implementatin是 GraphiteBackendListenerClient ,它是Jmeter 2.13就开始提供了;在Jmeter 3.2时又加多了一个 InfluxDBBackendListenerClient ,哎~这两者有什么区别呢?后面会讲到!
这里先讲选中 GraphiteBackendListenerClient 时,每个配置项的含义
- graphiteHost:InfluxDB安装的服务器的ip
- graphitePort:端口;默认就是2003,除非你自己安装InfluxDB时设置了其他端口是哦(可见上面安装InfluxDB后关于graphite的配置)
- rootMetricsPrefix:指标的根前缀;将测试结果存入数据库时,不同指标会生成不同表,但这些表都最好要有一个共同的前缀,这个就是了;后面会讲到不同的指标的含义(重点哦)
- summaryOnly:当你线程组有多个请求又想知道每个请求的结果数据时,最好填false,因为true只会返回所有请求的集合数据报告,不会输出每条请求的数据报告
- samplersList:取样器列表;想收集哪些请求就填哪些,最好用正则去匹配,减轻工作量
- useRegexpForSamplersList:是否使用正则;如果true则使用,samplersList里可以匹配正则表达式
- percentiles:百分比;即类似聚合报告里90% Line,95% Line,99% Line的数据;倘若想要99.9时,需要写成【99_9】,用下划线代替点
建议:如果想看每个请求的结果数据的话,根据我的截图进行配置即可;只需改动samplerList来匹配你需要监控的请求,其他不用动!
步骤三:运行Jmeter脚本,查看数据库
一开始,我的数据库是只有两张表的,这里方便演示,就只跑get、post请求了

如果成功了代表结果数据也存进InfluxDB里面了,接下来我们来看看使用 GraphiteBackendListenerClient 时会生成哪些表呢?

可以看到生成了三种前缀的表,分别是: jmeter.all 、 jmeter.get 、 jmeter.post ;最后其实还有 jmeter.test 开头的表,这个后面会单独拿出来说
============================================
=== 倘若不想了解每个指标的具体含义,可以跳过下面内容
=== 直接点击右侧目录,跳转至配置Grafana,查看下一步
============================================
步骤四:细品指标含义
为什么每个表都有jmeter前缀呢?
因为在Jmeter的Backend Listener配置了rootMetricsPrefix 值为 jmeter. ,你不喜欢前缀或者想起其他名,在Backend Listener里直接改 rootMetricsPrefix 的值就可以了
可以参考下官方文档的写法: <rootMetricsPrefix><samplerName>.ok.count ,rootMetricsPrefix和samplerName都是变量,可配置的
接下来,我们来说明下每个前缀的含义
jmeter.all :代表了所有请求;当summaryOnly=true时,就只有samplerName=all的表了
jmeter.get :代表了HTTP请求的名字是get,即samplerName=get
jmeter.post :代表了HTTP请求的名字是post,即samplerName=post
备注:假设你的某个HTTP请求叫【GET请求啊】,辣么你的数据库就会生成以jmeter.GET请求啊 为前缀的各种表
然后再针对不同指标说下它们的含义
划重点:这里的指标含义都是直接翻译Jmeter官方文档的
喜欢英文的小伙伴可以自行查看:http://jmeter.apache.org/usermanual/realtime-results.html
Thread/Virtual Users metrics - 线程/虚拟用户指标,跟线程组设置相关的
| 指标 | 全称 | 含义 |
| <rootMetricsPrefix>test.minAT | Min active threads | 最小活跃线程数 |
| <rootMetricsPrefix>test.maxAT | Max active threads | 最大活跃线程数 |
| <rootMetricsPrefix>test.meanAT | Mean active threads | 平均活跃线程数 |
| <rootMetricsPrefix>test.startedT | Started threads | 启动线程数 |
| <rootMetricsPrefix>test.endedT | Finished threads | 结束线程数 |
Response times metrics - 响应时间指标
划重点:每个sampler都包含了所有响应时间指标,每个sampler的每个指标都会有单独的一个表存储结果数据
| 指标 | 含义 |
| <rootMetricsPrefix><samplerName>.ok.count | sampler的成功响应数 |
| <rootMetricsPrefix><samplerName>.h.count | 服务器每秒命中次数(每秒点击数,即TPS) |
| <rootMetricsPrefix><samplerName>.ok.min | sampler响应成功的最短响应时间 |
| <rootMetricsPrefix><samplerName>.ok.max | sampler响应成功的最长响应时间 |
| <rootMetricsPrefix><samplerName>.ok.avg | sampler响应成功的平均响应时间 |
| <rootMetricsPrefix><samplerName>.ok.pct<percentileValue> | sampler响应成功的所占百分比 |
| <rootMetricsPrefix><samplerName>.ko.count | sampler的失败响应数 |
| <rootMetricsPrefix><samplerName>.ko.min | sampler响应失败的最短响应时间 |
| <rootMetricsPrefix><samplerName>.ko.max | sampler响应失败的最长响应时间 |
| <rootMetricsPrefix><samplerName>.ko.avg | sampler响应失败的平均响应时间 |
| <rootMetricsPrefix><samplerName>.ko.pct<percentileValue> | sampler响应失败的所占百分比 |
| <rootMetricsPrefix><samplerName>.a.count | sampler响应数(ok.count+ko.count) |
| <rootMetricsPrefix><samplerName>.sb.bytes | 已发送字节 |
| <rootMetricsPrefix><samplerName>.rb.bytes | 已接收字节 |
| <rootMetricsPrefix><samplerName>.a.min |
sampler响应的最短响应时间 (ok.count和ko.count的最小值) |
| <rootMetricsPrefix><samplerName>.a.max |
sampler响应的最长响应时间 (ok.count和ko.count的最大值) |
| <rootMetricsPrefix><samplerName>.a.avg |
sampler响应的平均响应时间 (ok.count和ko.count的平均值) |
| <rootMetricsPrefix><samplerName>.a.pct<percentileValue> |
sampler响应的百分比 (根据成功和失败的总数来计算) |
不知道大家是否有个疑问,为何 a.min 、 a.max 、 a.avg 明明说的都是平均响应时间,但是括号里备注的又是和响应数相关的;但是Jmeter官方文档说明翻译过来的确是这样的..只能等我来寻找答案了!
经过我的“缜密”对比,可以发现官网说明的确是错的哈,真实情况如下!
a.min :是ok.min和ko.min的最小值
a.max :是ok.max和ko.max的最小值
a.avg :是ok.avg和ko.avg的平均值
接下来就是用数据说明事实!按照上面的指标顺序来看图哈!



不过,博主并不确定这样比对是否完全科学正确,但是从博主验证结果来说,我的纠正是正确滴!
附上按官方文档说明翻译过来的对比图,可以看到如果是 a.max 的话,跟 ok.count 和 ko.count 是没有半毛钱关系的

配置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;可以滑到页面下面看到针对某个请求的数据展示
其实这个模板还有很多可以值得改进优化的地方,辣么这个时候就需要你对Grafana的各种用法熟悉操作啦,后续会补充一篇关于Grafana常见用法&高级用法的文章哦!敬请期待!
全网最详细!Centos7.X 搭建Grafana+Jmeter+Influxdb 性能实时监控平台的更多相关文章
- Centos7.X 搭建Grafana+Jmeter+Influxdb 性能实时监控平台(不使用docker)
工具介绍 [centos7安装influxDB] Influxdata官网下载路径:https://portal.influxdata.com/downloads/ 1.直接执行以下命令安装 2.安装 ...
- Centos8.X 搭建Grafana+Jmeter+Influxdb 性能实时监控平台
前言 本篇文章引用了小菠萝测试笔记,大部分内容非原创,基于自身实操过程中,完善了部分. 本篇随笔是在Linux上搭建的,后面会补充在docker以及k8s上如何部署安装 工具介绍 工具 介绍 Jmet ...
- Centos7 搭建Grafana+Jmeter+Influxdb 性能实时监控平台
未完,待更新 背景 日常工作中,经常会用到Jmeter去压测,毕竟LR还要钱(@¥&*...),而最常用的接口压力测试,我们都是通过聚合报告去查看压测结果的,然鹅聚合报告的真的是丑到家了,作为 ...
- window平台基于influxdb + grafana + jmeter 搭建性能测试实时监控平台
一.influxdb 安装与配置 1.1 influxdb下载并安装 官网无需翻墙,但是下载跳出的界面需要翻墙,我这里提供下载链接:https://dl.influxdata.com/influxdb ...
- 用Red5搭建支持WEB播放的实时监控视频
用Red5搭建支持WEB播放的实时监控视频 1. 下载Red5:https://github.com/Red5/red5-server/releases 下载了Red5 1.0.6 release的Z ...
- 搭建jmeter+influxdb+grafana压测实时监控平台(超详细,小白适用)
1.前言 在使用jmeter做性能测试的时候,监控系统性能的时候,无论是使用插件还是报告生成,都没法实现实时监控.使用JMeter+Influxdb+Grafana可以实现实时监控. 本次环境搭建各软 ...
- Jmeter监控平台搭建:JMeter+InfluxDB+Grafana
背景 平时一般用Jmeter的Gui模式,添加对应的插件,查看每秒线程数.TPS.响应时间等曲线,其实高并发是不建议这么看的. 解决方案 可以搭配InfluxDB+Grafana工具,使Jmeter异 ...
- 搭建grafana+telegraf+influxdb服务器性能监控平台
最近在学习性能测试,了解到一套系统资源使用率低的监控环境,也就是grafana+telegraf+influxdb. InfluxDB是一款优秀的时间序列数据库,适合存储设备性能.日志.物联网传感器等 ...
- Centos7.X 搭建Prometheus+node_exporter+Grafana实时监控平台
Prometheus简介 什么是 Prometheus Prometheus是一个开源监控报警系统和时序列数据库 主要功能 多维数据模型(时序由 metric 名字和 k/v 的 labels 构成) ...
随机推荐
- document.getElementById()
使用两个for循环取json数据的时候出错: 代码简化如下: for(var a=0;a<3;a++){ for(var b=0;b<3;b++){ document.getElement ...
- LightOJ - 1284 Lights inside 3D Grid (概率计算)
题面: You are given a 3D grid, which has dimensions X, Y and Z. Each of the X x Y x Z cells contains a ...
- 裁剪nutch 8步骤
裁剪nutch 8步骤
- OpenCV与MFC实战之图像处理 样本采集小工具制作 c++MFC课程设计
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/12111102.html 入门不久的人可以通过opencv实战来锻炼一下学习opencv的成果, ...
- P3157 动态逆序对 CDQ分治
动态逆序对 CDQ分治 传送门:https://www.luogu.org/problemnew/show/P3157 题意: 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对 ...
- 【Docker】Jenkins的安装与更新
一.Jenkins安装 1.获取docker镜像 2.查看jenkins版本 3.启动jenkins容器 docker run -d --name jenkins_01 -p 8081:8080 -v ...
- 前端工具--利用Adblock Plus阻止js执行
今天遇到个问题:需要阻止页面某个js的运行 效果达到
- Android1_运行第一个AS项目HelloWorld
一.开发安卓程序需要具备一些开发工具,这里简单罗列一下: JDK :这是Java语言的开发工具包,包含了Java的运行环境.工具集合.基础类库等内容. Android Studio:目前主流的安卓开发 ...
- Visio模具与模版
yy 这些形状就是模具 点击更多形状 然后新建模具 也可以打开已有的模具 模具名字右边有星号 代表模具未保存 鼠标右键单击可以选择保存 选择属性可以进行设置(信息之类的)也可以进行关闭 模具文件三种打 ...
- 优雅的使用 ThreadLocal
前言 在我们日常 Java Web 开发中难免遇到需要把一个参数层层的传递到最内层,然后中间层根本不需要使用这个参数,或者是仅仅在特定的工具类中使用,这样我们完全没有必要在每一个方法里面都传递这样一个 ...