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
访问RabbitMQ的metrics接⼝,则需要通过http://IP:15692/metrics
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 验证告警规则
1.5 导⼊RabbitMQ图形
导⼊RabbitMQ的Grafana模板。ID为 10991
标签:process,labels,RabbitMQ,TCP,5m,Prometheus,rabbitmq,监控 From: https://blog.51cto.com/u_13236892/11952155