news 2026/2/7 16:58:53

Grafana+Prometheus(InfluxDB)+Jmeter使用Nginx代理搭建可视化性能测试监控平台

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Grafana+Prometheus(InfluxDB)+Jmeter使用Nginx代理搭建可视化性能测试监控平台

前言
在这篇博客文章中,将分享JMeter > Prometheus(InfluxDB) > Grafana的集成,以及Nginx端口反向代理各服务的端口。

背景

在JMeter插件库中,有一些后端监听器可供Kafka、ElasticSearch和Azure使用。默认情况下,JMeter支持Graphite和InfluxDB。但是Prometheus没有后端监听器。

幸运的是,找到了这个优秀的开源项目来为Prometheus导出JMeter指标,感谢Jeff Ohrstrom。

关于集成的流程图如下:


流程如下:

如上图所示: JMeter + Prometheus(InfluxDB)插件将JMeter指标导出到Prometheus(InfluxDB)数据库. 如果想要将数据可视化,那就需要在Grafana中配置数据源。
这个插件的主要目的是将结果导出到数据库(Prometheus)。

What is Prometheus?

Prometheus是一个开源的系统监控和报警工具包,最初是在SoundCloud开发的。
中文名普罗米修斯,可想而知该工具的意义非凡,不知道普罗米修斯的自行补课去,哈哈哈。

What is InfluxDB?

InfluxDB是一个用于存储和分析时间序列数据的开源数据库。

What is Grafana?

Grafana是大多数 数据库的开源分析和监控解决方案

What is JMeter-Prometheus Plugin?

它是一个开源项目,该插件的工作是将JMeter运行的后的指标数据导出到Prometheus。

先决条件

1、Apache JMeter
2、JMeter-Prometheus Plugin
3、Prometheus
4、InfluxDB
5、Grafana

安装Docker 和 Compose

Aliyun安装docker
sudo yum install docker-ce #由于repo中默认只开启stable仓库,这里安装的是最新稳定版17.12.0
sudo yum install <FQPN> # 例如:sudo yum install docker-ce-18.03.1.ce-1.el7.centos

:注意阿里云的el7是EL7,切勿看错成数字1

AWS linux安装Docker
安装最新的Docker Community Edition程序包
sudo amazon-linux-extras install docker -y

启动Dockers服务
sudo service docker start

将root添加到docker组,以便您能够执行Docker命令,而无需使用sudo,安装完成之后需要重启ssh session。

sudo usermod -a -G docker root

启动Docker

sudo systemctl start docker # (sudo systemctl enable docker) #开机启动 sudo docker --version #查看Docker版本

安装compose
pip3 install docker-compose

安装JMeter-Prometheus插件

有多种方法可以安装JMeter的插件的jar包。
非常简单的方法是从GitHub上下载最新版jmeter-prometheus-plugin-0.6.0.jar文件,并将其放在<JMETER_HOME> libext中,重启Jmeter即可。
在这里下载JMeter-Prometheus插件 (GitHub)
在这里下载JMeter-Prometheus插件 (备用地址:CSDN资源)

通过在JMeter中创建一个简单的脚本来验证安装,然后右击Thread Group > Add > Listener > Prometheus Listener,如下图:

或者右键点击Thread Group > Add > Config Element > Prometheus Metrics

安装Nginx
###【手动安装】 sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm (RHEL) sudo yum install -y epel-release (CentOS) 添加Nginx存储库 sudo yum update -y sudo yum install nginx -y #安装Nginx sudo nginx -v #查看Nginx版本 sudo systemctl start nginx (sudo service nginx start) #启动 sudo systemctl enable nginx #系统启动开启 sudo systemctl status nginx #查看状态 nginx #启动Nginx nginx -t #测试配置是否正确 nginx -s reload #重启Nginx nginx -s stop #Nginx停止服务

nginx安装成功
http://[你的IP地址] #登录到主页查看是否显示正确

配置Nginx.conf

