Prometheus 监测 RocketMQ ***实践

科技资讯 投稿 37800 0 评论

Prometheus 监测 RocketMQ ***实践

本文作者:郭雨杰,阿里云智能技术专家。

01  RocketMQ如何接入Prometheus

    Metrics:RocketMQ 以 Prometheus+Grafana 这种在开源领域广泛使用的产品组合为用户提供了开箱即用的 Dashboard。指标涵盖了消息量、堆积量、各阶段耗时等,该大盘结合 RocketMQ 团队在消息领域多年的研发和运维经验打磨的***实践模板,并提供了持续的迭代更新能力。

  1. Logging:Logging 方面主要进行了一些客户端日志的标准化处理,能够更简单方便地利用日志定位问题。

RocketMQ 团队贡献的 RocketMQ exporter 已被 Prometheus 官方的开源 Exporter 生态所收录,提供了 Broker、Producer、Consumer 各个阶段丰富的监控指标。Exporter 基本逻辑是通过在内部启动多个定时任务周期性地从 MQ 的集群上拉取数据,然后将数据规范化后通过端点暴露给Prometheus。MQAdminExt 类封装了 MQAdmin 暴露的各种接口逻辑。从结构上看,RocketMQ 的 Exporter 是站在第三方视角的观察者角色,而所有的指标来自于MQ 集群的内部。

①Exporter 部署模式的选择分为将 Prometheus client 内嵌到应用程序的直接观测模式以及应用程序之外的独立 Exporter 模式。直接观测模式具有主流语言支持、性能更优、免运维的优势,劣势为代码耦合。Exporter 模式具有解耦合、开源生态丰富的优势,最大的缺点是需要单独的运维 Exporter 组件,在云原生微服务的应用架构模式下需要部署多个 Exporter 对运维带来不小的负担。对于部署模式的选择没有优劣之分,一般建议对应用代码有掌控权限的条件下,选择直接观测模式,对应用代码无掌控权限的条件下选择 Exporter 模式。

RocketMQ 的生产环境中,需要做到对售卖租户的客户级监控。每个客户的 RocketMQ 资源都按照租户进行严格隔离。如果为每一个租户部署一套 Exporter,则会对产品的架构、运维等方面都带来非常大的挑战。因此在生产环境中,RocketMQ 选择了另一种接入 Prometheus 的方式。

全链路Tracing

  1. proxy 本身作为一个 collector 整合了客户端上报的以及自身的 tracing 数据。

  2. 针对消息的生命周期,重新设计了 span 的拓扑模型。

准确多样的Metrics

  1. 可以无缝地集成到 Prometheus 存储和 Grafana 的大盘展示。

云产品针对租户资源划分,主要分为租户独占资源模式和租户共享资源模式。租户独占资源模式具有租户单独占用部署资源,隔离性好的特点,识别指标的租户信息只需要打上租户指标即可;租户共享资源模式指租户之间会共享部署资源,识别指标的租户信息需要云产品自行添加租户信息。

ARMS Prometheus 会为每个阿里云用户创建一个 Prometheus 云服务的实例,来存储用户对应的阿里云的云产品指标,真正地解决了以往监控系统数据分散形成的数据孤岛问题,同时为每个云产品提供了深度定制、开箱即用的大盘和告警能力。

02  RocketMQ可观测***实践

首先需要理解消息堆积的指标含义。一条消息在 Producer 发送后,在消息队列中的处理以及 Consumer 消费的三个阶段分别处于 Ready、inFlight、Acked 状态。需要重点关注两个指标,已就绪消息量(Ready message)表示已就绪的消息条数,该消息量的大小反映了还未被消费的消息规模,在消费者异常的情况下,就绪消息的数据量会变多;消息排队时间(Queue time)表示最早一条就绪消息的就绪时间和当前的时间差,该时间大小反映了还未被处理消息的时间延迟情况,对于时间敏感的业务而言是一个非常重要的度量指标。

对于生产端更应该关注消息的发送健康度,可以针对发送成功率进行告警。出现告警时,需要关注 load、发送耗时、消息量等指标,判断是否有消息量的突然变化;对于消费端应该关注消费是否及时的消费健康度,可针对就绪消息的排队时间进行告警。当出现告警时,需要关联地关注消息的处理耗时、消费的成功率、消息量、load等相关指标,判断消息的消息量、消费处理的耗时的变化,并查询是否有 ERROR 日志、trace 等相关信息。

收到告警信息之后,通过查询业务拓扑、异常标注以及业务指标的变化,一键地查看关联的调用链信息,在调用链上可以获得业务处理各个阶段的处理时长、是否存在异常等相关信息。调用链的每个 span 节点可以下钻实时查询调用堆栈和耗时分占比,将问题定位到业务代码级别。如果用户接入的日志中按照 ARMS 规范关联到调用链的 traceID,还可一键关联查看对应的日志详情,最终定位问题的根因。

阿里云 ARMS 监控从上到下云涵盖了用户的终端、应用、云服务/三方组件、容器、基础设施的全方位、立体化、统一监控和统一告警能力,是企业构建一站式可观测的***实践平台。

编程笔记 » Prometheus 监测 RocketMQ ***实践

赞同 (36) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