Jmeter+Grafana+Prometheus搭建压测监控平台

news2024/11/20 3:18:12

本文不介绍压测的规范与技术指标,本文是演示针对Jmeter如何将压测过程中的数据指标,通过Prometheus采集存储,并在Granfan平台进行仪表盘展示;

介绍

系统压测属于日常项目开发中的一个测试环节,使用测试工具模拟真实用户行为,在已知的软硬件资源下,通过批量压测对项目的服务性能进行检验,从而了解系统接口稳定性、每秒并发瓶颈、错误率多少、响应时间、QPS、流量大小等等;也是为了项目上线后,通过对未来可能达到的系统上限与并发问题,提前进行预测与检验;防止真实上线后未经压力测试,无足够的性能压测评估,当大量请求到来时,可能引起未知的系统崩溃;通过压测,可以撑握系统峰值能力与并发能力,并提前通过风险策略与技术干预,降低系统宕机风险;因此对于企业来说,压测是系统测试与验收过程中必不可少的要求;

常见压测场景:

  • 业务系统上线前压测检验
  • 服务线上遇到性能瓶颈或问题,需要压测复现
  • 对业务接口进行响应测试与并发测试,评估接口响应性能
  • 对不同硬件资源条件下进行系统压测,评估服务软硬件性能
  • 企业或合作方明确要求对系统软件验收压测

压测集成工具

Jmeter

JMeter 是一个开源的负载测试和性能测量工具,由Apache软件基金会开发。JMeter采用JAVA开发,它主要用于测试Web应用程序,但也可以测试各种服务。JMeter可以模拟多个用户同时发送请求到服务器,以测试其负载能力和性能。

JMeter 是一个强大的工具,适用于开发者和测试工程师用来确保他们的应用程序可以承受预期的用户负载。

主要特点:

  • 多协议支持:支持HTTP, HTTPS, FTP, SOAP, REST, TCP等。
  • 可扩展:可以通过插件扩展功能。
  • 友好的GUI:提供图形用户界面,便于设计和执行测试。
  • 结果分析:可以生成图形报告,帮助分析测试结果。
  • 多线程框架:允许并发和同时抽样多个函数。

使用场景:

  • 性能测试:测试应用程序在高负载下的表现。
  • 负载测试:确定应用程序的最大操作能力。
  • 压力测试:测试应用程序在超过正常负载条件下的表现。

官方网站:Apache JMeter - Apache JMeter™

Prometheus

Prometheus 是云原生计算基金会项目,是一个系统和服务监控系统。它以给定的时间间隔从配置的目标收集指标,评估规则表达式,显示结果,并可以在观察到指定条件时触发警报。

Prometheus监控系统包括丰富的多维数据模型、简洁而强大的PromQL查询语言、高效的嵌入式时间序列数据库以及与第三方系统的150多个集成;

Prometheus 与其他指标和监控系统的区别在于:

  • 多维数据模型(由指标名称和键/值维度集定义的时间序列)
  • PromQL,一种强大而灵活的查询语言,可以利用这种维度
  • 不依赖分布式存储;单个服务器节点是自治的
  • 用于时间序列收集的HTTP拉模型
  • 通过批处理作业的中间网关支持推送时间序列
  • 通过服务发现或静态配置发现目标
  • 多种图形和仪表板支持模式
  • 支持分层和水平联合

Github地址:GitHub - prometheus/prometheus: The Prometheus monitoring system and time series database.

Grafana

Grafana 开源是开源可视化和分析软件。它允许您查询、可视化、警报和探索您的指标、日志和跟踪,无论它们存储在何处。它为您提供了将时间序列数据库 (TSDB) 数据转换为富有洞察力的图表和可视化的工具。

Grafana支持非常多的数据源,同时又有强大的可视化、告警等非常强大的功能,因此在数据分析、指标追踪和数据查询等方面,需多的公司在运维指标、日志分析、大屏展示等有实际应用;在项目监控、运维、服务器指标等业务上,是一个强大可靠的分析平台;

官网:http://grafana.com

注:相关软件从各自平台或官网下载即可。Jmeter安装比较简单,下载压测包后解压即可用(需安装jdk1.8+),Grafana和Prometheus安装过程参考《Grafana,Loki,Tempo,Prometheus,Agent搭建日志链路监控平台》,此处不在重述;

Jmeter集成插件

待上述软件安装后,我们通过一个简单示例演示Jmeter工具如何配置Prometheus插件与Prometheus采集指标;

Jmeter配置插件

