小白学习基于docker部署jmeter+influxdb+grafana,搭建实时可视化压测监控平台

前言

为什么要搭建这个平台?

先 jmeter 是一个优秀的开源性能测试工具,它非常通用,多数公司的压测方案都会选择该工具。但是 jmeter 自带的聚合报告有很明显的缺陷:

  1. 只能自己看,分享不方便,缺乏实时性。
  2. 展示的信息比较简陋,不美观也不直观。

如上缺陷可能可以通过安装插件解决部分问题,但是无法完美解决。

因此我选择了 influxDB+grafana 的方案。

  • influxDB: 这是一个开源的时间序列数据库。它专门设计用于处理高度时间相关的数据,具有高性能和可扩展性,可以胜任 jmeter 的数据写入需求。
  • grafana: 这是一个用于可视化和分析数据的开源数据仪表盘工具。它非常流行,提供了简单易用的用户界面,可以从多种数据源中获取数据,并将数据以图表、图形、表格等形式展示出来。grafana 支持实时监控、报警、告警以及自定义插件等功能。

这是该方案的数据流向图

部署

本次也是通过 docker-compose 进行 InfluxDB 和 Grafana 的部署,jmeter在windows上搞一个免安装的。

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 概念

容器部署

  1. 创建对应的文件夹,并修改目录操作权限
shell 复制代码
mkdir -p /usr/local/docker/influxdb/{conf,data}

chmod 777 /usr/local/docker/influxdb/{conf,data}
  1. 进入influxdb目录
shell 复制代码
cd /usr/local/docker/influxdb
  1. 新建docker-compose.yml文件 以下是 docker-compose.yml 文件内容
yml 复制代码
version: '3'
 
networks:
  web-network:
 
services:
  docker-influxdb:
    image: influxdb:2.7.5
    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: "jmeter"
    volumes:
      - "/usr/local/docker/influxdb/data:/var/lib/influxdb2"
      - "/usr/local/docker/influxdb/conf:/etc/influxdb2"
    networks:
      - web-network

关于 INFLUXDB_TOKEN 的获取:

shell 复制代码
cat /usr/local/docker/influxdb/conf/influx-configs
  1. 通过docker compose启动
shell 复制代码
docker compose up -d

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(需注意安全)

注意:telegraf默认生成的token无法用于grafana连接influxdbbucket,因为没有读取bucket的权限。需要创建一个可以操作对应buckettoken

创建一个自定义权限的token

需要对指定bucket,同时拥有读、写权限。

Grafana

容器部署

1. 获取 grafana 镜像
shell 复制代码
docker pull grafana/grafana:10.4.1
2. 准备挂载目录和配置文件
  • Your_PATH/grafana/data 目录,准备用来挂载放置grafana的数据
  • Your_PATH/grafana/plugins 目录,准备用来放置grafana的插件
  • Your_PATH/grafana/conf 目录,准备用来挂载放置grafana的配置文件
  • Your_PATH/grafana/logs 目录,准备用来挂载放置logs的文件
shell 复制代码
mkdir -p /usr/local/docker/grafana/{data,plugins,conf,logs}
  • 修改文件夹权限,如果不修改,创建容器时可能会挂载失败,这边为了方便,全部修改成了 777(不推荐)
shell 复制代码
chmod 777 /usr/local/docker/grafana/{data,plugins,conf,logs}
  • 复制配置文件
shell 复制代码
# 临时启动一个容器
docker run --name grafana-tmp -d grafana/grafana
# 将容器中默认的配置文件拷贝到宿主机上
docker cp grafana-tmp:/etc/grafana/grafana.ini /usr/local/docker/grafana/conf/grafana.ini
# 移除临时容器
docker rm -f grafana-tmp
3启动容器
  • 进入/usr/local/docker/grafana
shell 复制代码
cd /usr/local/docker/grafana
  • 新建docker-compose.yml文件
yml 复制代码
version: "3"
 
services:
  grafana:
    image: grafana/grafana:10.4.1
    container_name: grafana
    privileged: true
    environment:
      TZ: Asia/Shanghai
      GF_SECURITY_ADMIN_PASSWORD: admin   # 设置默认管理员admin的密码为admin
    volumes:
      - /usr/local/docker/grafana/conf:/etc/grafana
      - /usr/local/docker/grafana/data:/var/lib/grafana
      - /usr/local/docker/grafana/plugins:/var/lib/grafana/plugins
      - /usr/local/docker/grafana/logs:/var/log/grafana
    ports:
      - "3000:3000"

