前言
为什么要搭建这个平台?
首先jmeter是一个优秀的开源性能测试工具,它非常通用,多数公司的压测方案都会选择该工具。但是jmeter自带的聚合报告有很明显的缺陷:
- 只能自己看,分享不方便,缺乏实时性。
- 展示的信息比较简陋,不美观也不直观。
如上缺陷可能可以通过安装插件解决部分问题,但是无法完美解决。
因此我选择了influxDB
+grafana
的方案。
- influxDB: 这是一个开源的时间序列数据库。它专门设计用于处理高度时间相关的数据,具有高性能和可扩展性,可以胜任jmeter的数据写入需求。
- Grafana: 这是一个用于可视化和分析数据的开源数据仪表盘工具。它非常流行,提供了简单易用的用户界面,可以从多种数据源中获取数据,并将数据以图表、图形、表格等形式展示出来。Grafana支持实时监控、报警、告警以及自定义插件等功能。
这是该方案的数据流向图
部署
本次也是通过docker-compose进行InfluxDB和Grafana的部署,jmeter安装过程则略过
InfluxDB(2.x)
本次部署的InfluxDB版本为2.7.5的,以下配置项仅适用于v2版本,不兼容v1版本和v3版本
1.x和2.x的区别
- 2.x版本自带web-ui,可以输出简易的图像报表和管理数据,1.x则不带有web-ui,必须依靠第三方工具输出图像报表
- 1.x 版本使用 influxQL 查询语言,2.x 和 1.8+(beta) 使用 flux 查询语法
- 2.x相对于1.x移除了database,新增了bucket概念
总之变化较大,详细信息请自行搜索
容器部署
以下是docker-compose.yml文件内容
version: '3'
networks:
web-network:
services:
docker-influxdb:
image: influxdb:latest
container_name: influxdb
restart: always
ports:
- "8086:8086" #HTTP UI and API port
environment:
DOCKER_INFLUXDB_INIT_MODE: "setup"
DOCKER_INFLUXDB_INIT_USERNAME: "root" #创建管理员用户
DOCKER_INFLUXDB_INIT_PASSWORD: "!a123456" #创建管理员密码,太简单会报错
DOCKER_INFLUXDB_INIT_ORG: "org" #组织名称
DOCKER_INFLUXDB_INIT_BUCKET: "my-bucket"
volumes:
- "./influxdb/data:/var/lib/influxdb2"
- "./influxdb/config:/etc/influxdb2"
networks:
- web-network
官方推荐可视化工具chronograf部署(可选项,本文没有用到)
# 接上一个docker-compose文件内容
docker-chronograf:
container_name: chronograf
image: chronograf:latest
restart: always
ports:
- "8888:8888"
environment:
INFLUXDB_URL: "http://influxdb:8086"
INFLUXDB_USERNAME: "root"
INFLUXDB_PASSWORD: "!a123456"
INFLUXDB_ORG: "org"
INFLUXDB_TOKEN: "7p3ogq9FlWxF3ygez29049KfJRotlezkcAQ1GnvWrADN3ZaqiZStPLKlJLVcUT631LoWCI9R9DgZvzWoQ4xX0A=="
volumes:
- ./chronograf:/var/lib/chronograf
networks:
- web-network
关于INFLUXDB_TOKEN
的获取:
cat ./influxdb/config/influx-configs
通过docker-compose 启动
docker-compose up -d
启动完成之后通过web-ui访问
# 自带ui
http://localhost:8086
# chronograf(可选)
http://localhost:8888
influxDB使用
登录
输入你创建容器时的管理员账号和密码
新建bucket
跳转至路径load data ——> buckets ——> buckets ——> create bucket
新建一个bucket
命名为'jmeter'
新建telegraf
telegraf的主要作用是权限,它可以控制写入和读取任意buckets数据的权限范围
tag切换至telegraf,然后选择create configuration
bucket这里选择jmeter,然后data from我这里选择的是docker(无影响)
创建成功后这里有一串token,复制保存下来
token管理
tag切换至api tokens,这里可以对之前创建telegraf的token进行管理,也可以创建读写任意bucket的root权限token(需注意安全)
Grafana
容器部署
部署教程已在之前的文章《Docker部署Grafana,开启https和匿名访问》提及,这里不再复述
连接数据源
跳转至路径首页——>连接——>数据源
,选择添加新数据源
选择InfluxDB
数据源设置
- Name:数据源名称,任意填写
- Query Language:选择
Flux
,2.x版本必须选这个,1.x选择influxQL - URL:
http://your_ip:8086
- Organization:填写你的org名称
- Token: 填写你telegraf的token
- Default Bucket: 填写
jmeter
设置完成之后,点击Save&test
,测试连接数据源,连接结果会提示
新建仪表板
连接数据源成功后需要新建一个仪表板
路径跳转至首页——>仪表板,选择新建
这里我选择导入一个模板
这里可以通过加载json文件,或者输入模板id进行加载,模板id可以在官网查找
这里我选择填入id
19950
保存后成功创建面板
jmeter(v5.6.3)
连接influxDB
jmeter新建一个后端监听器
监听器设置
- 后端监听器实现:Jmeter 压测指标监听器的实现类,按使用的数据上报协议进行选择。本文使用influxdb协议上报压测指标数据,因此选择org.apache.jmeter.visualizers.backend.influxdb.InfluxdbBackendListenerClient。
- 异步队列大小:指标处理一般队列大小,除非遇到性能问题,否则保持默认 5000 不变。
- influxdbMetricsSender:metric sender 的实现类,保持默认即可。
- influxdbUrl:
http://你的influx服务器地址/api/v2/write?org=你的Organizations名称&bucket=你的Bucket名称
- application:你的application name
- measurement:你的bucket name
- summaryOnly:选择true的话就只保留汇总数据结果,false会将每个transaction都分别记录
- samplersRegex:保留 blank 或填 .* 表示上报所有 sampler 压测 metric。若按需上报,此处指定 sampler 的名称正则表达式。
- percentiles:指定上报的百分位数据。
- eventTags:可指定tag,如制定则存储在 events measurement 中。
- influxdbToken: 填写你telegraf的token。
演示
在完成以上设置之后,如果设置正确,使用jmeter跑一个场景测试,可以查看数据成功写入influxDB,然后展示在grafana的面板上
展示面板demo
关于后续
可以继续研究grafana,这是一个流行的可视化展示工具,支持连接多种数据源,可以考虑开发别的用途。