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
坑:注意阿里云的e l7是E L7,切勿看错成数字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: alwaysimage: nginx:latestcontainer_name: nginxports:- "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-generatorcommand:- '--config.file=/etc/prometheus/prometheus.yml'depends_on:- influxdb- prometheus- grafanainfluxdb:image: influxdb:latestcontainer_name: influxdbports:- "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/influxdbprometheus:image: prom/prometheuscontainer_name: prometheushostname: prometheusrestart: alwaysvolumes:- ~/test-Grafana_influxDB_Prom/prometheus.yml:/etc/prometheus/prometheus.ymlcommand:- '--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:latestcontainer_name: grafanaports:- "3000:3000"environment:- GF_SECURITY_ADMIN_USER=${GRAFANA_USERNAME}- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}depends_on:- influxdbuser: "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=adminGRAFANA_USERNAME=admin GRAFANA_PASSWORD=adminPROMETHEUS_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
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关文章:
Grafana+Prometheus(InfluxDB)+Jmeter使用Nginx代理搭建可视化性能测试监控平台
前言 在这篇博客文章中,将分享JMeter > Prometheus(InfluxDB) > Grafana的集成,以及Nginx端口反向代理各服务的端口。 背景 在JMeter插件库中,有一些后端监听器可供Kafka、ElasticSearch和Azure使用。默认情况下,JMeter支…...
web学习笔记(六十六)项目总结
目录 1. Suspense标签 2.发布订阅者模式 3.pinia的使用 4.在请求过来的数据添数据 5.设置token和取token 6. 实现触底加载 7.导航守卫判断登录状态。 1. Suspense标签 Suspense主要用于用于处理异步组件加载和数据获取。,使用这个标签可以允许你在组件等待数…...
红队内网攻防渗透:内网渗透之内网对抗:横向移动篇域控系统提权NetLogonADCSPACKDC永恒之蓝CVE漏洞
红队内网攻防渗透 1. 内网横向移动1.1 横向移动-域控提权-CVE-2020-1472 NetLogon1.2 横向移动-域控提权-CVE-2021-422871.3 横向移动-域控提权-CVE-2022-269231.4 横向移动-系统漏洞-CVE-2017-01461.5 横向移动-域控提权-CVE-2014-63241. 内网横向移动 1、横向移动-域控提权-…...
VMware Workstation安装Windows Server2019系统详细操作步骤
虚拟机版本 VMware Workstation 16 Prp 16.2.5 build-20904516 实现操作 创建虚拟机 创建新的虚拟机 自定义->下一步 默认即可,下一步 稍后安装操作系统->下一步 按照图下所示选择好系统->下一步 设置好虚拟机名称和位置->下一步 默认即可࿰…...
HTML5【新特性总结】
HTML5【新特性总结】 HTML5 的新增特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等。 这些新特性都有兼容性问题,基本是 IE9 以上版本的浏览器才支持,如果不考虑兼容性问题,可以大量使用这些新特性。…...
【面试题】面试官:判断图是否有环?_数据结构复试问题 有向图是否有环
type: NODE;name: string;[x: string]: any; }; [x: string]: any;}; export type Data Node | Edge; 复制代码 * 测试数据如下const data: Data[] [ { id: ‘1’, data: { type: ‘NODE’, name: ‘节点1’ } }, { id: ‘2’, data: { type: ‘NODE’, name: ‘节点2’ } },…...
办理北京公司注册地址异常变更要求和流程
在北京注册公司时选择注册地址是非常重要的一环,注册地址不仅体现在营业执照上,在网上也有公示信息,一般选用的是商用地址和商住两用地址,在公司经营过程中,因为经营需要变更注册地址,也要依法变更…...
当你在浏览器输入一个地址
你在浏览器中输出了一个地址,回车后,一直到显示页面,中间经历了哪些过程 ? 1. 用户输入 URL 并按下回车 用户在浏览器的地址栏中输入一个 URL(例如 http://example.com)并按下回车键。 2. DNS 解析 浏览…...
JSP基础知识概述
目录 JSP一、什么是JSP1.1 概念1.2 创建JSP1.3 JSP编写Java代码1.4 JSP实现原理 二、JSP与HTML集成2.1 普通脚本2.2 声明脚本2.3 输出脚本2.4 JSP指令2.5 动作标签 三、内置对象3.1 四大域对象 JSP 一、什么是JSP 1.1 概念 简化的Servlet设计,在HTMl标签中嵌套Jav…...
国产编程—— 仓颉
应用 仓颉编程语言是一款由华为主导设计和实现的面向全场景智能的编程语言,主要应用于以下领域: 中文字符编码和文本数据处理:仓颉编程语言充分利用汉字的结构特点来设计编码,为开发者提供了一种高效的方式来编码、存储和处理中…...
0X JavaSE-并发编程(锁)
1...
云计算【第一阶段(18)】磁盘管理与文件系统 分区格式挂载(一)
目录 一、磁盘基础 二、磁盘结构 2.1、机械硬盘 2.2、固态硬盘 2.3、扩展移动硬盘 2.4、机械磁盘的一些计算(了解) 2.5、磁盘接口类型 二、Linux 中使用的文件系统类型 2.1、磁盘分区的表示 2.1.1、主引导记录(MBR) 2.1.2、Linux中将硬盘、分…...
Flask-cache
Flask-cache 目录 Flask-cache基本使用配置可用参数SimpleCacheNullCacheFileSystemCacheRedisCacheRedisSentinelCacheRedisClusterCacheMemcachedCacheSASLMemcachedCacheUWSGICache Flask-Cache是一个强大的缓存库,为基于Flask的应用提供了简单易用的API和多种缓…...
【面试题】面试小技巧:如果有人问你 xxx 技术是什么?_面试问你对什么技术特别了解
前端工程越来越大,前面几种方案不能很好的支持单元测试。 在这样的背景下,React 诞生了。React 带来了新的思维模式,UI fn(props),React 中一个组件就是一个函数或者一个类,一个函数或者一个类就是一个基础单位&…...
简单分享Python语言(发现其实并不难)
一. Python基础 Python是一种解释型语言,这意味着开发者可以在代码被编写后立即执行它们,而无需编译。Python的基本语法简单明了,以下是一些基础知识点: 变量和数据类型:Python支持多种数据类型,包括整型&…...
基于VTK9.3.0+Visual Studio2017 c++实现DICOM影像MPR多平面重建
开源库:VTK9.3.0 开发工具:Visual Studio2017 开发语言:C 实现过程: void initImageActor(double* Matrix, double* center, vtkSmartPointer<vtkImageCast> pImageCast,vtkSmartPointer<vtkImageReslice> imageRe…...
【论文精读】ViM: Out-Of-Distribution with Virtual-logit Matching 使用虚拟分对数匹配的分布外检测
文章目录 一、文章概览(一)问题来源(二)文章的主要工作(三)相关研究 二、动机:Logits 中缺失的信息(一)logits(三)基于零空间的 OOD 评分…...
【面试题】前端 移动端自适应?_前端移动端适配面试题
设备像素比 设备像素比 (DevicePixelRatio) 指的是设备物理像素和逻辑像素的比例 。比如 iPhone6 的 DPR 是2。 设备像素比 物理像素 / 逻辑像素。可通过 window.devicePixelRatio 获取,CSS 媒体查询代码如下 media (-webkit-min-device-pixel-ratio: 3), (min-…...
在Maven工程中手动配置并测试SpringBoot(巨详)
本篇博客承继自博客: 在IDEA 2024.1.3 (Community Edition)中创建Maven项目_idea2024.1.3如何创建maven项目-CSDN博客 配置POM文件 打开工程中的pom.xml文件,先向其中写入 <parent><groupId>org.springframework.boot</groupId><…...
c# 去掉字符串首尾的 特殊符号
如果首尾的 - 数量不确定,可以使用以下方法来去掉字符串两端的 - 字符: 使用正则表达式: using System.Text.RegularExpressions;string input "---Hello, World!---"; string trimmed Regex.Replace(input, "^-*|-*$", ""); // trimmed 为 …...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