启动Jmeter后,通过菜单:选项》Plugins Manager,进入插件管理窗口,安装Prometheus Listener Plugin插件

在弹出的插件管理窗口中,点击"Available Plugins"选项卡,在搜索框中输出Prometheus查找Prometheus Listener Plugin插件

此处我已提前安装过,在“Installed Plugins”选项卡中,已存在Prometheus Listener Plugin插,注意:安装后如果在线程组上右键找不到“添加》监听器》Prometheus Listener”选项,可能需要重启一下jmeter 即可,或在Jmeter安装目录lib\ext下是否有jmeter-prometheus-plugin-0.6.0.jar,如果没有需重新安装,或通过github开源项目上下载最新jar放到lib\ext目录下即可;

Prometheus Listener Plugin插件介绍:

Prometheus Listener Plugin是JMeter中的一个开源插件,通过可配置的监听器(和配置元素),允许用户定义他们自己的指标(名称、类型等),并通过 Prometheus /metrics API 公开它们,以供 Prometheus 服务器抓取。

Github地址:GitHub - johrstrom/jmeter-prometheus-plugin: A Prometheus Listener for Apache JMeter that exposes results in an http API

在线程组上使用Prometheus Listener 监听器后,启动Jmeter压测,即会自动监听本机默认9270端口,也可通过Jmeter安装目录bin/jmeter.properties属性配置文件进行修改,添加如下配置(默认无以下配置),相关配置说明请参考Github项目文档说明;

#---------------------------------------------------------------------------
# Documentation jmeter-prometheus-plugin插件配置 
#---------------------------------------------------------------------------

# http服务器将绑定到的端口
prometheus.port=9270
# http服务器将绑定到的ip
prometheus.ip=0.0.0.0
# http服务器在被销毁之前等待的延迟(以秒为单位)
prometheus.delay=3
# 保存和收集 jmeter 线程指标的True或false值
prometheus.save.threads=true
# 描述jmeter线程的指标名称
prometheus.save.threads.name=jmeter_threads
# 从JVM收集指标
prometheus.save.jvm=true

如上,已完成Jmeter prometheus plugin插件安装与配置;

创建Jmeter压测线程

压测线程组

选择根Test Plan右键:添加》(线程)用户》线程组,新建一个线程组,命名:Prometheus指标压测

配置线程数:6000

Ramp-Up时间(秒):3000

循环次数:1

表示整个Jmeter压测过程中共创建6000个线程在3000秒内请求完毕,并只执行1轮(循环次数为1);

此配置目的是为了让Jmeter保持较长时间的请求,从而在Grafana上展示较长的仪表线条;

注:实际压测会根据真实需求配置线程数和时间,此处只做演示用;

添加取样器

HTTP请求:发起http协议请求,用于向指定WEB服务URL发起请求(注意:将名称更改为"HTTP Request",因为默认jmeter对中文输出没做处理,prometheus采集过程中会乱码,导制数据不显示);

HTTP请求配置如下:

在路径上配置任务WEB服务请求接口,此处示例路径为:http://127.0.0.1:8080/hello

添加监听器

聚合报告:展示每一轮压测的性能数据指标,如:样本数、平均值、中位数、90%百分人头、95%百分位、99%百分位、最小值、最大值、异常率、吞吐量、接收大小、发送大小等;

用表格查看结果:用于展示每个线程请求的列表

Prometheus Listener:配置Jmeter压测过程中,prometheus plugin插件可采集的指标;

Prometheus Listener配置如下:

指标说明:jmeter_summary(响应时间)、jmeter_count_total(取样器总数)、jmeter_success_total(成功总数)、jmeter_response_size(响应大小)、jmeter_success_ratio(成功率)、jmeter_latency_as_hist(网络延迟)、jmeter_idle_time(空闲时间)、jmeter_failure_total(错误总数)、jmeter_connect_time(链接时间)

列表头字段说明

  • Name(名称):指标的名称。
  • Help(帮助):指标的帮助消息。
  • Labels(标签):要应用于指标的以逗号分隔的标签列表。

         label是一个关键字。在 JMeter 中,它表示采样器的名称。

         code是一个关键字。这是结果的响应代码。

         此处可以使用 JMeter 变量。请参阅下面的部分。

  • Type(类型):您正在创建的指标类型。

        有关指标类型的信息,请参阅Prometheus 文档:Metric types | Prometheus

        SUCCESS_RATION(成功率)是该插件特有的内容。

  • Buckets or Quantiles(分位数桶):

        桶是逗号分隔的数字列表。可以是整数或小数。

        分位数是,用竖线分隔的逗号分隔的小数对|。第一个小数是分位数,第二个小数是错误等级。或者可以在分隔符之后指定用于计算分位数的窗口长度。样本:0.8,0.01|0.9,0.01|0.95,0.005|0.99,0.001;60

  • Listen To:用于收听示例或断言的下拉列表。这仅适用于 Counters 和 SuccessRatio 类型指标。
  • Measuring(测量):可以测量的所有内容的下拉菜单:响应时间、响应大小、空闲时间、连接时间、总数、失败总数、成功总数、成功率

