本文作者:郭雨杰,阿里云智能技术专家。
01 RocketMQ如何接入Prometheus
Logging:Logging 方面主要进行了一些客户端日志的标准化处理,能够更简单方便地利用日志定位问题。
Metrics:RocketMQ 以 Prometheus+Grafana 这种在开源领域广泛使用的产品组合为用户提供了开箱即用的 Dashboard。指标涵盖了消息量、堆积量、各阶段耗时等,该大盘结合 RocketMQ 团队在消息领域多年的研发和运维经验打磨的***实践模板,并提供了持续的迭代更新能力。
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
proxy 本身作为一个 collector 整合了客户端上报的以及自身的 tracing 数据。
针对消息的生命周期,重新设计了 span 的拓扑模型。
准确多样的Metrics
可以无缝地集成到 Prometheus 存储和 Grafana 的大盘展示。
云产品针对租户资源划分,主要分为租户独占资源模式和租户共享资源模式。租户独占资源模式具有租户单独占用部署资源,隔离性好的特点,识别指标的租户信息只需要打上租户指标即可;租户共享资源模式指租户之间会共享部署资源,识别指标的租户信息需要云产品自行添加租户信息。
ARMS Prometheus 会为每个阿里云用户创建一个 Prometheus 云服务的实例,来存储用户对应的阿里云的云产品指标,真正地解决了以往监控系统数据分散形成的数据孤岛问题,同时为每个云产品提供了深度定制、开箱即用的大盘和告警能力。
02 RocketMQ可观测***实践
首先需要理解消息堆积的指标含义。一条消息在 Producer 发送后,在消息队列中的处理以及 Consumer 消费的三个阶段分别处于 Ready、inFlight、Acked 状态。需要重点关注两个指标,已就绪消息量(Ready message)表示已就绪的消息条数,该消息量的大小反映了还未被消费的消息规模,在消费者异常的情况下,就绪消息的数据量会变多;消息排队时间(Queue time)表示最早一条就绪消息的就绪时间和当前的时间差,该时间大小反映了还未被处理消息的时间延迟情况,对于时间敏感的业务而言是一个非常重要的度量指标。
对于生产端更应该关注消息的发送健康度,可以针对发送成功率进行告警。出现告警时,需要关注 load、发送耗时、消息量等指标,判断是否有消息量的突然变化;对于消费端应该关注消费是否及时的消费健康度,可针对就绪消息的排队时间进行告警。当出现告警时,需要关联地关注消息的处理耗时、消费的成功率、消息量、load等相关指标,判断消息的消息量、消费处理的耗时的变化,并查询是否有 ERROR 日志、trace 等相关信息。
收到告警信息之后,通过查询业务拓扑、异常标注以及业务指标的变化,一键地查看关联的调用链信息,在调用链上可以获得业务处理各个阶段的处理时长、是否存在异常等相关信息。调用链的每个 span 节点可以下钻实时查询调用堆栈和耗时分占比,将问题定位到业务代码级别。如果用户接入的日志中按照 ARMS 规范关联到调用链的 traceID,还可一键关联查看对应的日志详情,最终定位问题的根因。
阿里云 ARMS 监控从上到下云涵盖了用户的终端、应用、云服务/三方组件、容器、基础设施的全方位、立体化、统一监控和统一告警能力,是企业构建一站式可观测的***实践平台。