RocketMQNotes

第 22 章:监控告警

zjc 于 2026-01-22 发布

这是《RocketMQ 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 监控的目标是在用户感知前发现风险,在故障发生时快速定位层级。RocketMQ 监控至少覆盖四条线:集群健康、生产链路、消费链路和资源容量,并把它们与业务指标放在同一时间线。

22.1 监控分层

business metrics
  -> application metrics
  -> rocketmq client metrics
  -> proxy metrics
  -> broker metrics
  -> storage / network / os metrics

单看 Broker TPS 正常并不能证明业务正常;单看消费成功也不代表下游数据正确。监控要支持端到端追踪。

22.2 集群健康

核心指标:

指标 含义
broker_alive Broker 是否在线
broker_role 主从角色
broker_epoch 角色任期
nameserver_alive NameServer 健康
controller_leader Controller 是否有主
replica_sync_diff 副本差距
disk_usage_ratio 磁盘使用率
file_descriptor_count 文件句柄

告警示例:

  1. Broker 离线;
  2. 无 Controller leader;
  3. 副本数量低于预期;
  4. 副本同步差距持续扩大;
  5. 磁盘使用率超过阈值;
  6. 频繁切换角色;
  7. NameServer 路由不一致。

22.3 生产监控

客户端指标:

producer_send_total
producer_send_success_total
producer_send_failure_total
producer_send_latency_ms
producer_retry_total
producer_timeout_total
producer_thread_waiting
local_outbox_pending

重点看:

  1. 成功率;
  2. P95 / P99 延迟;
  3. 超时率;
  4. 重试率;
  5. 本地待发送事件数量;
  6. 按 Topic 和服务维度聚合;
  7. 灰度版本差异。

发送异常必须记录 Topic、messageId、业务键、SendStatus 和错误码。

22.4 消费监控

指标:

consumer_group_online
consumer_lag
consumer_lag_bytes
consumer_oldest_message_age
consumer_pull_total
consumer_consume_total
consumer_success_total
consumer_failure_total
consumer_retry_total
consumer_dead_letter_total
consumer_consume_latency_ms
consumer_thread_pool_active

关键问题判断:

问题 可能原因
消费组不在线 实例崩溃、发布失败、配置错误
lag 增长且耗时高 处理能力不足
lag 增长但耗时低 订阅、位点或队列分配问题
重试增长 下游异常或代码缺陷
死信增长 无法自动恢复消息增加
消息年龄增长 积压严重

22.5 存储监控

指标:

broker_put_tps
broker_get_tps
broker_put_latency_ms
commitlog_flush_latency_ms
dispatch_lag
commitlog_file_count
disk_read_iops
disk_write_iops
disk_io_util
disk_io_wait
page_cache_ratio

典型判断:

  1. 写延迟与磁盘 util 同升,疑似磁盘瓶颈;
  2. dispatch lag 增长,索引构建落后;
  3. 冷读导致 page cache 命中下降;
  4. 拉取延迟高但磁盘低,可能是网络或过滤开销;
  5. 文件数量异常增长,检查队列和 Topic 扩张。

22.6 Proxy 监控

如果使用 Proxy 模式:

proxy_active_connections
proxy_request_total
proxy_error_total
proxy_request_latency_ms
proxy_upstream_latency_ms
proxy_route_refresh_total
proxy_auth_failure_total
proxy_memory_usage

重点:

  1. 连接增长趋势;
  2. 请求队列;
  3. 入口延迟与上游延迟差;
  4. 路由刷新异常;
  5. 认证失败;
  6. 优雅停机时间。

22.7 告警设计

告警要区分级别:

级别 场景
P0 核心集群不可写、数据缺失、多副本不可用
P1 核心消费组长时间积压、死信快速增长
P2 副本落后、磁盘接近阈值、延迟升高
P3 非核心 Topic 异常

避免只告警数量:

bad: dead letter > 100
good: dead letter unhandled age > 30m

每条告警应包含:

  1. 集群和环境;
  2. Topic 或消费组;
  3. 影响范围;
  4. 关键指标;
  5. 处理入口;
  6. 值班手册链接。

22.8 仪表盘

推荐仪表盘:

  1. 集群总览;
  2. Broker 详情;
  3. Topic 流量;
  4. 消费组健康;
  5. 生产应用视图;
  6. 消费应用视图;
  7. 死信治理;
  8. 容量和预测;
  9. 变更与事件时间线。

每张图都应支持按环境、集群、Broker、Topic、消费组、应用版本过滤。

22.9 日志与链路

日志统一携带:

traceId
messageId
eventId
businessKey
topic
consumerGroup
queueId
offset

与消息轨迹联动:

business exception
  -> search event key
  -> view message trace
  -> locate application log
  -> inspect downstream result

本章小结

RocketMQ 监控要从业务结果反推技术链路,覆盖生产端、Broker、存储、副本、消费端、死信和 Proxy。告警要关注趋势、年龄和影响范围,而不是静态数量。端到端的业务键与消息轨迹是高效排障的关键。

思考题

  1. lag 增长但消费耗时正常,可能是什么问题?
  2. 为什么死信年龄比死信数量更有意义?
  3. 生产重试率升高为什么要与 Broker 指标一起看?
  4. dispatch lag 会造成什么误判?
  5. Proxy 延迟和 Broker 延迟如何区分?