当前位置: 首页 > article >正文

【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
在这里插入图片描述

页面展示效果
在这里插入图片描述


http://www.kler.cn/a/517670.html

相关文章:

  • 基于单片机的智能小区门禁系统设计(论文+源码)
  • Linux的常用指令的用法
  • 网络模型简介:OSI七层模型与TCP/IP模型
  • opengrok_使用技巧
  • 导出地图为pdf文件
  • VMware虚拟机安装Linux系统(openKylin)
  • 【qt信号槽】
  • YOLOV11改进1-检测头篇
  • QT笔记——debug模式调试
  • [Datawheel]利用Zigent框架编写智能体-2
  • 突破极限!!!20米每秒的端到端无人机自主导航
  • 三元组抽取在实际应用中如何处理语义模糊性?
  • Android GLSurfaceView 覆盖其它控件问题 (RK平台)
  • 51单片机——定时器时钟
  • 微信小程序压缩图片
  • [目标检测] 如何快速验证pt在数据集(img, mp4)效果
  • 装饰器模式 - 装饰器模式的实现
  • Linux 消息队列的使用方法
  • 团体程序设计天梯赛-练习集——L1-016 查验身份证
  • java —— 面向对象(上)
  • [Dialog屏幕开发] 屏幕绘制(Table Control控件)
  • 为什么IDEA提示不推荐@Autowired❓️如果使用@Resource呢❓️
  • K8S中ingress详解
  • 数据结构测试题1
  • DeepSeek-R1:将强化学习用于激励大型语言模型的推理能力
  • 设计模式:春招面试的关键知识储备