【Prometheus】RabbitMQ安装部署,如何通过prometheus监控RabbitMQ
✨✨ 欢迎大家来到景天科技苑✨✨
🎈🎈 养成好习惯,先赞后看哦~🎈🎈
🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生k8s,Prometheus监控,linux,shell脚本等实操经验,网站搭建,数据库等分享。所属的专栏:Prometheus监控系统零基础到进阶
景天的主页:景天科技苑
文章目录
- 如何通过Prometheus监控RabbitMQ
- 1、RabbitMQ简介
- 2、下载安装RabbitMQ
- 3、下载Erlang
- 4、启动RabbitMQ
- 5、配置prometheus
- 1.编辑Prometheus配置文件,将RabbitMQ服务纳入监控
- 2.重新加载Prometheus配置文件
- 3.检查Prometheus的Status->Targets页面,验证RabbitMQ是否已经成功纳入监控中
- 6、RabbitMQ常用指标
- 7、Rabbitmq其他相关指标
- 8、RabbitMQ告警规则文件
- 1.编写RabbitMQ告警规则文件
- 9、导入RabbitMQ图形
如何通过Prometheus监控RabbitMQ
1、RabbitMQ简介
RabbitMQ是一个开源的消息代理和队列服务器,它使用Erlang语言编写并运行在多种操作系统上,如Linux、Windows等。RabbitMQ可以接收、存储和转发消息(也称为“事件”)到连接的客户端。它适用于多种场景,包括异步通信、流量削峰、应用解耦等。本文详述RabbitMQ的安装部署和通过prometheus监控RabbitMQ的方法
官网:https://www.rabbitmq.com/
2、下载安装RabbitMQ
选择需要下载的版本,点击导航栏Docs按钮
进入Docs页面,点击左侧Install and Upgrade(安装和升级),展开后选择Supported Operating Systems(支持的操作系统),选择自己需要安装系统的版本,我这里选择了RedHat
打开需要下载系统的后,选择右侧的快捷按钮,Direct Downloads(直接下载),可以直接下载该版本,如何下载其他的版本,其他表格上方的github按钮
我们直接点击下载最新版本
3、下载Erlang
RabbitMQ是采用 Erlang语言开发的,所以系统环境必须提供 Erlang环境,需要是安装 Erlang
在Install and Upgrade下选择 Erlang Version Requirements(Erlang版本要求),点击 Erlang Solutions(软件包存储库)
点击这里去下载对应的版本
我们的系统是rocketlinux9.5 选这个
4、启动RabbitMQ
将刚才下载的RabbitMQ和Erlang安装包上传至服务器
执行安装:
yum localinstall erlang-27.2-1.el9.x86_64.rpm rabbitmq-server-4.0.5-1.el8.noarch.rpm -y
运行 RabbitMQ 服务器
systemctl enable rabbitmq-server.service --now
启动RabbitMQ服务和管理界面
rabbitmq-plugins enable rabbitmq_management
创建用户:通过以下命令创建一个用户: admin,密码为:Admin123456
rabbitmqctl add_user admin Admin123456
赋权,设置用户标签为administrator
rabbitmqctl set_user_tags admin administrator
重启rabbitmq-server服务
systemctl restart rabbitmq-server.service
访问http://ip:15672,并通过用户名和密码进行登陆
用户名:admin
密 码: Admin123456
进入此页面,恭喜你已经成功安装RabbitMQ。
此时的RabbitMQ是原始的,并没有metrics接口,rabbitMQ3.8版本之后自带了prometheus插件,启动后,就会开启metrics接口
rabbitmq-plugins enable rabbitmq_prometheus
重启rabbitMQ
systemctl restart rabbitmq-server.service
启动该插件之后,可以在Ports and Contexts里面看到prometheus
默认情况下,插件使用的端口是 15692
我们看下该服务开启的端口号
访问RabbitMQ的metrics接口,则需要通过 http://IP:15692/metrics
5、配置prometheus
1.编辑Prometheus配置文件,将RabbitMQ服务纳入监控
2.重新加载Prometheus配置文件
curl -X POST http://localhost:9090/-/reload
3.检查Prometheus的Status->Targets页面,验证RabbitMQ是否已经成功纳入监控中
查询语句中输入rabbitmq就可以查询相关指标
6、RabbitMQ常用指标
如果队列中准备就绪的消息数量rabbitmq_queue_messages_ready持续增大,就表示消费者可能出现问题了,消费的不够快。导致大量的消息被积压
rabbitmq_queue_messages_unacked 队列中已被消费,但尚未被确认的消息数量。如果数值较高,可能表明消费者处理消息后的确认步骤存在延迟。
案例1:查询过去5分钟内,队列中平均准备好待消费的消息数量。
如果这个平均数超过500,则意味着有大量的消息被积压,需要检查消费者consumer
gauge类型的,需要通过avg_over_time来获取最近多长时间内的平均值
avg_over_time(rabbitmq_queue_messages_ready[5m]) > 500
案例2:查询过去5分钟内,队列中平均已被消费但未被确认的消息数量。
如果这个平均数超过500,则意味着有大量的消息被接收,但未确认,需要检查消费者consumer
avg_over_time(rabbitmq_queue_messages_unacked[5m]) > 500
7、Rabbitmq其他相关指标
rabbitmq_disk_sp
ace_available_limi
t_bytes 可用磁盘空间限制,是在rabbitMQ配置文件中配置的
如果剩余的磁盘空间低于该值,则⽆法启动RabbitMQ服务。
可以通过disk_free_limit.bytes 设定最低可用空间的大小,默认是50MB
看下rabbitMQ的配置文件
配置磁盘可用空间限制
磁盘可用空间限制可使用disk_free_limit参数进行设置。默认情况,数据库分区上需要50M的空间。以下是将磁盘可用空间限制在1G:
disk_free_limit.absolute = 1000000000
或者你可以使用内存单位(KB,MB,GB等),如下:
disk_free_limit.absolute = 1GB
也可以设置为相对于机器内存的可用空间限制,以下配置为可用磁盘空间与机器内存相同:
disk_free_limit.relative = 1.0
可用磁盘空间预警限制阈值可以在RabbitMQ运行期间被修改。
使用rabbitmqctl set_disk_free_limit 命令 或者 rabbitmqctl set_disk_free_limit mem_relative 命令,这个会在服务下次重启之前一直生效。
重启,配置生效
rabbitmq_process_max_fds RabbitMQ 进程最⼤能打开的⽂件描述符数量。
在rabbitmq启动文件 [Service]下通过LimitNOFILE=N设定
我们看下默认的
修改
修改完重启服务
修改成功
案例1:基于过去24小时磁盘可用空间,预测未来10天磁盘可用空间,是否低于 RabbitMQ 配置的磁盘空间下限。
predict_linear(rabbitmq_disk_space_available_bytes[24h], 60*60*24*10) < rabbitmq_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
8、RabbitMQ告警规则文件
1.编写RabbitMQ告警规则文件
cat /etc/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 }}%。'
重新加载prometheus配置文件
curl -X POST http://localhost:9090/-/reload
查看告警规则
9、导入RabbitMQ图形
导入RabbitMQ的Grafana模板。ID为 10991
页面展示效果