Apache RocketMQ监控告警工具:Prometheus Alertmanager
1. 为什么需要监控告警系统
在分布式系统中,消息中间件作为关键基础设施,其稳定性直接影响业务连续性。RocketMQ集群在高并发场景下可能面临以下问题:
- 消息堆积导致磁盘空间耗尽
- Broker节点宕机未及时发现
- 网络分区引发的消息丢失风险
- 消费者消费能力不足导致延迟递增
传统监控方式存在响应滞后、告警规则混乱等问题。Prometheus结合Alertmanager的解决方案,通过时序数据采集和智能告警,可实现RocketMQ集群全链路监控。
2. 技术架构与组件
2.1 整体架构
2.2 核心组件说明
| 组件 | 作用 | 关键特性 |
|---|---|---|
| RocketMQ Exporter | 指标采集工具 | 暴露JVM、消息吞吐量、消费者状态等指标 |
| Prometheus | 时序数据库 | 支持PromQL查询、多维度指标聚合 |
| Alertmanager | 告警管理器 | 支持告警分组、抑制、静默和路由 |
| Grafana | 可视化平台 | 提供丰富仪表盘模板和查询编辑器 |
3. 部署与配置
3.1 环境准备
系统要求
- JDK 1.8+
- Prometheus 2.20+
- Alertmanager 0.21+
- Grafana 7.0+
网络要求
- 开放9876(Namesrv)、10911(Broker)、5557(Exporter)端口
3.2 RocketMQ Exporter部署
# 克隆源码
git clone https://gitcode.com/gh_mirrors/ro/rocketmq-exporter.git
cd rocketmq-exporter
# 编译打包
mvn clean package -DskipTests
# 启动Exporter
nohup java -jar target/rocketmq-exporter-0.0.2-SNAPSHOT.jar \
--rocketmq.config.namesrvAddr=192.168.1.100:9876,192.168.1.101:9876 \
--server.port=5557 &
3.3 Prometheus配置
创建prometheus.yml配置文件:
global:
scrape_interval: 15s # 抓取间隔
evaluation_interval: 15s # 规则评估间隔
scrape_configs:
- job_name: 'rocketmq'
static_configs:
- targets: ['192.168.1.102:5557'] # Exporter地址
rule_files:
- "alert_rules.yml" # 告警规则文件
3.4 关键监控指标
| 指标名称 | 类型 | 描述 | 告警阈值建议 |
|---|---|---|---|
| rocketmq_broker_tps | Counter | 消息吞吐量(条/秒) | 低于基线30%持续5分钟 |
| rocketmq_consumer_offset_lag | Gauge | 消费堆积量 | >10000持续3分钟 |
| rocketmq_producer_send_failed_total | Counter | 消息发送失败数 | 5分钟内>10次 |
| rocketmq_broker_disk_usage | Gauge | 磁盘使用率 | >85% |
| rocketmq_namesrv_connection_count | Gauge | Namesrv连接数 | 异常波动>50% |
4. 告警规则配置
4.1 基础告警规则
创建alert_rules.yml:
groups:
- name: rocketmq_alerts
rules:
# 消息发送失败告警
- alert: HighSendFailureRate
expr: sum(rate(rocketmq_producer_send_failed_total[5m])) / sum(rate(rocketmq_producer_send_total[5m])) > 0.01
for: 2m
labels:
severity: critical
annotations:
summary: "高消息发送失败率"
description: "发送失败率{{ $value | humanizePercentage }},超过阈值1%"
value: "{{ $value | humanizePercentage }}"
# 消费堆积告警
- alert: ConsumerLagGrowing
expr: increase(rocketmq_consumer_offset_lag[10m]) > 0 and rocketmq_consumer_offset_lag > 5000
for: 5m
labels:
severity: warning
annotations:
summary: "消费者堆积增长"
description: "{{ $labels.consumer_group }}在{{ $labels.topic }}上堆积{{ $value }}条消息"
4.2 告警抑制与分组
Alertmanager配置(alertmanager.yml):
route:
group_by: ['alertname', 'cluster', 'topic']
group_wait: 10s
group_interval: 10s
repeat_interval: 4h
receiver: 'wechat'
routes:
- match:
severity: critical
receiver: 'sms'
continue: true
receivers:
- name: 'wechat'
webhook_configs:
- url: 'http://wechat-webhook:8080/send'
- name: 'sms'
email_configs:
- to: 'admin@example.com'
send_resolved: true
5. 实用监控仪表盘
5.1 关键指标仪表盘
5.2 常用PromQL查询
1. 按主题的消息增长率
sum by(topic) (rate(rocketmq_producer_send_total[5m]))
2. 消费者处理延迟Top5
topk(5, rocketmq_consumer_offset_lag) by (consumer_group, topic)
3. Broker磁盘空间预测
predict_linear(rocketmq_broker_disk_available[1h], 3600*24) < 1024 # 预测24小时后可用空间<1GB
6. 最佳实践与优化
6.1 监控指标优化
-
指标过滤:排除测试环境和低优先级队列
# Prometheus抓取配置 metric_relabel_configs: - source_labels: [topic] regex: "test.*" action: drop -
采样频率调整:非核心指标降低采集频率
scrape_configs: - job_name: 'rocketmq-light' scrape_interval: 60s static_configs: - targets: ['192.168.1.102:5557']
6.2 告警策略优化
-
多级告警:按严重性分级
- P0:集群不可用(短信+电话)
- P1:核心业务异常(短信+企业微信)
- P2:非核心指标异常(企业微信)
-
时间窗口调整:根据业务特性调整
for参数- 支付相关:
for: 1m(快速响应) - 日志同步:
for: 15m(容忍短期延迟)
- 支付相关:
7. 常见问题排查
7.1 指标缺失问题
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| Exporter无数据输出 | 网络连通性问题 | 检查防火墙规则,使用telnet测试端口 |
| 部分Broker指标缺失 | JMX端口未开放 | 添加JVM参数-Dcom.sun.management.jmxremote.port=1099 |
| 消费者指标为空 | 消费组未活跃 | 确认消费者进程状态和订阅关系 |
7.2 告警风暴处理
当集群发生大面积故障时,可临时启用静默规则:
# 在Alertmanager中添加
inhibit_rules:
- source_match:
alertname: BrokerDown
severity: critical
target_match_re:
severity: (warning|info)
equal: ['cluster', 'broker']
8. 高级特性与未来趋势
8.1 分布式追踪集成
通过OpenTelemetry将RocketMQ指标与分布式追踪结合:
// 生产者端埋点示例
Meter meter = GlobalOpenTelemetry.getMeter("rocketmq-producer");
LongHistogram sendLatency = meter.histogramBuilder("rocketmq.send.latency")
.setDescription("消息发送延迟")
.setUnit("ms")
.build();
// 发送消息时记录延迟
long start = System.currentTimeMillis();
producer.send(message);
sendLatency.record(System.currentTimeMillis() - start);
8.2 AI辅助监控
基于机器学习的异常检测:
- 使用Prometheus的
prometheus-adapter暴露预测指标 - 训练LSTM模型预测消息吞吐量异常
- 实现动态阈值告警
9. 总结
Prometheus与Alertmanager为RocketMQ提供了企业级监控解决方案,通过本文档的配置,可实现:
- 7×24小时无死角监控覆盖
- 多维度指标分析与可视化
- 智能告警减少90%无效通知
- 性能瓶颈提前预警
建议定期审查告警规则有效性,结合业务发展持续优化监控策略,构建RocketMQ高可用保障体系。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



