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

Prometheus 集成

RabbitMQ 3.8+ 内置 rabbitmq_prometheus 插件,原生支持 Prometheus 格式的指标暴露。

插件启用

Bash
# 启用 Prometheus 插件
rabbitmq-plugins enable rabbitmq_prometheus

# 重启 RabbitMQ 生效
rabbitmqctl shutdown
rabbitmq-server -detached

启用后默认暴露两个端点:

端点端口说明
/metrics15692Prometheus 格式指标
/metrics/detailed15692带 vhost/队列标签的明细指标

默认端口 15692 与 Management Plugin 的 15672 独立,防火墙需放行。

Prometheus 配置

prometheus.yml 采集配置

YAML
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'rabbitmq'
    static_configs:
      - targets: ['rabbitmq-node1:15692', 'rabbitmq-node2:15692']
    metrics_path: '/metrics'
    basic_auth:
      username: 'prometheus'
      password: 'prom_secret'

详细指标采集

YAML
  - job_name: 'rabbitmq-detailed'
    metrics_path: '/metrics/detailed'
    params:
      family: ['queue_coarse_metrics', 'exchange_coarse_metrics']
    static_configs:
      - targets: ['rabbitmq-node1:15692']
    basic_auth:
      username: 'prometheus'
      password: 'prom_secret'

核心指标列表

Prometheus 暴露的关键指标(前缀 rabbitmq_):

Java
# 消息指标
rabbitmq_global_messages_total          # 总消息数
rabbitmq_global_messages_published_total # 发布总数
rabbitmq_global_messages_delivered_total # 投递总数

# 队列指标(带标签:queue, vhost, durable, auto_delete)
rabbitmq_queue_messages_ready           # 就绪消息
rabbitmq_queue_messages_unacknowledged  # 未确认消息
rabbitmq_queue_consumers                # 消费者数量

# 节点指标
rabbitmq_node_mem_used                  # 内存使用
rabbitmq_node_mem_limit                 # 内存上限
rabbitmq_node_disk_free                 # 磁盘剩余
rabbitmq_node_fd_used                   # 文件描述符使用

# 连接指标
rabbitmq_connections_total              # 连接总数
rabbitmq_channels_total                 # 通道总数

Java 客户端集成示例

XML
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.exporter.HTTPServer;

import java.io.IOException;

public class PrometheusIntegration {

    public static void main(String[] args) throws Exception {
        // 启动应用级指标暴露
        HTTPServer server = new HTTPServer(9090);

        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        factory.setPort(5672);
        factory.setUsername("guest");
        factory.setPassword("guest");

        try (Connection connection = factory.newConnection()) {
            System.out.println("Connected to RabbitMQ");
            System.out.println("App metrics: http://localhost:9090/metrics");
            System.out.println("RabbitMQ metrics: http://localhost:15692/metrics");

            // 保持运行
            Thread.currentThread().join();
        }
    }
}

Maven 依赖:

YAML
<dependencies>
    <dependency>
        <groupId>com.rabbitmq</groupId>
        <artifactId>amqp-client</artifactId>
        <version>5.20.0</version>
    </dependency>
    <dependency>
        <groupId>io.prometheus</groupId>
        <artifactId>simpleclient_httpserver</artifactId>
        <version>0.16.0</version>
    </dependency>
</dependencies>

Grafana 大盘配置

导入官方 Dashboard

RabbitMQ 官方提供预置 Dashboard:

  1. 访问 Grafana → Import Dashboard
  2. 输入 ID:10991(RabbitMQ Overview)
  3. 选择 Prometheus 数据源

核心面板配置

面板名称PromQL 表达式用途
消息发布速率rate(rabbitmq_global_messages_published_total[5m])监控生产流量
消息投递速率rate(rabbitmq_global_messages_delivered_total[5m])监控消费流量
队列深度rabbitmq_queue_messages_ready监控积压情况
内存使用率rabbitmq_node_mem_used / rabbitmq_node_mem_limit监控内存水位
磁盘剩余rabbitmq_node_disk_free监控磁盘空间

告警规则

text
groups:
  - name: rabbitmq-prometheus
    rules:
      - alert: RabbitMQDown
        expr: up{job="rabbitmq"} == 0
        for: 1m
        labels:
          severity: critical

      - alert: RabbitMQHighMemoryUsage
        expr: rabbitmq_node_mem_used / rabbitmq_node_mem_limit > 0.75
        for: 5m
        labels:
          severity: warning

      - alert: RabbitMQQueueBuildup
        expr: rate(rabbitmq_queue_messages_ready[5m]) > 100
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "队列 {{ $labels.queue }} 积压持续增长"

注意事项

  1. /metrics 端点返回全量指标,数据量大时采集耗时长,建议设置 scrape_timeout: 10s
  2. 集群多节点需分别配置 target,Prometheus 自动去重聚合
  3. 指标带 vhost 标签时需注意权限,Prometheus 用户需具备监控权限
  4. 官方 Dashboard 10991 依赖指标命名与 RabbitMQ 版本相关,升级后需验证面板可用性
  5. Prometheus 插件与 Management Plugin 可同时启用,端口独立互不影响

要点总结

  • rabbitmq_prometheus 插件启用后默认在 15692 端口暴露 /metrics 端点
  • Prometheus 采集频率建议 15s,配合官方 Grafana Dashboard 快速搭建监控
  • 核心监控面板围绕消息速率、队列深度、资源使用率三大维度
  • 告警规则需覆盖节点宕机、内存触顶、队列积压三类关键场景
  • 集群多节点分别配置 target,Prometheus 自动聚合指标

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

← 上一篇 Firehose 消息追踪
下一篇 → Tracing 插件
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

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

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