云原生时代如何用 Prometheus 实现性能压测可观测-Metrics 篇

简介:可观测性包括 Metrics、Traces、Logs3 个维度。可观测能力帮助我们在复杂的分布式系统中快速排查、定位问题,是分布式系统中必不可少的运维工具。

作者:拂衣

什么是性能压测可观测

可观测性包括 Metrics、Traces、Logs3 个维度。可观测能力帮助我们在复杂的分布式系统中快速排查、定位问题,是分布式系统中必不可少的运维工具。

在性能压测领域中,可观测能力更为重要,除了有助于定位性能问题,其中Metrics性能指标更直接决定了压测是否通过,对系统上线有决定性左右,具体如下:

  • Metrics,监控指标
  • 系统性能指标,包括请求成功率、系统吞吐量、响应时长
  • 资源性能指标,衡量系统软硬件资源使用情况,配合系统性能指标,观察系统资源水位
  • Logs,日志
  • 施压引擎日志,观察施压引擎是否健康,压测脚本执行是否有报错
  • 采样日志,采样记录 API 的请求和响应详情,辅助排查压测过程中的一些出错请求的参数是否正常,并通过响应详情,查看完整的错误信息
  • Traces,分布式链路追踪用于性能问题诊断阶段,通过追踪请求在系统中的调用链路,定位报错 API 的报错系统和报错堆栈,快速定位性能问题点

本篇阐述如何使用 Prometheus 实现性能压测 Metrics 的可观测性。

压测监控的核心指标

系统性能指标

压测监控最重要的 3 个指标:请求成功率、服务吞吐量(TPS)、请求响应时长(RT),这 3 个指标任意一个出现拐点,都可以认为系统已达到性能瓶颈。

这里特别说明下响应时长,对于这个指标,用平均值来判断很有误导性,因为一个系统的响应时长并不是平均分布的,往往会出现长尾现象,表现为一部分用户请求的响应时间特别长,但整体平均响应时间符合预期,这样其实是影响了一部分用户的体验,不应该判断为测试通过。因此对于响应时长,常用 99、95、90 分位值来判断系统响应时长是否达标。

另外,如果需要观察请求响应时长的分布细节,可以补充请求建联时长(Connect Time)、等待响应时长(Idle Time)等指标。

资源性能指标

压测过程中,对系统硬件、中间件、数据库资源的监控也很重要,包括但不限于:

  • CPU 使用率
  • 内存使用率
  • 磁盘吞吐量
  • 网络吞吐量
  • 数据库连接数
  • 缓存命中率

... ...

详细可见《测试指标》[1]一文。

施压机性能指标

压测链路中,施压机性能是容易被忽略的一环,为了保证施压机不是整个压测链路的性能瓶颈,需要关注如下施压机性能指标:

  • 压测进程的内存使用量
  • 施压机 CPU 使用率,Load1、Load5 负载指标
  • 基于 JVM 的压测引擎,需要关注垃圾回收次数、垃圾回收时长

为什么用 Prometheus 做压测监控

开源压测工具如 JMeter 本身支持简单的系统性能监控指标,如:请求成功率、系统吞吐量、响应时长等。但是对于大规模分布式压测来说,开源压测工具的原生监控有如下不足:

  1. 监控指标不够全面,一般只包含了基础的系统性能指标,只能用于判断压测是否通过。但是如果压测不通过,需要排查、定位问题时,如分析一个 API 的 99 分位建联时长,原生监控指标就无法实现。
  2. 聚合时效性不能保证
  3. 无法支持大规模分布式的监控数据聚合
  4. 监控指标不支持按时间轴回溯

综上,在大规模分布式压测中,不推荐使用开源压测工具的原生监控。

下面对比 2 种开源的监控方案:

方案一:Zabbix

Zabbix 是早期开源的分布式监控系统,支持 MySQL 或 PostgreSQL 关系型数据库作为数据源。

