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. 参考文章

相关推荐
失散1325 分钟前
分布式专题——4 大厂生产级Redis高并发分布式锁实战
java·redis·分布式·缓存·架构
eqwaak02 小时前
科技信息差(9.10)
网络·人工智能·分布式·ar·智能硬件
一个帅气昵称啊2 小时前
C#,RabbitMQ从入门到精通,.NET8.0(路由/分布式/主题/消费重复问题 /延迟队列和死信队列/消息持久化 )/RabbitMQ集群模式
分布式·微服务·架构·rabbitmq·.net
长相易乐2 小时前
RabbitMQ 教程
分布式·rabbitmq
zhysunny2 小时前
消息三剑客华山论剑:Kafka vs RabbitMQ vs RocketMQ
kafka·rabbitmq·rocketmq
月夕·花晨2 小时前
Gateway -网关
java·服务器·分布式·后端·spring cloud·微服务·gateway
失散132 小时前
分布式专题——6 Redis缓存设计与性能优化
java·redis·分布式·缓存·架构
zzhongcy5 小时前
分布式存储:RustFS与MinIO全面对比
分布式
小鸡脚来咯7 小时前
rabbitmq如何保证消息不丢失
rabbitmq
一叶飘零_sweeeet8 小时前
从手写 Redis 分布式锁到精通 Redisson:分布式系统的并发控制终极指南
redis·分布式·redisson