压测示例

运行SpringBoot服务

此处不在额外演示工程创建过程,以《SpringBoot+Prometheus采集Metrics指标数据》为例【连接:SpringBoot+Prometheus采集Metrics指标数据_prometheus metrics-CSDN博客】

在SprinbBoot项目启动类中新增一个后台HTTP接口;

@RestController
@SpringBootApplication
public class ApplicationStart {
    public static void main(String[] args) {
        SpringApplication.run(ApplicationStart.class, args);
    }
    
    @RequestMapping("/hello")
    public String hello(){
        //为了演示指标显示的更全,每30s人为抛出一个异常
        Calendar calendar = Calendar.getInstance();
        if (calendar.get(Calendar.SECOND)  == 30) {
            throw new RuntimeException("error");
        }
    }
}

右键》Run...,启动SpringBoog项目;

运行Jmeter压测

SpringBoog项目运行后,回到Jmeter工具中,点击绿色三角形,启动压测线程组,向已配置Http请求路径发起持续一段时间的压测请求;

点击聚合报告监听器,此时已有统计指标数据展示在列表中;

指标采集

Prometheus配置

在Prometheus安装目录下,找到prometheus.yml,添加Jmeter采集配置后(如下所示),重新启动Prometheus服务;

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]
  - job_name: "spring"
    metrics_path: "/actuator/prometheus"
    static_configs:
      - targets: ["localhost:8080"]
  - job_name: "jmeter"
    static_configs:
      - targets: ["localhost:9270"]
  • prometheus:为自身采集指标连接配置
  • spring:为测试项目SpringBoot服务采集指标连接配置
  • jmeter:为Jmeter压测工具采集指标连接配置

采集服务查看

浏览器访问:http://localhost:9090/targets打开Prometheus管理平台Status》Targets菜单,Jemeter和SpringBoot服务已显示为up(上线状态);到此,Prometheus已成功对Jemeter服务和SpringBoot服务端访问与指标采集;

指标可视化

Grafana配置Dashboard

在Grafana中配置Prometheus为数据源后,此处省略安装过程.......(可参考《SpringBoot+Prometheus采集Metrics指标数据》为例【连接:SpringBoot+Prometheus采集Metrics指标数据_prometheus metrics-CSDN博客】),通过Grafana官网的dashboards共享仪表盘资源页面,找到“JMeter_Promethius_Grafana”,资源ID:14927

在Grafana》Dashboards页面,点击右上角“New”下拉按钮,找到“Import”选项;

进入仪表资源导入界面,在Import via grafana.com下文本框中输入:14927,点击Load加载即可;

在回到Dashboards页面,找到我们导入的仪表盘Jmeter_promethius_Grafana,点击即可展示完整的指标仪表;

Dashboard压测仪表盘

进入Grafana平台,点击菜单Dashboards,打开列表中的仪表盘“Jmeter_promethius_Grafana”,通过仪表盘清析的看见jmeter指标数据通过Prometheus已采集入库,通过动态或实时查询Prometheus刷新页面可视化仪表数据;

实际采集的指标比较多,并且Jmeter也支持扩展自定义指标,如果缺少需观测的指标仪表盘,可以直接在当前界面点击右上角的Add链接创建,此处不做详述,有兴趣可自行摸索;

再一次回到Dashboards菜单主页,点击通过《SpringBoot+Prometheus采集Metrics指标数据》为例【连接:SpringBoot+Prometheus采集Metrics指标数据_prometheus metrics-CSDN博客】,导入的SpringBoot共享仪表盘”SpringBoot APM Dashboard“,进入仪表盘页面,查看压测过程中Prometheus动态采集的SpringBoot服务指标数据;

到此已为项目建立了一套完整的压测监控平台,让系统服务压测过程变的更丝滑与指标可视化;

Prometheus远程写入

细心的朋友,可能会问到:Jmeter部署在本机,而Prometheus部署在远程公共服务上,让Prometheus访问本机服务拉取指标数据先不说可不可行,运维大佬也不会同意,那该怎么办?不用担心,Prometheus支持远程存储集成。