对于系统性能监控,需要施压机提供秒级的监控指标,每秒高并发的监控指标写入,使关系型数据库成为了监控系统的瓶颈。

对于资源性能监控,Zabbix 对物理机、虚拟机的指标很全面,但是对容器、弹性计算的监控支持还不够。

方案二:Prometheus

Prometheus 使用时序数据库作为数据源,相比传统关系型数据库,读写性能大大提高,对于施压机大量的秒级监控数据上报的场景,性能表现良好。

对于资源性能监控,Prometheus 更适用于云资源的监控,尤其对 Kubernates 和容器的监控非常全面,对使用云原生技术的用户,上手更简单。

总结下来,Prometheus 相较 Zabbix,更适合于压测中高并发监控指标的采集和聚合,并且更适用于云资源的监控,且易于扩展。

当然,使用成熟的云产品也是一个很好选择,如压测工具 PTS[2]+可观测工具 ARMS[3],就是一组黄金搭档。PTS 提供压测时的系统性能指标,ARMS 提供资源监控和整体可观测的能力,一站式解决压测可观测的问题。

怎么使用 Prometheus 实现压测监控

开源 JMeter 改造

Prometheus 是拉数据模型,因此需要压测引擎暴露 HTTP 服务,供 Prometheus 获取各压测指标。

JMeter 提供了插件机制,可以自定义插件来扩展 Prometheus 监控能力。在自定插件中,需要扩展 JMeter 的 BackendListener,让在采样器执行完成时,更新每个压测指标,如成功请求数、失败请求数、请求响应时长。并将各压测指标在内存中保存,在 Prometheus 拉数据时,通过 HTTP 服务暴露出去。整体结构如下:

JMeter 自定义插件需要改造的点:

  1. 增加指标注册中心
  2. 扩展 Prometheus 指标更新器
  3. 实现自定义 JMeter BackendListener,在采样器执行结束后,调用 Prometheus 更新器
  4. 实现 HTTP Server,如果有安全需要,补充鉴权逻辑

PTS 压测工具

性能测试 PTS(Performance Testing Service)是一款阿里云 SaaS 化的性能测试工具。PTS支持自研压测引擎,同时支持开源 JMeter 压测,在 PTS 上开放压测指标到 Prometheus,无需开发自定义插件来改造引擎,只需 3 步白屏化操作即可。

具体步骤如下:

  1. PTS 压测的高级设置中,打开【Prometheus】开关
  2. 压测开始后,在【监控导出】一键复制 Prometheus 配置
  3. 自建的 Prometheus 中粘贴并热加载此配置,即可生效

详细参考:《如何将 PTS 压测的指标数据输出到 Prometheus》[4]

快速搭建 Grafana 监控大盘

PTS 提供了官方 Grafana 大盘模板[5],支持一键导入监控大盘,并可以灵活编辑和扩展,满足您的定制监控需求。

本大盘提供了全局请求成功率,系统吞吐量(TPS),99、95、90 分位响应时长,以及按错误状态码聚合的错误请求数等数据。

在 API 分布专栏中,可以直观的对比各 API 的监控指标,快速定位性能短板 API。

在 API 详情专栏中,可以查看单个 API 的详细指标,准确定位性能瓶颈。

另外,大盘还提供了施压机的JVM垃圾回收监控指标,可以辅助判断施压机是否是压测链路中的性能瓶颈。

导入步骤如下:

步骤一

在菜单栏,点击 Dashboard 下的 import:

步骤二

填写 PTS Dashboard 的 id:15981

在 Prometheus 选择您已有的数据源,本示例中数据源名为 Prometheus。选中后,单击 Import 导入

步骤三

导入后,在左上角【PTS 压测任务】,选择需要监控的压测任务,即可看到当前监控大盘。

此任务名对应 PTS 控制台在监控导出-Prometheus 配置中的 jobname。

总结

