Grafana7+InfluxDB2+Jmeter5 搭建可视化
自influxdb1.8以后,编写语言换成flux,数据库database换成bucket。
一、整体流程
JMeter + InfluxDB使用jmeter后置处理器将JMeter指标导出到InfluxDB数据库. 如果想要将数据可视化,那就需要在Grafana中配置数据源。
步骤:
1、搭建环境(使用docker)
- 1.1 influxdb;
- 1.2 grafana(docker-compose.yml);
- 1.3jmeter;
2、配置
- 2.1 配置jmeter的后置监听器;
- 2.2在influxdb中建立接收jmeter运行结果的数据的数据库(jmeterdb);
- 2.3在grafana中添加数据源influxdb并将jmeterdb的数据在其显示(导入插件),配置展示参数。
3、建立运行jmeter的脚本
不同用户在grafana中查看运行结果图
二、工具简单介绍
1.InfluxDB是一个用于存储和分析时间序列数据的开源数据库。
2.Grafana是大多数 数据库的开源分析和监控解决方案
3.jmeter是性能测试工具
jmeter中的Backend listener(后置监听器),可以将返回的响应信息保存到数据库中
三、整体配置过程
1、搭建环境
1.1 基础安装:Docker,docker-compose
参考安装文档,在适合的环境下完成基础环境安装
在centos7中安装:(https://docs.docker.com/engine/install/centos/)
安装docker命令:yum install docker
设置开机自动启动:service docker start
在mac下安装(https://docs.docker.com/docker-for-mac/install/)
查看docker版本:docker version
安装compose(https://docs.docker.com/compose/install/)
pip3 install docker-compose
或Yum install docker-compose
1.2 使用docker-compose.yml,.env创建influxdb,grafana
docker-compose的使用参考:https://docs.docker.com/compose/gettingstarted/
目前influxdb的最新版本lastest是2.0.5
- 1、创建docker-compose.yml文件,把配置写入
#这是docker-compose.yml中内容
version: '3.1'
services:
influxdb:
image: influxdb:latest
container_name: influxdb
ports:
- "8083:8083"
- "8086:8086"
- "8090:8090"
environment:
- INFLUXDB_DB=db0
- INFLUXDB_ADMIN_USER=${INFLUXDB_USERNAME}
- INFLUXDB_ADMIN_PASSWORD=${INFLUXDB_PASSWORD}
volumes:
- influxdb-storage:/var/lib/influxdb
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_USER=${GRAFANA_USERNAME}
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}
depends_on:
- influxdb
user: "0"
volumes:
- grafana-storage:/var/lib/grafana
- ./grafana-provisioning/:/etc/grafana/provisioning
volumes:
influxdb-storage:
grafana-storage:
- 2、创建环境文件.env,把环境变量写入
touch .env
#建立环境文件.env,包括以下内容:
INFLUXDB_USERNAME=admin
INFLUXDB_PASSWORD=admin123
GRAFANA_USERNAME=admin
GRAFANA_PASSWORD=admin
PROMETHEUS_USERNAME=admin
PROMETHEUS_PASSWORD=admin
-
3、运行docker-compose -f docker-compose.yml up -d
image.png -
4、访问下面的网址进入配置
image.png
在哪里部署把localhost换成对应的IP,本人环境mac下安装的docker-desktop.
grafana: http://localhost:3000/
influxdb2: http://localhost:8086/
1.3 jmeter5.4安装
略
2、配置
2.1 influxdb2建立数据库(bucket)
mysql与influxdb对比
image.png
初始化建立:
influxdb2: http://localhost:8086/
使用admin/admin123登陆并修改密码,初始化设置组织org,初始化数据库bucket。
之后建立
image.png
2.2grafana配置数据源influxdb(2.0)
-
1.登陆到grafana主页( http://localhost:3000/)之后,创建新的Data Source:influxdb
image.png
-
2.配置Database,选择InfluxDB:
-
3.输入InfluxDB信息
image.png
3.1填入你的IP地址http://这里是influx的IP:8086(不是localhost)否则会报bad gateway的错。选择flux语言influx2.0。
3.2输入InfluxDB Details信息 org,bucket,token(在初始化中设置的), 如果忘记在influxDB(http://localhost:8086)中data-buckets/tokens查看
image.png
2.3 grafana导入Jmeter保存到influxdb2的插件
下面的配置分二种情况
第一种情况:
环境java11,influxdb2,最新插件模板
-
1、在https://grafana.com/grafana/dashboards中搜索jmeter,influxdb2
image.png
-
2、获得ID值13644,https://grafana.com/grafana/dashboards/13644
-
3、登陆的Grafana主页添加+ import去粘贴ID或URL
image.png -
4、然后可以进行命名,填入之前建好的DataSource 名字.
image.png -
5、可以看到各种写好的计数器,不过这时应该还没有数据,因为我们还没跑jmeter的脚本,还没配置jmeter。
image.png
2.3 在Jmeter脚本中添加后置监听器
第一种情况:
环境java11,influxdb2
- Java11下载安装略:https://www.oracle.com/cn/java/technologies/javase-jdk11-downloads.html
- 1、下载插件包.jar: https://github.com/mderevyankoaqa/jmeter-influxdb2-listener-plugin/releases
- 2、放到jmeter路径/lib/ext中
- 3、重启jmeter
-
4、在请求右键添加后置监听器,如果不是java11,就没有这个选项。
"org.md.jmeter.influxdb2.visualizer.JMeterInfluxDBBackendListenerClient."
修改host,必须是IP, org,token,bucket
image.png
3.将线程组加些并发数,跑一下。再在grafana中查看,选择最近5分钟的效果
image.png image.png第二种情况:
java8 +influxdb2
-
1、在Jmeter脚本中添加后置监听器
image.png - 2、在https://grafana.com/grafana/dashboards中搜索jmeter,influxdb,找到ID:5496,在grafana 中import并设置。
image.png - 3、由于这个插件适合的是influxdb1.8以下,而influxdb2.0以上使用flux语言,所以面板上没有数据,我们可以手工更改语句。
请求数的panel的编辑
Count:
from(bucket: "jmeterdb")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "jmeter")
|> filter(fn: (r) => r["_field"] == "count")
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> yield(name: "mean")
如果大家不知道如何编写,可以在influxdb2的上面导出显示的地方利用选择生成脚本:
1.登陆influxdb,
2.在explore中选择数据库,数据表,计数器,字段
image.png
3.转成脚本
image.png
-
4、最后的结果
image.png
第三种情况:influxdb1.8以下
略,可参考:https://www.jianshu.com/p/476ba7703409