Prometheus 集成
RabbitMQ 3.8+ 内置 rabbitmq_prometheus 插件,原生支持 Prometheus 格式的指标暴露。
插件启用
Bash
# 启用 Prometheus 插件
rabbitmq-plugins enable rabbitmq_prometheus
# 重启 RabbitMQ 生效
rabbitmqctl shutdown
rabbitmq-server -detached
启用后默认暴露两个端点:
| 端点 | 端口 | 说明 |
|---|---|---|
/metrics | 15692 | Prometheus 格式指标 |
/metrics/detailed | 15692 | 带 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:
- 访问 Grafana → Import Dashboard
- 输入 ID:
10991(RabbitMQ Overview) - 选择 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 }} 积压持续增长"
注意事项
/metrics端点返回全量指标,数据量大时采集耗时长,建议设置scrape_timeout: 10s- 集群多节点需分别配置 target,Prometheus 自动去重聚合
- 指标带 vhost 标签时需注意权限,Prometheus 用户需具备监控权限
- 官方 Dashboard
10991依赖指标命名与 RabbitMQ 版本相关,升级后需验证面板可用性- Prometheus 插件与 Management Plugin 可同时启用,端口独立互不影响
要点总结
rabbitmq_prometheus插件启用后默认在 15692 端口暴露/metrics端点- Prometheus 采集频率建议 15s,配合官方 Grafana Dashboard 快速搭建监控
- 核心监控面板围绕消息速率、队列深度、资源使用率三大维度
- 告警规则需覆盖节点宕机、内存触顶、队列积压三类关键场景
- 集群多节点分别配置 target,Prometheus 自动聚合指标
📝 发现内容有误?点击此处直接编辑