本文阐述了

  1. 什么是性能测试可观测
  2. 为什么用 Prometheus 做压测性能指标监控
  3. 如何使用开源 JMeter 和云上 PTS 实现基于 Prometheus 的压测监控

PTS 压测监控导出 Prometheus 功能,目前免费公测中,欢迎使用。

原文链接

本文为阿里云原创内容,未经允许不得转载。 

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

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

相关文章

基于 KubeVela 的机器学习实践

简介:本文主要介绍如何使用 KubeVela 的 AI 插件,来帮助工程师更便捷地完成模型训练及模型服务。 作者:KubeVela 社区 在机器学习浪潮迸发的当下,AI 工程师除了需要训练、调试自己的模型之外,还需要将模型进行部署上…

Gartner发布2022年云平台服务技术成熟度曲线,iPaaS、低代码将达到成熟期

Gartner 2022年云平台服务技术成熟度曲线显示,集成平台即服务(iPaaS)和低代码应用平台(LCAP)技术将在不到两年的时间内达到生产成熟期(Plateau of Productivity)。 编辑 | 宋慧 供稿 | Gartner…

sass封装h5适配文件

charset "UTF-8"; /** 使用方法 include keyframes(anMeinv,(0%:(background: url(i/meinv.png) no-repeat pxToRem(140) pxToRem(11),background-size: pxToRem(165) pxToRem(157)),50%:(background: url(i/meinv.png) no-repeat pxToRem(140) pxToRem(11),backgrou…

OpenKruise v1.1:功能增强与上游对齐,大规模场景性能优化

简介:在 v1.1 版本中,OpenKruise 对不少已有功能做了扩展与增强,并且优化了在大规模集群中的运行性能。以下对 v1.1 的部分功能做简要介绍。 作者:酒祝(王思宇) 云原生应用自动化管理套件、CNCF Sandbox …

贼喊捉贼?“盗版”软件开发者向 GitHub 投诉被侵权

整理 | 于轩 出品 | CSDN(ID:CSDNnews)拥有超过2亿个代码存储库,由8000多万用户共享,GitHub已然成为世界上最大和最先进的开发平台。 与其他托管用户生成内容的平台一样,这个庞大的代码库经常会接到版权…

基于 Serverless 架构的头像漫画风处理小程序

简介: 当一个程序员想要个漫画风的头像时... 前言 我一直都想要有一个漫画版的头像,奈何手太笨,用了很多软件 “捏不出来”,所以就在想着,是否可以基于 AI 实现这样一个功能,并部署到 Serverless 架构上让…

异动分析技术解决方案—异动归因之指标拆解

简介:归因的方法有多种,这篇文章的重点是指标拆解,也是我们做业务分析时最常用到的方法。我们的目的是解放人力,将指标拆解实现自动化,一方面可以加快业务迭代速度,快速定位问题;另一方面可以对…

阿里巴巴云原生混部系统 Koordinator 正式开源

简介: 脱胎于阿里巴巴内部,经过多年双 11 打磨,每年为公司节省数十亿的混部系统 Koordinator 今天宣布正式开源。通过开源,我们希望将更好的混部能力、调度能力开放到整个行业,帮助企业客户改进云原生工作负载运行的效…

足不出户,确保交付——独家交付秘籍(第二回)

简介:在后疫情时代,遇到无法出差、无法访客时,如何保障交付按时保质的进行,做好运维质量的保障,从而不影响企业整体营收,已成为我们生死攸关的难题。小锤在遇到无法只通过远程就完成项目交付验收&#xff0…

react中类组件this指向

这是一个标准的类组件 import React,{Component} from react; class View extends Component{constructor(props){super(props)}state{} //写在这里跟写在constructor中一样&#xff0c;都可以起到初始化的效果,并且可以省去thisfn(){}fn1(){}render(){return(<div><…

如何使用 PTS 快速发起微服务压测

简介&#xff1a;本文讲阐述什么是微服务架构、微服务架构对系统稳定性带来的影响&#xff0c;以及用性能测试验证稳定性的必要性、用户进行微服务压测的痛点和 PTS 的独特优势、云上使用 PTS 快速发起微服务压测的步骤&#xff0c;以及压测完成后排查分析相关问题的 Tips。 作…

一首让计算机崩溃的歌曲!

大家好&#xff0c;我是轩辕。想象一个场景&#xff1a;手机里播放一首音乐&#xff0c;然后你带着手机从一台电脑旁经过&#xff0c;电脑就被你弄崩溃死机了。这是不是有点像电影里的桥段&#xff1f;一年前&#xff0c;我写过一篇文章&#xff1a;电脑关机了&#xff0c;黑客…

OpenYurt 之 Yurthub 数据过滤框架解析

简介&#xff1a;OpenYurt 是业界首个非侵入的边缘计算云原生开源项目&#xff0c;通过边缘自治&#xff0c;云边协同&#xff0c;边缘单元化&#xff0c;边缘流量闭环等能力为用户提供云边一体化的使用体验。在 Openyurt 里边缘网络可以使用数据过滤框架在不同节点池里实现边缘…

react中规范类型接口的使用

安装 yarn add prop-types 使用 // 注意大小写 import PropTypes from prop-types {name:小红,age:13,sex:"女"} //场景 name String类型&#xff0c;必传 // age Nuber类型&#xff0c;默认值18 // sex String类型&#xff0c;默认值男//类型的限制 Per…

金融核心系统云原生转型的三个挑战、六个误区和四个步骤

嘉宾 | 马振雄出品 | CSDN云原生近年来&#xff0c;云原生技术发展如火如荼&#xff0c;IT系统云原生转型已成共识&#xff0c;留给各行各业的只是何时云原生、怎样云原生的时间和方式问题。金融行业作为各类转型历来的排头兵&#xff0c;在推进云原生转型上同样不逞多让。金融…

KubeVela v1.3 多集群初体验,轻松管理应用分发和差异化配置

简介&#xff1a;KubeVela v1.3 在之前的多集群功能上进行了迭代&#xff0c;本文将为你揭示&#xff0c;如何使用 KubeVela 进行多集群应用的部署与管理&#xff0c;实现以上的业务需求。 作者&#xff1a;段威&#xff08;段少&#xff09; 在当今的多集群业务场景下&#…

Java 定时任务技术趋势

简介&#xff1a;定时任务是每个业务常见的需求&#xff0c;比如每分钟扫描超时支付的订单&#xff0c;每小时清理一次数据库历史数据&#xff0c;每天统计前一天的数据并生成报表等等。 作者&#xff1a;黄晓萌&#xff08;学仁&#xff09; Java 中自带的解决方案 使用 Ti…

ajax,jsonp,axios面试题

什么是前后端联调&#xff1f; react中axios跨域的配置 const { createProxyMiddleware } require(http-proxy-middleware); module.exports function (app) {app.use(// https://home-api.pinduoduo.com/home/mediareports?page_number1&page_size20/home, createPro…

从再造到赋能——360数科举办第二届技术开放日

8月31日&#xff0c;360数科在北京举办“从再造到赋能——2022年技术开放日”。这是360数科的第二届开放日&#xff0c;全面展示了公司在金融科技业务全环节的精细化运营成果&#xff0c;呈现了360数科从市场连接者到流程再造者的技术演化历程&#xff0c;展望了其成为行业赋能…

EventBridge 特性介绍|以 IaC 的方式使用 EventBridge

简介&#xff1a;本文将重点介绍 EventBridge 和 IaC 的重点概念和特性&#xff0c;然后演示如何应用 IaC 理念自动化部署 EventBridge 来使用这些概念和特性。 作者&#xff1a;王川&#xff08;弗丁&#xff09; 引言 EventBridge 作为构建 EDA 架构的基础设施&#xff0c…