CentOS 上监控 RabbitMQ 性能的可落地方案
一 监控体系总览
- 实时巡检与临时排障:使用 RabbitMQ 自带的 Management Web UI(端口 15672),查看节点资源、连接、队列与消息速率等。适合“此刻发生了什么”的快速定位。
- 长期趋势与容量规划:启用 rabbitmq_prometheus 插件(端口 15692),由 Prometheus 抓取并存储时序数据,配合 Grafana 做可视化与告警。
- 日志与根因分析:收集与分析 /var/log/rabbitmq/ 下的日志,关注内存/磁盘告警、连接异常、流控等事件。
- 命令行健康检查:使用 rabbitmq-diagnostics 与 rabbitmqctl 做节点/集群健康与配置核查。
- 其他可选:使用 Zabbix 模板做企业级监控集成。
二 快速上手 Prometheus Grafana 监控
三 关键指标与告警建议
- 节点资源
- 内存使用率:当 rabbitmq_node_mem_used / rabbitmq_node_mem_limit > 0.8 持续 5m 告警(Warning)。
- 磁盘空间:当 rabbitmq_node_disk_free < 2GB 持续 2m 告警(Critical)。
- 文件描述符:当 fd_used/fd_total > 0.9 告警(Warning)。
- 队列与消息
- 消息堆积:对关键队列(如 order.queue)当 rabbitmq_queue_messages_ready > 1000 持续 10m 告警(Warning)。
- 无消费者:当 rabbitmq_queue_consumers{queue=“order.queue”} == 0 持续 5m 告警(Critical)。
- 吞吐与连接
- 观察 Message Rates(publish/consume) 的突降或异常波动。
- 关注 Connections/Channels 的持续增长或异常断开(可能网络/心跳问题)。
四 命令行与日志的排查方法
- 命令行健康检查
- 节点状态:rabbitmq-diagnostics status(或指定节点:rabbitmq-diagnostics status -n )
- 集群状态:rabbitmq-diagnostics cluster_status
- 队列与连接:rabbitmqctl list_queues name messages_ready messages_unacknowledged consumers;rabbitmqctl list_connections
- 日志定位
- 日志路径:/var/log/rabbitmq/rabbit@.log 等。
- 关键事件:
- 资源告警:low memory、disk resource alarm(磁盘低于阈值会触发流控)
- 流控:flow control initiated(表示 Broker 因资源紧张暂停接收消息)
- 连接异常:connection_closed_abruptly(客户端异常断开)
- 建议接入 ELK/Loki 做集中检索与可视化。
五 生产实践与安全加固
- 启用 Management 插件(15672) 做日常巡检;创建 专用监控账号 并最小权限授权,避免使用默认 guest。
- 防火墙与安全组:仅开放必要端口(如 5672/AMQP、15672/管理、15692/指标、9090/Prometheus、3000/Grafana),并限制来源网段。
- 资源与稳定性:合理设置 vm_memory_high_watermark、磁盘空间告警阈值;对关键队列配置 死信队列(DLX) 与 TTL;必要时使用 镜像队列/仲裁队列 提升可用性。
- 高可用与扩展:多节点集群配合 HAProxy/Keepalived 做入口负载与故障切换,Exporter/Prometheus/Grafana 侧做多目标抓取与聚合展示。