sudo vi /etc/nginx/nginx.conf #编辑nginx.conf文件

cat /etc/nginx/nginx.conf #查看内容
/usr/share/nginx/html #查看默认主页显示内容

在/etc/nginx目录下配置nginx.conf文件,如果没有,直接touch生成一个新文件。
下面是nginx.conf片段代码,参照更新你的文件即可。

location / { } location /prometheus/ { proxy_pass http://localhost:9090/prometheus/; } location /grafana/ { proxy_pass http://localhost:3000/; } location /influxdb/ { proxy_pass http://localhost:8086/; }

做完以上配置需要重启之后才生效。

nginx -s reload #重启Nginx
docker-compose安装Grafana 、Prometheus(InfluxDB)

文件结构如下:


在这里的docker-compose文件里面包含了Prometheus和InfluxDB,是为了学习和测试两者的区别,在实际使用时选你需要的安装更改下面的yaml文件内容。

docker-compose.yml如下:

version: '3.1' services: nginx: restart: always image: nginx:latest container_name: nginx ports: - "8080:80" - "80:80" - "443:443" volumes: - ~/etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./nginx/default.conf:/tmp/default.template - ./opt/dist-generator:/opt/dist-generator command: - '--config.file=/etc/prometheus/prometheus.yml' depends_on: - influxdb - prometheus - grafana 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 prometheus: image: prom/prometheus container_name: prometheus hostname: prometheus restart: always volumes: - ~/test-Grafana_influxDB_Prom/prometheus.yml:/etc/prometheus/prometheus.yml command: - '--config.file=/etc/prometheus/prometheus.yml' - '--web.external-url=http://localhost/prometheus' ports: - "9090:9090" environment: - PROMETHEUS_ADMIN_USER=${PROMETHEUS_USERNAME} - PROMETHEUS_ADMIN_PASSWORD=${PROMETHEUS_PASSWORD} 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:
上述的docker-compose.yml需要注意的点是prometheus部分的command,意思是添加子路径,与下文中那个的Grafana添加子路径同理,否则即便设置了Nginx也同样无法访问主页,会报异常。

.env内容如下:

INFLUXDB_USERNAME=admin INFLUXDB_PASSWORD=admin GRAFANA_USERNAME=admin GRAFANA_PASSWORD=admin PROMETHEUS_USERNAME=admin PROMETHEUS_PASSWORD=admin

运行compose命令并安装

docker-compose -f docker-compose.yml up -d

配置Grafana

进入/etc/grafana/grafana.ini 并编辑 grafana.ini设置子路径


更改如下:

[server] domain = example.com root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana/ serve_from_sub_path = true

做以上配置之后才能够使用http://localhost:3000/grafana来访问主页。

配置Prometheus

注意上文中提到compose ymal文件中的prometheus部分的Command即可。

打开Prometheus

现在启动prometheus对应的容器,打开http://localhost:9090/graph (Nginx:http://localhost/promethers)如下所示:

运行 JMeter 测试 (Prometheus)

启动Prometheus之后,该验证JMeter测试计划了。
用几个线程配置你的线程组,并点击无限循环运行。

运行JMeter之后打开链接:http://localhost:9270/metrics 将看到信息显示如下。
如果你看到下面的指标数据,说明一切运行正常。

在Prometheus中查看JMeter指标
http://localhost/prometheus(如果使用了Nginx端口代理)
http://localhost:9090 (默认访问链接,没有使用Nginx代理)
如上述指标截图显示,我们将看到如何在Prometheus中查看指标。只需复制jvm_classes_loaded并将其粘贴到查询文本框中,然后按Enter,就可以看到如下图的值了:

单击Graph选项卡查看可视化结果。也可以自定义想要的可视化方式。下图显示了每个事务的95%响应时间。

Grafana + Prometheus + Jmeter配置

如果你不想集成到Grafana,那可以到此为止了。
但是Grafana比Prometheus可视化特征更强大。
接下来配置Grafana从Prometheus获取指标数据,并创建优雅的可视化视图。

通过http://localhost:3000启动Grafana,首次登录,需要更改密码。

http://localhost/grafana(如果设置了Nginx端口代理)
将鼠标悬停在 设置 图标上,然后单击如下所示的数据源-Data Sources。


单击Add data source,如下所示:


填写如下所示的详细信息并点击Save & Test:
URL处填写Prometheus的地址。

验证Grafana中的Prometheus数据来源
将鼠标悬停在“探索--Explore”图标上,然后单击它。

输入jmeter_threads{}并点击进入查询文本框。如果配置正确,将看到图形。
请注意,你的JMeter测试仍然在运行,如果停止,需要更改右上角的时间选择器中的值。

创建Grafana仪表盘并配置 (Prometheus)

将鼠标悬停在“+”图标上,然后单击Dashboard

单击“添加查询--Add Query”按钮


将查询下拉改为Prometheus,如下所示

输入查询 jmeter_summary{quantile="0.95"},然后回车。
你也可以根据需要自定义图形。


这是个简单的仪表盘 例子。

Grafana + InfluxDB + Jmeter配置:

新建DB (InfluxDB)

进入容器:docker exec -it 容器ID /bin/bash
创建数据库jmeterDB: create database jmeterDB


influxdb容器运行成功后,通过Web浏览器访问http://docker-host-ip:8083访问influxdb后台管理,并登录后台管理系统(默认用户名:root, 默认密码:root)

连接influxdb一般用InfluxDB studio

创建Grafana仪表盘并配置 (InfluxDB)

接下来就是使用http://IPAddress:3000去登陆grafana并进行配置了

http://ip/grafana(如果使用Nginx代理)

初始密码为:admin/admin,也可在上述的.env文件中进行设置。
首次登陆grafana会要求设置新密码

登陆到grafana主页之后,创建新的Data Source:


配置Database,选择InfluxDB:


填入你的IP地址http://*.*.*.*:8086 (http://*.*.*.*/influxdb #如果使用了Nginx端口代理)


输入InfluxDB信息,如果没做更改的话user和pwd都是默认的root, 为了安全自行修改。

Grafana Dashboards导入InfluxDB Jmeter模板

到Dashboards去下载:https://grafana.com/grafana/d...

或者直接访问:https://grafana.com/grafana/d...
复制该模板的ID 或者URL


到我们登陆的Grafana主页去粘贴即可,如下图


然后可以进行命名,填入之前建好的DataSource 名字,设置发送时间,保存即可。


然后转到刚刚建好的主页,如下图,右上角可以设置:


设置界面,可更具你的需要进行设置,比如下面两个点分别是设置时间显示和刷新频率。

接下来就准备运行Jmeter ,生成数据,看看效果。
挑选了一个URL,对其进行简单的运行并返回数据。
https://mp.weixin.qq.com/s/pz...




其结果如下:

摘自作者之一说明:

插件的另一点是,它不需要向JMeter控制器发送指标来聚合结果,因为这是由Prometheus本身完成的。
总结:

现在,您已经成功地将JMeter与Prometheus和Grafana集成在一起了。如果喜欢Prometheus的可视化,不需要配置Grafana。
但是Grafana具有比Prometheus更强大的可视化功能。
你需要在运行JMeter的任何地方安装JMeter-Prometheus插件,并将数据流简化到集中的Prometheus数据库中,这将帮助你监视运行时指标。

你需要在Grafana中仔细地编写查询,否则最终会看到错误的指标数据。

附录:

另外再介绍一下使用Docker逐步安装Grafana/ Prometheus /InfluxDB

Docker 安装 Prometheus

安装Prometheus非常简单。下载适用于您的操作系统的Prometheus并解压缩内容并准备就绪。
稍后,我们将启动Prometheus。
搜索Prometheus:docker search Prometheus
拉取Prometheus镜像:docker pull prom/prometheus
查看镜像Images: docker images
运行Prometheus容器:docker run --name my_PrometheusName -p 9090:9090 Prometheus
查看运行的容器Container:docker ps -a
进入容器:docker exec -it 容器ID /bin/bash
创建数据库jmeterDB: create database jmeterDB

Docker安装 InfluxDB

搜索influx:docker search influx
拉取influxdb镜像:docker pull influxdb
查看镜像Images: docker images
运行influxdb容器:docker run --name my_influxdbName -p 8086:8086 influxdb
查看运行的容器Container:docker ps -a

Docker安装 Grafana

搜索grafana:docker search grafana
拉取grafana镜像:docker pull grafana/grafana
运行容器:docker run --name my_grafana -p 3000:3000 grafana/grafana
然后查看状态
docker ps -a 查看当前运行的实例
退出来再次启动即可
docker start ContainerID

最后作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些软件测试的学习资料和我花了3个月整理的软件测试自学全栈,这些资料希望能给你前进的路上带来帮助。

视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/6 19:04:07

python语言随机人物头像图片生成器程序代码

import random from PIL import Image, ImageDrawclass RandomAvatarGenerator:def __init__(self, avatar_size200):"""初始化头像生成器&#xff0c;默认生成200x200的头像"""self.size avatar_sizeself.center (avatar_size // 2, avatar_s…

作者头像 李华
网站建设 2026/2/6 17:07:25

基于 Python 的人脸+服装双重验证照片识别系统

从海量照片中精准找出特定人物的照片,结合人脸识别与服装颜色检测的双重验证方案。 背景 在活动、运动会等场景中,摄影师会拍摄大量照片。如何从成百上千张照片中快速找出某个特定人物的照片?单纯依靠人脸识别可能会有误匹配,本文介绍一种结合人脸识别和服装颜色检测的双重…

作者头像 李华
网站建设 2026/2/6 19:10:48

计算机毕业设计springboot牙医诊所管理系统的设计与实现 基于SpringBoot的口腔门诊综合管理平台的设计与实现 SpringBoot驱动的数字化牙科诊所运营系统开发实战

计算机毕业设计springboot牙医诊所管理系统的设计与实现m077bax2 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。当“看牙”从线下排队变成指尖预约&#xff0c;当消毒记录从纸质…

作者头像 李华
网站建设 2026/2/6 2:30:22

有什么好用的降AIGC疑似度工具,知网AI率90%!

2025年起&#xff0c;高校已明确要求毕业论文要检测AIGC率&#xff0c;AI率高于30%或40%就不能参加答辩&#xff0c;而部分学校、硕士论文更加严格&#xff0c;要求在20%以内。 这其中&#xff0c;大多数高校使用的AIGC检测系统是知网、万方、维普等主流查重系统&#xff0c;这…

作者头像 李华
网站建设 2026/2/5 14:32:46

推行无纸化审图,国产CAD助力企业降本增效与绿色办公

在许多企业&#xff0c;项目评审会依然依赖打印A0甚至A1的大幅图纸。这不仅消耗大量的纸张和打印成本&#xff0c;会后图纸的存储、管理也极为不便&#xff0c;更与绿色办公的理念相悖。纸质流程本身也存在效率低下、批注易丢失、追溯困难等问题。CAXA CAD 为全面实现“无纸化审…

作者头像 李华
网站建设 2026/2/4 22:23:32

智能逗狗神器方案开发,狗狗跳跳球MCU方案设计

狗狗跳跳球是一款集自动运动、声光互动、智能启停于一体的宠物玩具&#xff0c;通过随机、不可预测的运动模式吸引狗狗追逐&#xff0c;同时具备防卡死、低功耗等功能&#xff0c;提升人宠互动体验。本文讨论狗狗跳跳球MCU方案开发设计思路。智能逗狗神器狗狗跳跳球MCU方案兼顾…

作者头像 李华