【Prometheus】RabbitMQ安装部署,如何通过prometheus监控RabbitMQ

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑

🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。

🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生k8s,Prometheus监控,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏: Prometheus监控系统零基础到进阶
景天的主页: 景天科技苑

文章目录

如何通过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安装包上传至服务器

执行安装:

bash 复制代码
yum localinstall erlang-27.2-1.el9.x86_64.rpm  rabbitmq-server-4.0.5-1.el8.noarch.rpm -y

运行 RabbitMQ 服务器

bash 复制代码
systemctl enable rabbitmq-server.service --now

启动RabbitMQ服务和管理界面

bash 复制代码
rabbitmq-plugins enable rabbitmq_management

创建用户:通过以下命令创建一个用户: admin,密码为:Admin123456

bash 复制代码
rabbitmqctl add_user admin Admin123456

赋权,设置用户标签为administrator

bash 复制代码
rabbitmqctl set_user_tags admin administrator

重启rabbitmq-server服务

bash 复制代码
systemctl restart rabbitmq-server.service

访问http://ip:15672,并通过用户名和密码进行登陆

用户名:admin

密 码: Admin123456

进入此页面,恭喜你已经成功安装RabbitMQ。

此时的RabbitMQ是原始的,并没有metrics接口,rabbitMQ3.8版本之后自带了prometheus插件,启动后,就会开启metrics接口

bash 复制代码
rabbitmq-plugins enable rabbitmq_prometheus

重启rabbitMQ

bash 复制代码
systemctl restart rabbitmq-server.service

启动该插件之后,可以在Ports and Contexts里面看到prometheus

默认情况下,插件使用的端口是 15692

我们看下该服务开启的端口号

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

5、配置prometheus

1.编辑Prometheus配置文件,将RabbitMQ服务纳入监控

2.重新加载Prometheus配置文件

bash 复制代码
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来获取最近多长时间内的平均值

bash 复制代码
avg_over_time(rabbitmq_queue_messages_ready[5m]) > 500

案例2:查询过去5分钟内,队列中平均已被消费但未被确认的消息数量。

如果这个平均数超过500,则意味着有大量的消息被接收,但未确认,需要检查消费者consumer

bash 复制代码
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 配置的磁盘空间下限。

bash 复制代码
predict_linear(rabbitmq_disk_space_available_bytes[24h], 60*60*24*10) < rabbitmq_disk_space_available_limit_bytes

先看下预测

看下限制

案例2:查询过去5分钟 ,文件描述符打开的数量最大值,占文件描述限制的比率。

计算公式:( 打开的文件描述符 / 文件描述符最大限制的比率 * 100 )

bash 复制代码
max_over_time(rabbitmq_process_open_fds[5m]) / rabbitmq_process_max_fds * 100 > 80

最大

案例3:查询过去5分钟 ,TCP 套接字打开的数量最大值,占操作系统允许的TCP 连接数限制的比率。

计算公式:( 打开的TCP连接数量 / 系统最大允许的TCP连接数量 * 100 )

bash 复制代码
max_over_time(rabbitmq_process_open_tcp_sockets[5m]) / rabbitmq_process_max_tcp_sockets * 100 > 80

8、RabbitMQ告警规则文件

1.编写RabbitMQ告警规则文件

bash 复制代码
cat /etc/prometheus/rules/rabbitmq_rules.yml
yaml 复制代码
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

页面展示效果

相关推荐
小林想被监督学习19 分钟前
RabbitMQ 仲裁队列 -- 解决 RabbitMQ 集群数据不同步的问题
linux·分布式·rabbitmq
S-X-S4 小时前
RabbitMQ模块新增消息转换器
分布式·rabbitmq
DEARM LINER13 小时前
RabbitMQ 死信队列
java·rabbitmq·java-rabbitmq
伟大的python程序员1 天前
thinkphp6+swoole使用rabbitMq队列
后端·rabbitmq·swoole
Onlooker1291 天前
RabbitMQ5-死信队列
rabbitmq
一袋米扛几楼982 天前
【运维】什么是Prometheus普罗米修斯?组件式开发
运维·prometheus
huapiaoy2 天前
RabbitMQ---面试题
java·rabbitmq·java-rabbitmq
DEARM LINER2 天前
rabbitmq 多种安装模式
分布式·rabbitmq·rabbit
一只小松许️2 天前
RabbitMQ的死信队列
分布式·rabbitmq