转自:https://www.cnblogs.com/mike-liu/p/10080351.html

概述
  本文将介绍如何使用Jmeter+influxDB+Grafana搭建压测可视化实时监控


痛点
  在使用jmeter做性能测试的时候,监控系统性能的时候,无论是使用插件还是报告生成,都比较麻烦,比如监控服务的tps信息

 jmeter+influxdb+grafana搭建压测监控平台

为了能够及时看到实时,并且比较美观的图表,我们可以通过jmeter的AbstractBackendListenerClient类,使用Backend Listener发送数据到数据库的存储实时结果。
从jmeter2.13开始,Backend Listener提供一下功能:

  • 实时数据
  • 漂亮图表
  • 能够对比2个以上的测试计划

jmeter+influxdb+grafana搭建压测监控平台

 

JMeter 3.2的Backend Listener中引入了 InfluxDBBackendListenerClient允使用UDP或HTTP协议将统计指标发送到InfluxDB

jmeter+influxdb+grafana搭建压测监控平台

此类提供的功能:

  • 实时数据
  • 漂亮图表
  • 能够对比2个以上的测试计划
  • 能够向图表添加注释
  • 只要jmeter产生相同的Backend,就可以存储监控数据

Influxdb简介
 InfluxDB是用Go语言编写的高性能、高可用的分布式时序数据存储数据库,无其他依赖,安装简单快速。
  该数据库现在主要用于存储涉及大量的时间戳数据,如DevOps监控数据,APP metrics, loT传感器数据和实时分析数据。
InfluxDB特征:

  • 无结构(无模式):可以是任意数量的列
  • 可以设置metric的保存时间
  • 支持与时间有关的相关函数(如min、max、sum、count、mean、median等),方便统计
  • 支持存储策略:可以用于数据的删改。(influxDB没有提供数据的删除与修改方法)
  • 支持连续查询:是数据库中自动定时启动的一组语句,和存储策略搭配可以降低InfluxDB的系统占用量。
  • 原生的HTTP支持,内置HTTP API
  • 支持类似sql语法select * from mysql.user
  • 支持设置数据在集群中的副本数
  • 支持定期采样数据,写入另外的measurement,方便分粒度存储数据。

schemaless: 结构型数据库类似Mysql需要先定义列,influxdb无需预先定义,无结构的
与传统数据库中的名词比较

 influxDB中的名词  传统数据库的概念
 database  数据库
 measurement  数据库中的表
 points  表里面的一行数据

 

influxdb的points数据说明

  • time:默认存储数据会有时间,时间无需关心,会帮我们自动插入
  • tags:用来存储数据标识,比如CPU.idle
  • fileds:用来存储数据 value=90

influxdb下载安装
下载:
[root@jmeter ~]#wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.0.x86_64.rpm --no-check-certificate
百度网盘下载地址:https://pan.baidu.com/s/13hKY22krYSLTs9_A2O7KVA
提取码:sc9z
安装
[root@jmeter opt]# rpm -ivh influxdb-1.7.0.x86_64.rpm
Preparing... ########################################### [100%]
1:influxdb ########################################### [100%]
安装完之后,生成默认的配置文件 /etc/influxdb/influxdb.conf

修改influxDB配置文件
在配置文件中找到graphite配置项,去掉前面的“#”号
[root@jmeter opt]# vim /etc/influxdb/influxdb.conf

jmeter+influxdb+grafana搭建压测监控平台
[[graphite]]
# Determines whether the graphite endpoint is enabled.
enabled = true
database = "jmeter"    # 数据库名称
retention-policy = ""
bind-address = ":2003"    # 端口
protocol = "tcp"
consistency-level = "one"

修改以下信息
[meta]
dir = "/usr/local/influxdb/meta"    #存放最终存储的数据,文件以.tsm结尾
[data]
dir = "/usr/local/influxdb/data"    #存放数据库元数据 wal
wal-dir = "/usr/local/influxdb/wal"    #存放预写日志文件

修改HTTP端口信息
[http]
# Determines whether HTTP endpoint is enabled.
enabled = true

