RabbitMQ监控方法以及核心指标

RabbitMQ监控方法以及核心指标

  • [1. 监控指标采集](#1. 监控指标采集)
  • [2. 使用rabbimq插件采集指标](#2. 使用rabbimq插件采集指标)
    • [2.1 3.8.0之前版本,使用外部插件暴露](#2.1 3.8.0之前版本,使用外部插件暴露)
    • [2.2 3.8.0之后版本,使用内置插件暴露](#2.2 3.8.0之后版本,使用内置插件暴露)
  • [3. 使用rabbitmq_exporter采集指标](#3. 使用rabbitmq_exporter采集指标)
    • [3.1 部署rabbitmq_exporter](#3.1 部署rabbitmq_exporter)
    • [3.2 prometheus采集rabbitmq_exporter的暴露指标](#3.2 prometheus采集rabbitmq_exporter的暴露指标)
    • [3.3 promethues配置告警规则或者配置grafana大盘](#3.3 promethues配置告警规则或者配置grafana大盘)
  • [4. 核心告警指标](#4. 核心告警指标)
  • [5. 参考文章](#5. 参考文章)

探讨rabbitmq的监控数据采集方式以及需要关注的核心指标,便于日常生产进行监控和巡检。


1. 监控指标采集

rabbitmq的指标采集有2种方式

  • rabbitmq的内置或者外部下载的插件暴露指标
  • 使用第三方rabbitmq_exporter采集rabbitmq并暴露指标

2. 使用rabbimq插件采集指标

RabbitMQ内部集成Prometheus来获取指标,操作也比较简便。

  • 3.8.0之前版本,RabbitMQ可以使用单独的插件prometheus_rabbitmq_exporter来向Prometheus公开指标,要单独下载到RabbitMQ安装目录中进行安装;rabbitmq_exporter
  • 3.8.0版本后,RabbitMQ附带了内置的Prometheus&Grafana支持,虽然内置了该插件,但也要进行安装,rabbitmq-prometheus

2.1 3.8.0之前版本,使用外部插件暴露

操作如下,更详细操作方式可以参考官方文档

  1. 选择合适的版本,下载prometheus_rabbitmq_exporter 插件

  2. 将插件解压,并放到rabbitmq的安装插件目录/usr/lib/rabbitmq/lib/rabbitmq_server-{version}/plugins下,详细操作可以参考Installing Additional Plugins

  3. 启动rabbitmq

  4. rabbitmq启用插件prometheus_rabbitmq_exporter

bash 复制代码
# 启用插件
rabbitmq-plugins enable prometheus_rabbitmq_exporter

# 查看插件
rabbitmq-plugins list
  1. 查看相关指标
bash 复制代码
curl -s localhost:15692/metrics

2.2 3.8.0之后版本,使用内置插件暴露

3.8.0后,rabbitmq内置了相关的插件,因此不需要单独进行下载和配置,只需要开启即可。操作如下,更详细操作方式可以参考官方文档

  1. 启动rabbitmq
  2. rabbitmq启用插件rabbitmq_prometheus
bash 复制代码
# 启用插件
rabbitmq-plugins enable rabbitmq_prometheus

# 查看插件
rabbitmq-plugins list
  1. 查看相关指标
bash 复制代码
curl -s localhost:15692/metrics

3. 使用rabbitmq_exporter采集指标

如果不希望使用rabbit的内部插件采集监控指标,也可以使用rabbitmq_exporter采集相关的指标。该方式可以适用于所有的rabbitmq版本

3.1 部署rabbitmq_exporter

  1. rabbitmq_exporter的 下载地址 选择合适的版本下载,并解压
  2. 配置rabbitmq的账号和密码(如果使用内置的guest/guest该操作可以忽略)
bash 复制代码
# 需要创建用户名和密码: 
rabbitmqctl add_user user pass
# 需要将用户赋予管理员权限: 
rabbitmqctl set_user_tags user administrator

# 需要将用户赋予vhost权限: 
rabbitmqctl set_permissions -p / user ".*" ".*" ".*"
  1. 启动rabbitmq_exporter
bash 复制代码
cd /usr/local/rabbitmq_exporter-0.29.0.linux-amd64
RABBIT_USER=guest RABBIT_PASSWORD=guest OUTPUT_FORMAT=json PUBLIC_PORT=15692 RABBIT_URL=http://localhost:15672 ./rabbitmq_exporter
  • RABBIT_USER:rabbit用户名
  • RABBIT_PASSWORD:rabbit密码
  • RABBIT_URL:rabbit服务地址和端口
  • OUTPUT_FORMAT:输出格式
  • PUBLIC_PORT:暴露端口
  1. 确定metrics指标暴露出来后,就可以通过prometheus配置target进行指标采集
bash 复制代码
# 通过promethues协议暴露指标
curl http://localhost:15692/metrics

3.2 prometheus采集rabbitmq_exporter的暴露指标

配置prometheus的指标采集任务

bash 复制代码
  - job_name: rabbitmq
    static_configs:
      - targets: ['172.19.0.2:15692','172.19.0.3:15692','172.19.0.4:15692']
        labels:
          instance: rabbitmq

3.3 promethues配置告警规则或者配置grafana大盘

再次不进行扩展。

4. 核心告警指标

rabbitmq的指标很多,相关的指标含义可以参考 官网文档,本文将摘选出核心的指标,作为rabbitmq集群的核心监控并配置相关的告警。

yaml 复制代码
groups:
- name: RabbitMQ节点宕机
  rules:
  - alert: RabbitmqNodeDown
    expr: sum(rabbitmq_build_info) < 3
    for: 0m
    labels:
      severity: error
    annotations:
      summary: "Rabbitmq node down (instance {{ $labels.instance }})"
      description: "RabbitMQ集群中运行的节点少于3个\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"

- name: RabbitMQ节点未分发
  rules:            
  - alert: RabbitmqNodeNotDistributed
    expr: erlang_vm_dist_node_state < 3
    for: 0m
    labels:
      severity: warning
    annotations:
      summary: "Rabbitmq node not distributed (instance {{ $labels.instance }})"
      description: "RabbitMQ集群分发链接状态未启动\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"         
            
- name: RabbitMQ内存高于90%
  rules:                    
  - alert: RabbitmqMemoryHigh
    expr: rabbitmq_process_resident_memory_bytes / rabbitmq_resident_memory_limit_bytes * 100 > 90
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "Rabbitmq memory high (instance {{ $labels.instance }})"
      description: "RabbitMQ集群节点使用超过90%的已分配 RAM\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"          
            
- name: RabbitMQ未确认消息过高
  rules:    
  - alert: RabbitmqTooManyUnackMessages
    expr: sum(rabbitmq_queue_messages_unacked) BY (queue) > 1000
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "Rabbitmq too many unack messages (instance {{ $labels.instance }})"
      description: "RabbitMQ集群未确认的消息大于1000\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
              
- name: RabbitMQ节点总连接数太高
  rules:    
  - alert: RabbitmqTooManyConnections
    expr: rabbitmq_connections > 1000
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "Rabbitmq too many connections (instance {{ $labels.instance }})"
      description: "RabbitMQ集群节点的总连接数大于1000\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"               
              
- name: RabbitMQ没有队列消费者
  rules:                      
  - alert: RabbitmqNoQueueConsumer
    expr: rabbitmq_queue_consumers < 1
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "Rabbitmq no queue consumer (instance {{ $labels.instance }})"
      description: "RabbitMQ集群队列的消费者少于1个\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
    

5. 参考文章

相关推荐
回家路上绕了弯7 小时前
深入解析Agent Subagent架构:原理、协同逻辑与实战落地指南
分布式·后端
用户83071968408210 小时前
Spring Boot 集成 RabbitMQ :8 个最佳实践,杜绝消息丢失与队列阻塞
spring boot·后端·rabbitmq
用户8307196840822 天前
RabbitMQ vs RocketMQ 事务大对决:一个在“裸奔”,一个在“开挂”?
后端·rabbitmq·rocketmq
初次攀爬者3 天前
RabbitMQ的消息模式和高级特性
后端·消息队列·rabbitmq
初次攀爬者5 天前
ZooKeeper 实现分布式锁的两种方式
分布式·后端·zookeeper
让我上个超影吧6 天前
消息队列——RabbitMQ(高级)
java·rabbitmq
塔中妖7 天前
Windows 安装 RabbitMQ 详细教程(含 Erlang 环境配置)
windows·rabbitmq·erlang
予枫的编程笔记7 天前
【Kafka高级篇】避开Kafka原生重试坑,Java业务端自建DLQ体系,让消息不丢失、不积压
java·kafka·死信队列·消息中间件·消息重试·dlq·java业务开发
断手当码农7 天前
Redis 实现分布式锁的三种方式
数据库·redis·分布式
初次攀爬者7 天前
Redis分布式锁实现的三种方式-基于setnx,lua脚本和Redisson
redis·分布式·后端