docker-compose.yml 的文件路径下,使用 docker compose 启动

shell 复制代码
docker compose up -d

访问 http://你的ip:3000, 成功进入 web 页面

开启 https 和匿名访问

1. 开启 https

如果你的 web 页面想要通过外网访问,最好开启 https

将你的证书文件 your_server.crt 和证书密钥 your_server.key 上传至路径 /usr/local/docker/grafana/conf 下,然后修改挂载目录下的配置文件 grafana.ini

ini 复制代码
[server]
protocol = https        # 默认配置文件第32行,这里改成https
cert_file = /etc/grafana/your_server.crt    # 默认配置文件第64行,你的证书文件
cert_key = /etc/grafana/your_server.key     # 默认配置文件第65行,你的证书密钥
2. 开启匿名访问

由于 Grafana 的常用方式是将配置好的 Grafana 图嵌入到系统页面中,

所以需要实现免登录访问,

同样是修改配置文件 grafana.ini

搜索[auth.anonymous]配置块,将其下的匿名访问控制 enabled 设置为 true,组织权限设置为 Viewer(该权限为默认一般不用改)

shell 复制代码
[auth.anonymous]
# enable anonymous access
enabled = true
 
# specify organization name that should be used for unauthenticated users
org_name = Main Org.
 
# specify role for unauthenticated users
org_role = Viewer

所有配置文件修改完成之后,重启容器,即可实现上述功能

连接数据源

  1. 跳转至路径首页------>连接------>数据源,选择添加新数据源
  2. 选择 InfluxDB

数据源设置

  • Name:数据源名称,任意填写
  • Query Language:选择 Flux,2.x 版本必须选这个,1.x 选择 influxQL
  • URL:http://your_ip:8086
  • Organization:填写你的 org 名称
  • Token:填写你 telegraf 的 token,我备注创建的可对bucket读写的token
  • Default Bucket:填写 jmeter

设置完成之后,点击 Save&test,测试连接数据源,连接结果会提示

新建仪表板

连接数据源成功后需要新建一个仪表板

路径跳转至首页 ------> 仪表板,选择新建

这里我选择导入一个模板

这里可以通过加载 json 文件,或者输入模板 id 进行加载,模板 id 可以在官网查找

这里我选择填入 id19950,因为我已经导入了,所以报警。 保存后成功创建面板

jmeter(v5.6.3)

连接 influxDB

  1. 添加一个Thread Group
  2. 给刚刚添加的Thread group添加一个Backend Listener(后端监听器)

监听器设置

  • 后端监听器实现: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对你的项目进行接口测试,才会有真实数据。 如下,我先添加两个HTTP请求,然后进行测试,可以查看数据成功写入 influxDB, 然后展示在 grafana 的面板上:

参考:基于jmeter+InfluxDB(2.x)+Grafana方案,搭建实时可视化压测监控平台

相关推荐
樊梓慕4 小时前
负载均衡式在线OJ系统测试报告(Jmeter性能测试、Selenium自动化测试脚本)
功能测试·selenium·测试工具·jmeter
loooooongger13 小时前
UI自动化测试之:自动获取元素定位技术哪家强
测试
MJH82715 小时前
Selenium + Pytest自动化测试框架实战!
selenium·测试工具·jmeter·职场和发展·pytest·postman
pycode1 天前
解决 Airtest 启动 APP 自动翻转屏幕问题的三种方法
后端·python·测试
Apifox1 天前
Apifox 12月更新|接口的测试覆盖情况、测试场景支持修改记录、迭代分支能力升级、自定义项目角色权限、接口可评论
api·测试
云边的快乐猫1 天前
Jmeter下载安装配置教程(多版本)
jmeter
十二测试录1 天前
Jmeter自学【8】- 使用JMeter模拟设备通过MQTT发送数据
经验分享·测试工具·jmeter·程序人生·自动化
ice___Cpu2 天前
测试 - 1 ( 9000 字详解 )
测试
字节程序员2 天前
从一次线上故障聊聊接口自动化测试
jmeter·测试用例
默金……3 天前
jmeter跨进程实现变量共享-全局变量
jmeter