# The bind address used by the HTTP service.
bind-address = ":8086"
jmeter+influxdb+grafana搭建压测监控平台

 

创建目录更新权限
[root@jmeter ~]#mkdir -p /usr/local/influxdb/
[root@jmeter ~]#chown -R influxdb:influxdb /usr/local/influxdb/
修改完成之后,可以使用以下命令启动influxDB服务
两种方法:
1、[root@jmeter ~]# influxd -config /etc/influxdb/influxdb.conf

2、添加到环境变量中(推荐)
[root@jmeter ~]# vim /etc/profile
export INFLUXDB_CONFIG_PATH=/etc/influxdb/influxdb.conf
[root@jmeter ~]# source /etc/profile
[root@jmeter ~]# influxd &
influxDB的tcp端口:8088
查看端口有没有起来
[root@jmeter ~]# netstat -anp|grep 8088
influxDB数据库操作

jmeter+influxdb+grafana搭建压测监控平台
[root@jmeter ~]# influx    # 登录数据库
Connected to http://localhost:8086 version 1.6.0
InfluxDB shell version: 1.6.0
> show databases    # 查看数据库
name: databases
name
----
_internal
jmeter
> create database "jmeter"    # 创建数据库
> use jmeter    #切换数据库
Using database jmeter
> create user "admin" with password '123456' with all privileges    # 创建管理员权限的用户
jmeter+influxdb+grafana搭建压测监控平台

 

Jmeter配置

  • 创建一个测试计划,并添加Backend Listenter,Backend Listener implementation 选择org.apache.jmeter.visualizers.backend.graphite.GraphiteBackendListenerClient
  • 添加线程
  • 设置influxDB IP及端口
  • 运行测试,等待几秒看数据

 jmeter+influxdb+grafana搭建压测监控平台

 

 jmeter+influxdb+grafana搭建压测监控平台

端口说明

2003端口:Jmeter往数据库发数据的端口
8086端口,Grafana从数据库取数据的端口

查看Jmeter数据库的表信息

jmeter+influxdb+grafana搭建压测监控平台
[root@jmeter ~]# influx
Connected to http://localhost:8086 version 1.6.0
InfluxDB shell version: 1.6.0
> show measurements
ERR: database name required
Warning: It is possible this error is due to not setting a database.
Please set a database with the command "use <database>".
> show databases
name: databases
name
----
_internal
jmeter
> use jmeter
Using database jmeter
> show measurements
name: measurements
name
----
jmeter.all.a.avg
jmeter.all.a.count
jmeter.all.a.max
jmeter.all.a.min
jmeter.all.a.pct90
jmeter.all.a.pct95
jmeter.all.a.pct99
jmeter.all.h.count
jmeter.all.ko.avg
jmeter.all.ko.count
jmeter.all.ko.max
jmeter.all.ko.min
jmeter.all.ko.pct90
jmeter.all.ko.pct95
jmeter.all.ko.pct99
jmeter.all.ok.avg
jmeter.all.ok.count
jmeter.all.ok.max
jmeter.all.ok.min
jmeter.all.ok.pct90
jmeter.all.ok.pct95
jmeter.all.ok.pct99
jmeter.all.rb.bytes
jmeter.all.sb.bytes
jmeter.test.endedT
jmeter.test.maxAT
jmeter.test.meanAT
jmeter.test.minAT
jmeter.test.startedT
jmeter+influxdb+grafana搭建压测监控平台

这个时候已经可以将统计数据成功发送到InfluxDB

Grafana和influxDB数据源配置
什么是Grafana
Grafana是一款可视化工具,大多使用在时序数据的监控方面,如同Kibana类似。Grafana的UI更加灵活,有丰富的插件,功能强大,数据源可以使用zabbix、influxdb等
grafana的下载和安装
官网:https://grafana.com/grafana/download
下载地址:https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.2.1-1.x86_64.rpm
安装:rpm -ivh grafana-5.2.1-1.x86_64.rpm

启动
[root@jmeter ~]# service grafana-server start
Starting Grafana Server: ... [ OK ]

浏览器访问:http://IP:3000/login
grafana的默认用户名密码都是admin,第一次登录会要求更改密码

