自己做网站 套模板,北京 网站设计公司,自建个人网站平台,微信公众号创建要钱吗简介#xff1a;可观测性包括 Metrics、Traces、Logs3 个维度。可观测能力帮助我们在复杂的分布式系统中快速排查、定位问题#xff0c;是分布式系统中必不可少的运维工具。
作者#xff1a;拂衣
什么是性能压测可观测 可观测性包括 Metrics、Traces、Logs3 个维度。可观测…简介可观测性包括 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 本身支持简单的系统性能监控指标如请求成功率、系统吞吐量、响应时长等。但是对于大规模分布式压测来说开源压测工具的原生监控有如下不足
监控指标不够全面一般只包含了基础的系统性能指标只能用于判断压测是否通过。但是如果压测不通过需要排查、定位问题时如分析一个 API 的 99 分位建联时长原生监控指标就无法实现。聚合时效性不能保证无法支持大规模分布式的监控数据聚合监控指标不支持按时间轴回溯
综上在大规模分布式压测中不推荐使用开源压测工具的原生监控。
下面对比 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 自定义插件需要改造的点
增加指标注册中心扩展 Prometheus 指标更新器实现自定义 JMeter BackendListener在采样器执行结束后调用 Prometheus 更新器实现 HTTP Server如果有安全需要补充鉴权逻辑
PTS 压测工具
性能测试 PTSPerformance Testing Service是一款阿里云 SaaS 化的性能测试工具。PTS支持自研压测引擎同时支持开源 JMeter 压测在 PTS 上开放压测指标到 Prometheus无需开发自定义插件来改造引擎只需 3 步白屏化操作即可。
具体步骤如下
PTS 压测的高级设置中打开【Prometheus】开关压测开始后在【监控导出】一键复制 Prometheus 配置自建的 Prometheus 中粘贴并热加载此配置即可生效
详细参考《如何将 PTS 压测的指标数据输出到 Prometheus》[4]
快速搭建 Grafana 监控大盘
PTS 提供了官方 Grafana 大盘模板[5]支持一键导入监控大盘并可以灵活编辑和扩展满足您的定制监控需求。
本大盘提供了全局请求成功率系统吞吐量(TPS)99、95、90 分位响应时长以及按错误状态码聚合的错误请求数等数据。
在 API 分布专栏中可以直观的对比各 API 的监控指标快速定位性能短板 API。
在 API 详情专栏中可以查看单个 API 的详细指标准确定位性能瓶颈。
另外大盘还提供了施压机的JVM垃圾回收监控指标可以辅助判断施压机是否是压测链路中的性能瓶颈。
导入步骤如下
步骤一
在菜单栏点击 Dashboard 下的 import 步骤二
填写 PTS Dashboard 的 id15981 在 Prometheus 选择您已有的数据源本示例中数据源名为 Prometheus。选中后单击 Import 导入 步骤三
导入后在左上角【PTS 压测任务】选择需要监控的压测任务即可看到当前监控大盘。
此任务名对应 PTS 控制台在监控导出-Prometheus 配置中的 jobname。 总结
本文阐述了
什么是性能测试可观测为什么用 Prometheus 做压测性能指标监控如何使用开源 JMeter 和云上 PTS 实现基于 Prometheus 的压测监控
PTS 压测监控导出 Prometheus 功能目前免费公测中欢迎使用。
原文链接
本文为阿里云原创内容未经允许不得转载。