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

embedded/2025/2/1 5:22:03/

在这里插入图片描述

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

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

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,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
在这里插入图片描述

prometheus_156">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]) > 500for: 5mlabels:severity: warningannotations:summary: '{{ $labels.instance }} RabbitMQ实例的队列消息准备过多'description: '{{ $labels.instance }}实例中平均准备好待消费的消息数量超过500,当前平均值为{{ $value }}。'- alert: RabbitMQ队列中已消费但未确认的消息过多expr: avg_over_time(rabbitmq_queue_messages_unacked[5m]) > 500for: 5mlabels:severity: warningannotations: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_bytesfor: 1hlabels:severity: criticalannotations:summary: '{{ $labels.instance }} RabbitMQ实例的磁盘空间预测不足。'description: '基于过去24小时磁盘可用空间数据预测,未来10天内磁盘的可用空间可能低于默认配置的50MB。'- alert: RabbitMQ文件描述符使比率过高expr: max_over_time(rabbitmq_process_open_fds[5m]) / rabbitmq_process_max_fds * 100 > 80for: 5mlabels:severity: warningannotations: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 > 80for: 5mlabels:severity: warningannotations: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.ppmy.cn/embedded/158544.html

相关文章

掌握Gradle构建脚本:Kotlin DSL配置指南与最佳实践

文章目录 Gradle构建文件核心解析构建脚本的层次结构 关键配置id()函数组名称和版本仓库配置导入依赖配置 高效开发实践指南核心开发原则调试与问题排查总结 作为现代JVM生态中最强大的构建工具之一&#xff0c;Gradle凭借其声明式语法和灵活的可扩展性深受开发者喜爱。本文将深…

JS 网页全自动翻译

JS 网页全自动翻译 v3.13 一 在当今全球化的时代&#xff0c;信息的交流跨越了地域和语言的界限。网页作为信息传播的重要载体&#xff0c;其内容的多语言需求日益增长。JS 网页全自动翻译工具凭借其便捷性和高效性&#xff0c;成为了众多开发者和网站运营者解决语言障碍的得力…

留学生scratch计算机haskell函数ocaml编程ruby语言prolog作业VB

您列出了一系列编程语言和技术&#xff0c;这些可能是您在留学期间需要学习或完成作业的内容。以下是对每个项目的简要说明和它们可能涉及的领域或用途&#xff1a; Scratch&#xff1a; Scratch是一种图形化编程语言&#xff0c;专为儿童和初学者设计&#xff0c;用于教授编程…

《程序人生》工作2年感悟

一些杂七杂八的感悟&#xff1a; 1.把事做好比什么都重要&#xff0c; 先树立量良好的形象&#xff0c;再横向发展。 2.职场就是人情世故&#xff0c;但也不要被人情世故绑架。 3.要常怀感恩的心&#xff0c;要记住帮助过你的人&#xff0c;愿意和你分享的人&#xff0c;有能力…

第20篇:Python 开发进阶:使用Django进行Web开发详解

第20篇&#xff1a;使用Django进行Web开发 内容简介 在上一篇文章中&#xff0c;我们深入探讨了Flask框架的高级功能&#xff0c;并通过构建一个博客系统展示了其实际应用。本篇文章将转向Django&#xff0c;另一个功能强大且广泛使用的Python Web框架。我们将介绍Django的核…

【Rust自学】15.5. Rc<T>:引用计数智能指针与共享所有权

喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 15.5.1. 什么是Rc<T> 所有权在大部分情况下都是清晰的。对于一个给定的值&#xff0…

aws(学习笔记第二十六课) 使用AWS Elastic Beanstalk

aws(学习笔记第二十六课) 使用aws Elastic Beanstalk 学习内容&#xff1a; AWS Elastic Beanstalk整体架构AWS Elastic Beanstalk的hands onAWS Elastic Beanstalk部署node.js程序包练习使用AWS Elastic Beanstalk的ebcli 1. AWS Elastic Beanstalk整体架构 官方的guide AWS…

【回溯+剪枝】电话号码的字母组合 括号生成

文章目录 17. 电话号码的字母组合解题思路&#xff1a;回溯 哈希表22. 括号生成解题思路&#xff1a;回溯 剪枝 17. 电话号码的字母组合 17. 电话号码的字母组合 ​ 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 …