全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-22 10 分钟 ✍️ juanwangdev

监控指标体系

RabbitMQ 提供丰富的运行时指标,构建合理的指标体系是保障消息系统稳定运行的前提。

核心指标分类

1. 消息速率指标

指标名含义单位
messages_publish_rate生产者发布速率msg/s
messages_deliver_rate消费者投递速率msg/s
messages_confirm_rate消息确认速率msg/s
messages_redeliver_rate重新投递速率msg/s

发布速率持续高于投递速率时,队列将产生积压。

Java
// 通过 HTTP API 获取消息速率
import com.rabbitmq.client.HttpFirehose;

public class MetricsExample {
    public static void main(String[] args) throws Exception {
        // 实际通过 /api/overview 或 Prometheus exporter 获取
        // 示例:GET http://localhost:15672/api/overview
        String overview = "
            {
              "queue_totals": {
                "messages": 15230,
                "messages_ready": 12000,
                "messages_unacknowledged": 3230
              },
              "message_stats": {
                "publish_details": {"rate": 1250.5},
                "deliver_details": {"rate": 1100.3},
                "ack_details": {"rate": 1080.0}
              }
            }
            ";
        System.out.println(overview);
    }
}

2. 队列深度指标

指标名含义
queue_messages队列中总消息数(含未确认)
queue_messages_ready可投递的就绪消息数
queue_messages_unacknowledged消费者已获取但未 ACK 的消息数

messages = messages_ready + messages_unacknowledged

3. 连接与通道指标

指标名含义
object_channels当前活跃通道数
object_connections当前活跃连接数
fd_used文件描述符使用量

连接数过多会导致文件描述符耗尽,触发 too many open files 错误。

4. 内存与磁盘指标

指标名含义
mem_used已用内存(字节)
mem_limit内存水位线
disk_free可用磁盘空间
disk_free_limit磁盘空间下限

达到内存水位线(默认 40% 可用内存)时触发 Flow Control,生产者将被阻塞。

告警规则配置

基础告警阈值

指标警告阈值严重阈值说明
queue_messages_ready> 10,000> 50,000队列积压告警
messages_publish_rate / messages_deliver_rate> 1.2> 2.0产销比失衡
object_connections> 500> 1000连接数过载
mem_used / mem_limit> 0.6> 0.8内存使用告警
disk_free / disk_free_limit< 2.0< 1.0磁盘空间告警(倍数)

Prometheus AlertManager 规则示例

YAML
groups:
  - name: rabbitmq.rules
    rules:
      - alert: RabbitMQQueueBuildup
        expr: rabbitmq_queue_messages_ready > 50000
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "队列积压超过 50000 条"

      - alert: RabbitMQFlowControl
        expr: rabbitmq_node_mem_used / rabbitmq_node_mem_limit > 0.8
        for: 2m
        labels:
          severity: warning
        annotations:
          summary: "RabbitMQ 触发流控,生产者被阻塞"

      - alert: RabbitMQDiskLow
        expr: rabbitmq_node_disk_free < rabbitmq_node_disk_free_limit
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "磁盘空间不足,已触达下限"

告警触发时间(for)需根据业务容忍度调整:队列积压可容忍较长时间,内存和磁盘告警应快速响应。

指标采集方式

RabbitMQ 支持三种指标采集方式:

  1. HTTP API/api/overview/api/queues 等端点,适合低频轮询
  2. Prometheus 插件rabbitmq_prometheus,暴露 /metrics 端点
  3. Management Plugin:Web UI 直接查看
Java
// 使用 HTTP API 批量获取队列指标
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Base64;

public class QueueMetricsCollector {
    private static final String API_URL = "http://localhost:15672/api/queues";
    private static final String AUTH = Base64.getEncoder()
        .encodeToString("guest:guest".getBytes());

    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(API_URL))
            .header("Authorization", "Basic " + AUTH)
            .build();

        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }
}

注意事项

  1. 指标采集频率不宜过高,建议 15s~30s 一次,避免对 Broker 造成额外压力
  2. messages_unacknowledged 突增说明消费者处理缓慢或卡死,需优先排查
  3. 内存和磁盘指标必须设置硬性告警,Flow Control 触发后恢复成本较高
  4. 产销比(publish/deliver)持续大于 1 说明消费者能力不足或存在慢查询
  5. 连接数和通道数应设置上限,通过 max_connections 参数限制

要点总结

  • 消息速率、队列深度、连接数、资源使用率是四大核心指标类别
  • 队列积压、产销比失衡、内存/磁盘触达是三类典型告警场景
  • Prometheus 插件是推荐的采集方式,配合 AlertManager 实现自动告警
  • HTTP API 适合低频采集或临时诊断场景
  • 告警阈值需结合业务容忍度与集群容量综合设定

📝 发现内容有误?点击此处直接编辑

← 上一篇 消息丢失排查
下一篇 → 插件开发框架
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库