1 RabbitMQ监控方式

1.1 安装并配置RabbitMQ

1.1.1 安装RabbitMQ

curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
yum install rabbitmq-server -y

1.1.2 配置RabbitMQ

打开管理⻚⾯,同时启⽤Prometheus的metrics接⼝
rabbitmq-plugins enable rabbitmq_management
rabbitmq-plugins enable rabbitmq_prometheus

1.1.3、启动RabbitMQ

systemctl start rabbitmq-server

1.1.4 创建用户

rabbitmqctl add_user rabbitadmin 123456
rabbitmqctl set_user_tags rabbitadmin administrator

1.1.5 访问RabbitMQ的web⻚⾯

可以通过 http://IP:15672 

Prometheus监控之RabbitMQ_套接字

访问RabbitMQ的metrics接⼝,则需要通过http://IP:15692/metrics

Prometheus监控之RabbitMQ_描述符_02

1.2 配置Prometheus

1、编辑Prometheus配置⽂件,将Tomcat服务纳⼊监控
  - job_name: "rabbitmq"
    metrics_path: "/metrics"
    static_configs:
    - targets: ["192.168.137.131:15692"]
 
2、重新加载Prometheus配置⽂件 
curl -X POST http://192.168.137.131:9090/-/reload

1.3 RabbitMQ常⽤指标

1.3.1 rabbitmq队列相关指标

指标名称

指标类型

指标含义

rabbitmq_queue _consumers

gauge

队列上consumer消费者的数量。

rabbitmq_queue_messages

gauge

队列中所有消息的总数量,包括

rabbitmq_queue_messages_ready


gauge

队列中准备就绪,已准备好被消费者接收的消息。如果这个数值持续较⾼,可能是当前消费者跟不上消息的产⽣速度,导致消息在队列中被积压。

rabbitmq_queue _messages_unacked


gauge

队列中已被消费,但尚未被确认的消息数量。如果数值较⾼,可能表明消费者处理消息后的确认步骤存在延迟

案例1:查询过去5分钟内,队列中平均准备好待消费的消息数量。
如果这个平均数超过500,则意味着有⼤量的消息被积压,需要检查消费者consumer 
avg_over_time(rabbitmq_queue_messages_ready[5m]) > 500 

案例2:查询过去5分钟内,队列中平均已被消费但未被确认的消息数量。
如果这个平均数超过500,则意味着有⼤量的消息被接收,但未确认,需要检查消费者consumer
avg_over_time(rabbitmq_queue_messages_unacked[5m]) > 500

1.3.2 Rabbitmq其他相关指标

指标名称

指标类型

指标含义

rabbitmq_disk_space_available_bytes

gauge

RabbitMQ 可⽤的磁盘空间。


rabbitmq_disk_space_available_limit_bytes


gauge

RabbitMQ 的可⽤磁盘空间限制。 如果剩余的磁盘空间低于该值,则⽆法启动RabbitMQ服务。

可以通disk_free_limit.bytes设定最低可⽤空间的⼩⼤,默认是50MB

rabbitmq_process _open_fds

gauge

RabbitMQ 进程当前打开的⽂件描述符数量。

rabbitmq_process_max_fds



gauge

RabbitMQ 进程最⼤能打开的⽂件描述符数量。 在rabbitmq启动⽂件 [Service]下通过LimitNOFILE=N设定

rabbitmq_process_open_tcp_sockets

gauge

RabbitMQ 进程当前打开的 TCP 套接字数量。

rabbitmq_process_max_tcp_sockets

gauge

RabbitMQ 进程最⼤能打开的 TCP 套接字数量。

案例1:基于过去24⼩时磁盘可⽤空间,预测未来10天磁盘可⽤空间,是否低于 RabbitMQ 配置的磁盘空间下限。 
predict_linear(rabbitmq_disk_space_available_bytes[24h], 60*60*24*10) < rab bitmq_disk_space_available_limit_bytes

案例2:查询过去5分钟 ,⽂件描述符打开的数量最⼤值,占⽂件描述限制的⽐率。
计算公式:(打开的⽂件描述符 / ⽂件描述符⽐率 * 100 )
max_over_time(rabbitmq_process_open_fds[5m]) / rabbitmq_process_max_fds * 100 > 80

案例3:查询过去5分钟 ,TCP 套接字打开的数量最⼤值,占操作系统允许的TCP 连接数限制的⽐率。
计算公式:(打开的TCP连接数量 / 系统最⼤允许的TCP连接数量 * 100 )
max_over_time(rabbitmq_process_open_tcp_sockets[5m]) / rabbitmq_process_max_tcp_sockets * 100 > 80

1.4 RabbitMQ告警规则⽂件

1.4.1 告警规则⽂件

vim /app/module/prometheus/rules/rabbitmq_rules.yml
groups:
- name: rabbitmq告警规则
  rules:
  - alert: RabbitMQ队列已就绪的消息过多
    expr: avg_over_time(rabbitmq_queue_messages_ready[5m]) > 500
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: '{{ $labels.instance }} RabbitMQ实例的队列消息准备过多'
      description: '{{ $labels.instance }}实例中平均准备好待消费的消息数量超过500,当前平均值为{{ $value }}。'
  - alert: RabbitMQ队列中已消费但未确认的消息过多
    expr: avg_over_time(rabbitmq_queue_messages_unacked[5m]) > 500
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: '{{ $labels.instance }} RabbitMQ实例的队列消息确认存在延迟'
      description: '{{ $labels.instance }} 实例中平均已被消费但未被确认的消息数量超过500,当前平均值为{{ $value }}。'
  - alert: RabbitMQ磁盘空间预测不足
    expr: predict_linear(rabbitmq_disk_space_available_bytes[24h], 60*60*24*10) < rabbitmq_disk_space_available_limit_bytes
    for: 1h
    labels:
      severity: critical
    annotations:
      summary: '{{ $labels.instance }} RabbitMQ实例的磁盘空间预测不足。'
      description: '基于过去24小时磁盘可用空间数据预测,未来10天内磁盘的可用空间可能低于默认配置的50MB。'
  - alert: RabbitMQ⽂件描述符使用率过高
    expr: max_over_time(rabbitmq_process_open_fds[5m]) / rabbitmq_process_max_fds * 100 > 80
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: '{{ $labels.instance }} RabbitMQ实例的文件描述符使用率过高'
      description: '{{ $labels.instance }} 实例打开的文件描述符数量最大值,占文件描述限制的比率超过80%,当前比率为{{ $value }}%。'
  - alert: RabbitMQ TCP套接字使用率过高
    expr: max_over_time(rabbitmq_process_open_tcp_sockets[5m]) / rabbitmq_process_max_tcp_sockets * 100 > 80
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: '{{ $labels.instance }} RabbitMQ实例的TCP套接字使用率过高'
      description: '{{ $labels.instance }} 实例打开的TCP套接字数量最大值,占操作系统允许的TCP连接数限制的比率超过80%,当前比率为{{ $value }}%。'

1.4.2 检查rules语法

/app/module/prometheus/promtool check rules /app/module/prometheus/rules/rabbitmq_rules.yml

1.4.3 重新加载Prometheus

curl -X POST http://192.168.137.131:9090/-/reload

1.4.4 验证告警规则

Prometheus监控之RabbitMQ_套接字_03

1.5 导⼊RabbitMQ图形

导⼊RabbitMQ的Grafana模板。ID为 10991

Prometheus监控之RabbitMQ_TCP_04