RabbitMQ 监控运维与常见问题

消息中间件上了生产,日常主要盯三件事:节点是否健康、队列有没有积压、告警有没有触发。本章给出常用诊断命令和一张常见问题速查表,覆盖从日常巡检到故障定位的主要场景。

节点健康检查:rabbitmq-diagnostics

RabbitMQ 自带的诊断命令能快速确认"节点起没起、有没有告警":

rabbitmq-diagnostics -q ping              # 节点是否可达
# 输出:Ping succeeded
rabbitmq-diagnostics -q check_running     # 应用是否在运行
# 输出:Status of node rabbit@myhost ... running
rabbitmq-diagnostics -q check_alarms      # 有无内存/磁盘告警
# 输出:No alarms detected
rabbitmq-diagnostics status               # 节点完整状态

发现告警或异常先看日志:/var/log/rabbitmq/ 下的 rabbit@主机名.log,重点搜 resource_alarm、memory、disk 等关键字。

监控指标从哪拿

管理台(15672)与 HTTP API 都能看到队列长度、连接数、消息速率:GET /api/overview、/api/nodes、/api/queues 返回 JSON,监控系统定期抓取即可。命令行最常用的是积压相关指标:

rabbitmqctl list_queues name messages messages_unacknowledged consumers
# 输出:q.order  1200  3  2

常见问题速查表

现象常见原因处理
生产者被阻塞、发消息超时内存/磁盘告警触发 flow controlcheck_alarms 定位,清积压、加内存、清理磁盘
日志报 Memory alarm内存水位超限(默认约为物理内存的 0.4)调到 0.6/0.8 或扩容,注意给系统留内存
日志报 Free disk alarm磁盘余量低于下限(默认约 50MB)清理日志/数据盘、扩容或调 disk_free_limit
连接频繁被关闭heartbeat 超时(默认约 60 秒)客户端配置合理 heartbeat,避免线程长时间阻塞
消息不消费、卡在 unacked消费端没 ack 或消费逻辑卡死检查 ack 路径,重启消费者触发重新投递
队列消息持续增长生产者速率高于消费者速率加消费者、调大 prefetch、优化消费耗时
guest 无法远程登录guest 账号只允许本机回环使用新建用户授权后用新用户连接
端口连不通防火墙/安全组未放行放行 5672、15672;集群内另放 25672、4369

内存/磁盘告警期间 broker 会暂停接收新消息(flow control),表现就是生产者阻塞——这是自我保护而非故障,水位恢复后自动解除。告警水位都可在 rabbitmq.conf 中调整(vm_memory_high_watermark.relative、disk_free_limit)。

创建可远程登录的管理用户:

rabbitmqctl add_user ops "Ops@123456"
rabbitmqctl set_user_tags ops administrator
rabbitmqctl set_permissions -p / ops ".*" ".*" ".*"

消费者不消费的排查顺序:先看队列的 messages/messages_unacknowledged 是否卡在 unacked(消费端没 ack 或已崩溃),再看连接与信道是否存在,最后检查 consumer 的 prefetch 是否设置异常。

定义备份与恢复

RabbitMQ 的"定义"(交换机、队列、绑定、用户、权限等)可整体导出为 JSON,消息内容本身不在定义文件中:

# 导出定义到 JSON 文件
rabbitmqadmin export /backup/rabbit-defs.json
# 在新环境或故障恢复时导入
rabbitmqadmin import /backup/rabbit-defs.json

消息级容灾要靠队列副本(镜像/仲裁队列)、双写或 shovel 复制,定义备份只是保证"配置可重建"。

小结

日常巡检三板斧:rabbitmq-diagnostics 查健康与告警、list_queues 盯积压、管理 API 出监控数据;遇到生产者阻塞先查内存/磁盘告警,消费者不动先查 unacked 与 ack 逻辑,并定期用 rabbitmqadmin export 备份定义文件。

笔记加载中…