Prometheus远程存储

通过启用Prometheus公共服务远程写入接收器(启动过程中加入--web.enable-remote-write-receiver命令参数),开启写入接收器端点:/api/v1/write;

再在本机安装一个Prometheus来采集Jmeter指标,通过remote_write配置远程输出到Prometheus公共服务接收器端点上完成数据存储写入;

Prometheus官方文档关于remote_write(远程存储)介绍:

Configuration | Prometheus

Prometheus官方文档关于Remote storage integrations(远程存储集成)介绍:

Storage | Prometheus

-- 启用远程写入--web.enable-remote-write-receiver
./prometheus --config.file=./prometheus.yml --web.enable-remote-write-receiver

Prometheus本地推送

修改本地prometheus.yml文件在,末尾加上remote_write配置,写入到远程Prometheus服务存储里;重启本地Prometheus服务后,相当于本地Prometheus成为一个采集和转发服务;

remote_write:
  - url: http://192.168.1.100:9090/api/v1/write

如下,在远程公共Prometheus服务上查询本地jmeter压测指标数据在仪表上展示;

公共Prometheus服务成功将本地Prometheus推送的采集数据写入到远程存储中,剩下的就是在Grafana上导入上述Jmeter仪表大盘和SpringBoot仪表大盘;

结束

上述演示如何使用Jmeter+Prometheus+Grafana的集成过程,实际开发测试过程中,对于Jmeter压测中的配置、线池数、指标等,需要根据真实情况而定;本文只是演示讲解压测集成平台,不具有真实项目代表性,仅作参考;

通过前面的文章《SpringBoot+Prometheus采集Metrics指标数据》,演示了如何通过Prometheus采集SpringBoot项目的指标数据,对系统服务的运行进行监控;

再通过本文介绍Jmeter压测工具集成Prometheus插件,利用Prometheus采集Jmeter压测过程中的数据指标,输出到Grafana的Dashboard仪表盘中实时与动态展示,让开发人员与测试人员,对系统服务监控指标有清晰了解,能让服务管理者快速定位系统程序运行过程中的突发指标问题与性能瓶颈;从此以后,再也不怕甲方强烈要求你提供压测性能报告了,只需将相关压测指标数据一查,再将仪表大盘截份图,整成报告文档直接甩对方面前潇洒离场;

参考:

SpringBoot+Prometheus采集Metrics指标数据_prometheus metrics-CSDN博客

GitHub - johrstrom/jmeter-prometheus-plugin: A Prometheus Listener for Apache JMeter that exposes results in an http API

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1675286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】 C++ 编写 鸡兔同笼程序

文章目录 “鸡兔同笼”问题是一个经典的数学问题,要求根据总头数和总腿数来计算鸡和兔的数量。假设鸡有 2 条腿,兔有 4 条腿。可以通过以下步骤求解这个问题: 1 .设鸡的数量为 x,兔的数量为 y。2.根据题意,我们有以下…

CentOS7中如何docker-compose

在 CentOS 7 上安装 docker-compose 需要几个步骤 步骤 1: 安装 Docker 首先,确保你已经安装了 Docker。如果没有安装,可以通过以下命令安装: sudo yum update -y sudo yum install -y yum-utils sudo yum-config-manager --add-repo http…

老铁,对不住了,没有B端成品界面可售,都是定制化设计

经常有粉丝老铁问我有没有成品的UI图可以出售,实在对不住,我们不销售设计成品。 UI设计图是一种设计稿,它是用来展示和呈现产品的界面设计和交互效果的,而不是一个完整的、可交付的成品。UI设计图通常是以静态的形式呈现&#xf…

基于springboot+vue+Mysql的在线答疑系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

CS144 Checkpoint 4: interoperating in the world(2024)

分析网络路径和性能: mtr命令 mtr 输出的详细分析: mtr 162.105.253.58 命令用于结合 traceroute 和 ping 的功能,实时监测并分析从你的计算机到目标主机(IP 地址 162.105.253.58,北京大学计算中心)之间…

vscode 之 output 输出中文乱码,终端输出中文正常

# 1. 背景 因为没钱买正版的软件,所以转战 vscode 编译器。 在编译 python 文件时,发现直接右键 runner code,输出中文乱码。 但是在 teiminal 终端 执行py test.py 时,输出正常,中文正常。 output 输出中文样式(中文…

JAVA实验项目(二): 抽象类、接口的定义与使用