jmeter+influxdb+grafana搭建压测监控平台

创建influxDB数据源

 jmeter+influxdb+grafana搭建压测监控平台

jmeter+influxdb+grafana搭建压测监控平台

jmeter+influxdb+grafana搭建压测监控平台

单击save & Test,提示:data source is working,说明保存和连接成功

jmeter+influxdb+grafana搭建压测监控平台

创建dashboard

jmeter+influxdb+grafana搭建压测监控平台

新建Graph面板

jmeter+influxdb+grafana搭建压测监控平台

数据绑定

 jmeter+influxdb+grafana搭建压测监控平台

选择influxdb的数据源库名,jmeter的相关表

jmeter+influxdb+grafana搭建压测监控平台

查看SQL语句

jmeter+influxdb+grafana搭建压测监控平台

定义显示的名称

jmeter+influxdb+grafana搭建压测监控平台

保存数据模板
直接按ctrl+s或点击保存按钮

 jmeter+influxdb+grafana搭建压测监控平台

jmeter+influxdb+grafana搭建压测监控平台

 

说明:想要了解这些监控都代表什么意思,可以访问Jmeter的官网地址去查看阅读“http://jmeter.apache.org/usermanual/realtime-results.html”

jmeter+influxdb+grafana搭建压测监控平台
线程数/用户相关指标
test.minAT-Min active threads:最小活跃线程数
test.maxAT-Max active threads:最大活跃线程数
test.meanAT-Mean active threads:活跃线程数
test.startedT-Started threads:启动线程数
test.endedT-Finished threads:结束线程数
响应时间指标
.ok.count:采样器的成功响应数
.h.count:每秒点击数
.ok.min:采样器成功最短响应时间
.ok.max:采样器成功最长响应时间
.ok.avg:采样器成功平均响应时间
.ok.pct:采样器成功响应百分比
.ko.count:采样器失败响应数
.ko.min:采样器失败的响应最短时间
.ko.max:采样称失败最长响应时间
.ko.avg:采样器失败平均响应时间
.ko.pct:采样器失败响应百分比
.a.count:采样器响应数(ok.count和ko.count的总和)
.a.min:采样器最小响应时间(ok.count和ko.count的最小值)
.a.max:采样器最大响应时间(ok.count和ko.count的最大值)
.a.avg:采样器平均响应时间(ok.count和ko.count的平均值)
.a.pct:采样器响应百分比(根据和失败样本的总数计算)
Backend Listener的默认百分位设置为“90;95;99”,即百分位数为90%,95%和99%。
Graphite使用点(“.”)去拆分的元素,这可能与十进制百分位值混淆。JMeter转换任何此类值,用下划线(“ - ”)替换点(“.”)。例如,“99.9 ”变为“99_9 ”
默认情况下,JMeter发送在samplerName“all”下累计的所有采样器的指标。 如果配置了 BackendListenerSamplersList,那么JMeter还会发送匹配样本名称的指标,前提是配置 summaryOnly=true
jmeter+influxdb+grafana搭建压测监控平台

 

压测中的效果

jmeter+influxdb+grafana搭建压测监控平台

导入Dashboard模版
从Grafana官网下载相应的模板
官网模版库:https://grafana.com/dashboards
搜索看板模版

jmeter+influxdb+grafana搭建压测监控平台

 

下载:jmeter load test

 jmeter+influxdb+grafana搭建压测监控平台

jmeter+influxdb+grafana搭建压测监控平台

下载的jar包复制到jmeter的/lib/ext下面

导入模板

jmeter+influxdb+grafana搭建压测监控平台

加载模板文件

jmeter+influxdb+grafana搭建压测监控平台

选择模板数据源

jmeter+influxdb+grafana搭建压测监控平台

重启jmeter,选择rocks.nt.apm.jmeter.JMeterinfluxDBBackendListenerClient,输入influxDB的host和端口,之前创建用户名和密码

jmeter+influxdb+grafana搭建压测监控平台

 

压测的效果图

jmeter+influxdb+grafana搭建压测监控平台

 

相关文章: