如何监控 RabbitMQ 队列长度实现自动告警

文章导读
监控 RabbitMQ 队列长度最稳妥的方式是开启官方管理插件,配合 Prometheus 或 Zabbix 等外部监控系统采集指标,而不是依赖临时脚本轮询。
📋 目录
  1. 前置安全配置
  2. 开启必要插件
  3. Prometheus 采集配置
  4. 告警规则与通知配置
  5. 怎么验证是否生效
  6. 常见坑
A A

监控 RabbitMQ 队列长度最稳妥的方式是开启官方管理插件,配合 Prometheus 或 Zabbix 等外部监控系统采集指标,而不是依赖临时脚本轮询。

先说结论:生产环境建议采用插件暴露指标 + 外部监控告警的方案,避免单点脚本失效。

  • 适合:需要长期稳定监控、对接现有监控体系的生产环境
  • 先准备:确认 RabbitMQ 版本及管理插件权限,规划告警阈值
  • 验收:手动制造堆积消息,确认告警通道能收到通知

前置安全配置

严禁在生产环境使用默认的 guest 账号进行监控采集。需要创建专用的监控账号并赋予最小权限,避免凭证泄露导致集群风险。

rabbitmqctl add_user monitor_user YourStrongPassword
rabbitmqctl set_tags monitor_user monitoring
rabbitmqctl set_permissions -p / monitor_user ".*" ".*" ".*"

后续所有 API 调用均使用该账号凭证:

如何监控 RabbitMQ 队列长度实现自动告警
curl -u monitor_user:YourStrongPassword http://localhost:15672/api/queues

开启必要插件

1. 开启管理插件
确保服务器安装了管理插件,这是获取数据的基础。

rabbitmq-plugins enable rabbitmq_management

2. 开启 Prometheus 插件
推荐使用官方支持的 Prometheus 插件,比轮询 HTTP API 更高效且对集群压力更小。

rabbitmq-plugins enable rabbitmq_prometheus

Prometheus 采集配置

在 Prometheus 配置文件 prometheus.yml 中添加 RabbitMQ 任务节点。默认 Prometheus 插件暴露指标端口为 15692,与管理插件 HTTP API 端口(15672)不同。

scrape_configs:
  - job_name: 'rabbitmq'
    static_configs:
      - targets: ['192.168.1.100:15692']
    metrics_path: /metrics
    scheme: http

告警规则与通知配置

1. 配置告警规则
创建 rules.yml 文件,重点关注 ready 消息数。以下示例为队列消息超过 1000 条持续 1 分钟触发告警。

如何监控 RabbitMQ 队列长度实现自动告警
groups:
  - name: rabbitmq_alerts
    rules:
      - alert: RabbitMQQueueHighLatency
        expr: rabbitmq_queue_messages_ready > 1000
        for: 1m
        labels:
          severity: warning
        annotations:
          summary: "RabbitMQ 队列堆积告警"
          description: "队列 {{ $labels.queue }} 当前堆积消息 {{ $value }} 条"

2. 配置通知渠道
在 Alertmanager 中配置 webhook,对接钉钉或企业微信。以下为通用 webhook 配置示例,需配合中间件服务转换消息格式:

receivers:
  - name: 'webhook'
    webhook_configs:
      - url: 'http://alertmanager-webhook:5001/'
        send_resolved: true

怎么验证是否生效

1. 向目标队列发送大量消息但停止消费者。
2. 观察 Prometheus Targets 页面确认 RabbitMQ 状态为 UP。
3. 查看 Grafana 面板上的队列长度曲线是否上升。
4. 确认 Alertmanager 触发告警并收到钉钉/企业微信通知。

常见坑

1. 指标混淆:messages_ready 代表待消费,messages_unacknowledged 代表消费中未确认,告警通常针对 ready 数量。

如何监控 RabbitMQ 队列长度实现自动告警

2. 权限问题:监控账号需要至少 monitoring 标签权限,否则无法读取数据。

3. 频繁告警:阈值设置过低会导致风暴,建议结合持续时间(如持续 1 分钟超过阈值)。

4. 端口混淆:管理插件 HTTP API 端口通常为 15672,而 Prometheus 插件指标暴露端口通常为 15692,配置采集时需注意区分。