实验项目二 抽象类、接口的定义与使用 Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊&…

【算法优选】 动态规划之子数组、子串系列——壹

文章目录 🎋前言🎋最大子数组和🚩题目描述🚩算法思路🚩代码实现 🌴环形子数组的最大和🚩题目描述🚩算法思路:🚩代码实现 🌲乘积最大子数组&#x…

大模型应用的最佳实践Chains, Chain代码剖析、llmchain示例

各种chain的介绍 串联式编排调用链:SequentialChain 流水线 胶水代码逻辑处理具备编排逻辑 串行 one by one的调用上一个chain的输出 作为 下一个chain的输入 超长文本的转换 Transform Chain pdf文件处理提供了套壳的能力 将python处理字符串的能力 套用进来 完成数据的格式化…

C++面向对象程序设计-北京大学-郭炜【课程笔记(八)】

C面向对象程序设计-北京大学-郭炜【课程笔记(八)】 1、虚函数和多态的基本概念1.1、虚函数1.2、多态多态的表现形式一多态的表现形式二 2、多态实例:魔法门之英雄无敌2.1、**非多态的实现方法:**2.2、**多态的实现方法** 3、多态实…

汇昌联信:拼多多网店该如何开店?

拼多多网店的开设流程并不复杂,但需要细心和耐心去完成每一步。下面将详细阐述如何开设一家拼多多网店。 一、选择商品与定位 开设拼多多网店的第一步是确定你要销售的商品类型,这决定了你的目标客户群体和市场定位。你需要了解这些商品的市场需求、竞争…

MacApp自动化测试之Automator初体验

今天我们继续讲Automator的使用。 初体验 启动Automator程序,选择【工作流程】类型。从资源库区域依次将获取指定的URL、从网页中获得文本、新建文本文件三个操作拖进工作流创建区域。 然后修改内容,将获取指定的URL操作中的URL替换成https://www.cnb…

MATLAB科技绘图与数据分析

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

Token 计费与计算、tiktoken介绍

Token怎么计算的? 每个模型都具有不同的功能和价格。价格是按照每1000个 Token 计算的。您可以将Token视为单词的组成部分,其中1000个Token 大约相当于750个单词。(这段文字包含35个Token) 可以看到35个颜色块 每个块都有ID 英文、中文 都会有单独的一个…

【C++】学习笔记——继承_2

文章目录 十二、继承5. 继承与友元6. 继承与静态成员7. 复杂的菱形继承及菱形虚拟继承 未完待续 十二、继承 5. 继承与友元 友元关系不能继承,也就是说父类友元不能访问子类私有和保护成员 。除非子类也设置成友元。 6. 继承与静态成员 父类定义了 static 静态成…

【渲染数学-01】如何模拟静态流(上)

文章目录 一、说明二、摘要三、简介四、稳定的纳维-斯托克斯4.1 基本方程4.2 解决方法 一、说明 关于流体物质的仿真和模拟,需要流体理论方面的一般知识。我们这里从基本流体方程入手,详细解释如何实现流体仿真的每一个具体步骤。 二、摘要 构建类似流体…

在React中利用Postman测试代码获取数据

文章目录 概要名词解释1、Postman2、axios 使用Postman测试API在React中获取并展示数据小结 概要 在Web开发中,通过API获取数据是一项常见任务。Postman是一个功能强大的工具,可以帮助开发者测试API,并查看API的响应数据。在本篇博客中&…

vue3中的watch侦听器

在有些情况下,我们需要在状态变化时执行一些“副作用”:例如更改 DOM ,或是根据异步操作的结果去修改另一处的状态。在组合式 API 中,我们可以使用 watch 函数在每次响应式状态发生变化时触发回调函数。 watch 函数可以侦听被 ref…

PXE+Kickstart无人值守安装安装Centos7.9

文章目录 一、什么是PXE1、简介2、工作模式3、工作流程 二、什么是Kickstart1、简介2、触发方式 三、无人值守安装系统工作流程四、实验部署1、环境准备2、服务端:关闭防火墙和selinux3、添加一张仅主机的网卡4、配置仅主机的网卡4.1、修改网络连接名4.2、配IP地址4…

太阳能光伏发电应用过程中会用到哪些光伏组件?

随着全球对可再生能源的需求日益增加,太阳能光伏发电已成为一种重要的清洁能源解决方案。在太阳能光伏发电系统的运行过程中,光伏组件作为系统的核心部分,起着至关重要的作用。本文将详细介绍太阳能光伏发电应用过程中会使用到的关键光伏组件…