202305_性能测试-Grafana+InfluxDB+Prometheus实现Jmeter压测监控
参照: https://www.cnblogs.com/juno3550/p/15846151.html
实现逻辑
关于 InfluxDB
时序数据库, 主要用于储存时间戳为主键的时间序列信息, 提供高性能的储存和检索
维度 | InfluxDB | Mysql | Mongo |
---|---|---|---|
储存数据 | TimeSeries Data | 表格数据 | Json数据 |
结构 | database-measurement | database-table | database-collection |
列 | timestemp(唯一主键)、tag(带索引的,非必须,分类依据)、field(数据, 不带索引) | column | 无 |
关于Prometheus
Prometheus(官网)是一套开源的监控&报警&时序数据库的组合,适合监控 Docker 容器,服务器及程序
graph LR 监控对象对应的Endpoint--端口交互-->监控-->存储数据 监控-->预警
实现逻辑
graph LR Jmeter--BackendListener收集客户端数据-->InfluxDB-->Grafana Server--nodeExporter收集服务器数据-->Prometheus-->Grafana
部署InfluxDB
部署容器
docker network create grafana
docker run -d --name=influxdb --network grafana -p 8086:8086 -v /home/loadTest/influxdb/:/home/loadTest/influxdb influxdb:1.7.10 # -V部分需要自定义
docker exec -it influxdb influx
数据库设置
create database jmeters;
use jmetersioo'o'o
部署grafana
docker run -d --name grafana --network grafana -p 3000:3000 grafana/grafana:9.5.3 # 不要直接拉latest, 会拉取旧版本
# 部署容器时指定配置文件*
docker run -d --name grafana --network grafana -p 3000:3000 -e "GF_USERS_DEFAULT_LANGUAGE=zh-CN" grafana/grafana # 我这里尝试将语言改成中文,配置文件改成功了,但是页面还是英文
配置文件示例:https://github.com/grafana/grafana/blob/main/conf/defaults.ini
格式 -e “GF_
_ = $自定义值”, 一切都应为大写,“.”和“-”应替换为“_”。
登录
- 访问 ip:3000, 默认账密admin/ admin
组装InfluxDB+grafana
登录grafana, setting模块选择InfluxDB进行配置以下内容后, 点击save& test
- URL:http://influxdb:8086
- Database:jmeters # 和jmeter设置url对应
- Min time interval:5
manage模块点击import
- Grafana.com Dashboard: https://grafana.com/grafana/dashboards/5496
- Database: 选择InfluxDB, 点击Import
设置刷新频率
- 右上角循环icon, 设置刷新频率
组装InfluxDB+Jmeter
Jmeter 配置 Influxdb 监听器
添加Backend Listener 监听器
- Backend Listener Implementation:org.apache.jmeter.visualizers.backend.influxdb.InfluxdbBackendListenerClient
- influxdbUrl: http://192.168.2.111:8086/write?db=jmeters
- application:app_1 自定义应用名称,可在 grafana 仪表盘中筛选区分。
- measurement:jmeter 在写入数据时会自动创建名为jmeter的measurement
- summaryOnly:false 在 grafana 仪表盘中显示详细 Error 信息。
- testTitle:test_demo_1 在 influxdb 表数据中作区分。
Jmeter压测
进行Jmeter压测, 查看grafana数据展示
部署Prometheus
下载配置文件
- 登录https://github.com/prometheus/prometheus/blob/master/documentation/examples/prometheus.yml
- 右键raw ,将链接保存为文件
- 文件上传到linux指定目录
部署Prometheus
docker run -d --name prometheus --network grafana -p 9090:9090 -v /home/loadTest/prometheus/prometheus.yml:/home/loadTest/prometheus/prometheus.yml prom/prometheus:v2.16.0 --config.file=/home/loadTest/prometheus/prometheus.yml
Prometheus登录测试
- 浏览器输入http://${ip}:9090/graph, 可以进入Prometheus 监控页面
部署主机监控node_exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz # 注意这是2022年的教程,可以到github下载最新版 -- https://github.com/prometheus/node_exporter
tar -zxvf node_exporter-1.6.0.linux-amd64.tar.gz
cd node_exporter-1.6.0.linux-amd64/
nohup ./node_exporter --web.listen-address=":9102" & # 我再这里不限定了监听IP
组装Prometheus+node_exporter
vim /home/loadTest/prometheus/prometheus.yml
---- 添加
# node_exporter config
- job_name: "235 node_exporter"
static_configs:
- targets: ["192.168.2.235:9102"] # 设置监听监听IP
docker restart prometheus
访问测试
- 访问Premetheus, Status->Targets, 可以看到Endpoint: 134 node_exporter
组装Prometheus+Grafana
Grafana, 点击设置新增DataSource->Prometheus
- URL : http://prometheus:9090
Create->Import
- Grafana.com Dashboard : https://grafana.com/grafana/dashboards/8919
- Prometheus: Prometheus
如果要更换dashboard,要注意模板和grafana的兼容问题
如果还要监控Mongo
参照: https://www.cnblogs.com/zqyx/p/10107233.html
附录
Reference
修改grafana配置文件 : 以Docker方式安装的Grafana如何修改配置 - 初心 (mayanpeng.cn)
安装docker : centos7安装Docker详细步骤(无坑版教程)-腾讯云开发者社区-腾讯云 (tencent.com)
权限隔离: https://www.jianshu.com/p/aac0cef668e6
可能会用到的命令
InfluxDB Sql
show databases;
use jmeters;
SELECT * FROM jmeter ORDER BY time DESC LIMIT 10 offset 100; # 查询数据库跳过100个显示10条数据
DROP MEASUREMENT jmeter;
用到的linux命令
lsof -i:9090 # 查看端口占用
sudo firewall-cmd --zone=public --add-port=9102/tcp --permanent
sudo firewall-cmd --reload # 开放防火墙端口
Docker版Grafana
- 如果要配置grafana, 使用docker 环境变量进行配置 (-e参数)
- 环境变量 只能修改配置,无法新增配置