硬卷消息中间件系列(十六):RabbitMQ 运维监控

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 

f092e0c813044dbe5396faf5997bb033.gif

👉这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号等等功能:

  • Boot 地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • Cloud 地址:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn

来源:民工哥技术之路

e44f93b123abda085b76ef43cda10b53.jpeg


前面介绍了 RabbitMQ 流控、镜像队列、网络分区、多机集群部署、高可用集群部署、集群运维管理、Java 调用的三种方式等相关的知识点,今天我将详细的为大家介绍 RabbitMQ 监控 相关知识,希望大家能够从中收获多多!如有帮助,请点在看转发 支持一波!!!

监控指标

rabbitmq_channels  
#用于显示RabbitMQ服务器上当前打开的通道数量。

通过监控这个指标,您可以了解到RabbitMQ服务器打开的通道数随时间变化的情况,以及通道数量是否很高或者非常低。

rabbitmq_connections  
#用于显示与RabbitMQ服务器的连接总数。
  • 该指标可以帮助您跟踪RabbitMQ服务器的连接负载,并确定是否需要增加服务器资源以提高性能。

  • 通过监控这个指标,您可以了解RabbitMQ连接的使用情况,包括当前连接数、已建立连接的总数、断开的连接数等。

rabbitmq_consumers  
#用于显示当前连接到RabbitMQ服务器并消费消息的消费者的数量。
  • 通过监控rabbitmq_consumers,您可以了解当前连接到RabbitMQ服务器并消费消息的消费者数量,并可以从中获得消费者的使用情况。

  • 例如消费者的数量是否高峰期、消费者的行为是否稳定等等。

rabbitmq_exchanges  
#用于显示当前RabbitMQ服务器上的交换机数量。

rabbitmq_exporter_build_info  
#提供有关RabbitMQ Exporter版本和构建信息的详细信息。
rabbitmq_fd_available  
#指示RabbitMQ节点文件句柄的可用性,它是一个代表可用文件句柄数的整数。
  • RabbitMQ可以使用许多文件句柄,这些句柄允许它处理客户端连接,打开日志文件等等。如果在节点上没有可用的文件描述符,则可能会导致进程失败。

  • 通过监控rabbitmq_fd_available,您可以了解RabbitMQ节点文件句柄的使用情况,并在必要时增加节点的文件描述符限制以防止节点发生故障。

  • 该指标还提供有关RabbitMQ文件描述符容量使用率和可用文件描述符总数的有用信息。

rabbitmq_fd_used  
#指示当前RabbitMQ节点文件句柄的已用数。它是一个代表已用文件句柄数的整数。
rabbitmq_messages_deliver_no_ack_rate  
表示RabbitMQ服务器未确认消息交付速率。它是指在协议 AMQP 0-9-1 下,客户端订阅队列中的消息交付但未确认的速率。
  • 在RabbitMQ的消息传输中,消息交付通常分为两个步骤:投递消息和确认消息。如果客户端在接收并处理消息的过程中未能确认消息,即该消息为未确认的消息。

  • rabbitmq_messages_deliver_no_ack_rate指标可以帮助您了解未确认消息的数量和速率,并确定是否需要更改客户端消费者的配置或调整队列和交换机的配置以改善系统性能。

rabbitmq_messages_deliver_rate  
#表示RabbitMQ服务器的消息投递速率。它是指在协议 AMQP 0-9-1 下,客户端订阅队列中的投递消息的速率。
  • 在RabbitMQ的消息传输中,消息投递是指将消息从生产者传输到消费者的过程。

rabbitmq_messages_publish_rate  
#表示 RabbitMQ 服务器上每秒发布的消息数量。
  • 消息发布是指将消息发送到交换机(exchange),交换机再将消息路由到相应队列。

rabbitmq_module_scrape_duration_seconds  
#它表示RabbitMQ的各个插件在进行监控信息采集时所需的时间。

rabbitmq_module_up  
#该指标表示与 RabbitMQ 相关的插件是否处于运行状态,如果处于运行状态,则其值为1,否则为0。
rabbitmq_node_disk_free  
#是用于监控 RabbitMQ 节点磁盘空间的 Prometheus 指标之一。
  • 该指标显示了节点当前可用的磁盘空间,以字节为单位。

  • RabbitMQ 节点需要足够的可用磁盘空间来存储消息、元数据和其他系统文件,否则可能会发生故障。

rabbitmq_node_disk_free_alarm  
#rabbitmq_node_disk_free 指标自行创建的告警规则。
  • 它表示磁盘空间告警,当 RabbitMQ 节点的剩余磁盘空间低于某个预设值时,我们可以触发该告警规则。

rabbitmq_node_disk_free_limit  
#通常是指自定义的磁盘空间告警阈值,在运行 RabbitMQ 的节点上设置的最小磁盘空间阈值。
  • 一旦 RabbitMQ 节点的可用磁盘空间低于此阈值,就会触发 rabbitmq_node_disk_free_alarm 告警规则,及时通知管理员节点的磁盘空间不足。

rabbitmq_node_mem_alarm  
#是用于监控 RabbitMQ 节点内存使用率的告警规则。
  • 其作用与 rabbitmq_node_disk_free_alarm 类似,当 RabbitMQ 节点的内存使用率超过预设的阈值时,将触发告警并通知管理员。

rabbitmq_node_mem_limit  
#用于指定 RabbitMQ 节点可用内存的阈值。
  • 当节点的可用内存低于此阈值时,会触发 rabbitmq_node_mem_alarm 告警。

rabbitmq_node_mem_used  
#用于记录 RabbitMQ 节点正在使用的内存量。
  • 它可以帮助我们监测 RabbitMQ 的内存使用情况,及时发现内存泄露或者内存使用过高的情况。

rabbitmq_partitions  
#用于记录当前集群中分区的数量。
  • RabbitMQ 的分区是一种将一个完整的队列分为多个部分,存储在不同的节点上的机制。

  • RabbitMQ 的分区可以使队列更好地扩展,并提高消息的吞吐量和可靠性。

rabbitmq_queue_consumer_utilisation  
#用于记录队列消费者的利用率。队列是应用程序和消息交换之间的通道,RabbitMQ 通过队列将消息从生产者传递到消费者。
  • 队列消费者利用率指的是当前队列中消费者处理消息的比例,即已经分配到的消费者数和队列中的消息数之比。

rabbitmq_queue_consumers  
#RabbitMQ 的监控指标之一,用于记录队列当前的消费者数量。
  • 队列是一种将消息从生产者传递到消费者的通道,在收到消息后,队列将其存储在内存中,并将消息发送给一个或多个绑定到队列的消费者。

rabbitmq_queue_disk_reads_total  
#RabbitMQ 的监控指标之一,用于记录队列在磁盘上的读取次数总和。
  • 当消息在 RabbitMQ 节点上的内存存储达到一定阈值时,这些未被消费的消息将会被写入到磁盘上,以避免内存溢出。

rabbitmq_queue_disk_writes_total  
#RabbitMQ 的监控指标之一,用于记录队列在磁盘上的写入次数总和。
  • 当消息在 RabbitMQ 节点上的内存存储达到一定阈值时,这些未被消费的消息将会被写入到磁盘上,以避免存储空间不足。

rabbitmq_queue_gc_collections_before_fullsweep  
#用于记录队列在进行完整扫描之前进行垃圾回收的次数。
  • 每次垃圾回收都会删除队列中已经被消费的消息,以避免消息队列过大影响性能。

rabbitmq_queue_gc_min_heap  
#用于记录队列进行一次垃圾回收所需的最小堆大小。
  • 垃圾回收是一项重要的操作,它会删除已经被消费的消息以释放队列的存储空间。

rabbitmq_queue_gc_min_vheap  
#用于记录队列进行一次垃圾回收所需的最小虚拟堆大小。
  • 垃圾回收是一项重要的操作,它会删除已经被消费的消息以释放队列的存储空间。

rabbitmq_queue_gc_minor_collections_total  
#用于记录队列进行小型垃圾回收的次数。
  • 垃圾回收是一项重要的操作,它会删除已经被消费的消息以释放队列的存储空间。

  • 如果小型垃圾回收的频率过高,可能需要优化消息的过期时间和队列的存储空间,以减少消息的过期和垃圾回收的频率。

rabbitmq_queue_idle_since_seconds  

> 基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
>
> * 项目地址:<https://github.com/YunaiV/ruoyi-vue-pro>
> * 视频教程:<https://doc.iocoder.cn/video/>

# 用于记录队列自上次事件以来处于空闲状态的时间长度。
  • 当队列中没有任何消息排队并且没有消费者连接时,该队列被认为是空闲的。

rabbitmq_queue_memory  
#用于记录队列当前使用的内存大小。
  • 当队列接收到消息时,这些消息将被放入堆内存中,直到它们被消费者读取并确认为止。

rabbitmq_queue_message_bytes  
#用于记录队列中所有消息占用的总字节数。
  • 我们可以了解消息在队列中占用的总空间大小,以便评估系统资源的利用情况。

rabbitmq_queue_message_bytes_persistent  
#用于记录队列中持久消息(即需要持久化保存的消息)占用的总字节数。

rabbitmq_queue_message_bytes_ram  
#用于记录队列中非持久化消息(即不需要持久化保存的消息)占用的总字节数。

rabbitmq_queue_message_bytes_ready  
#用于记录队列中等待传输的消息(即就绪消息)占用的总字节数。

rabbitmq_queue_message_bytes_unacknowledged  
#用于记录当前未被消费者确认的消息占用的总字节数。

rabbitmq_queue_messages  
#用于记录当前队列中的所有消息数量,包括持久化和非持久化消息,即已经进入队列但还没有被消费者消费的消息数量。

rabbitmq_queue_messages_ack_total  
#用于记录消费者确认的消息总数,包括成功确认和失败确认的消息数。

rabbitmq_queue_messages_confirmed_total  
#用于记录消费者成功确认的消息总数,即消费者正确处理并发送确认信息的消息数量。

rabbitmq_queue_messages_deliver_no_ack_rate  
#用于监测队列中的消息未被开始确认处理的速率,即消费者收到但没有发送确认信息的消息数量和总交付的消息数量之比。

rabbitmq_queue_messages_deliver_rate  
#用于记录队列的消息交付速率,即每秒钟成功通过队列传输的消息数量。

rabbitmq_queue_messages_delivered_noack_total
#用于记录队列中已经成功传递并被消费者接收但未得到确认处理的消息数量。

rabbitmq_queue_messages_delivered_total
#用于记录从队列中成功传递到消费者的消息总数。
rabbitmq_queue_messages_get_noack_total
#用于记录队列中已经成功获取但未得到确认处理的消息数量。
  • 在 RabbitMQ 中,当消费者从队列中获取消息并开始处理时,它需要向服务器发送确认信息以表示成功地消费了该信息。

  • 然而,有时消费者可能会出现无法处理消息的情况,导致消息未能得到确认。这些消息会被重新发送到队列中,并降低整个系统处理消息的效率。

rabbitmq_queue_messages_get_total

> 基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
>
> * 项目地址:<https://github.com/YunaiV/yudao-cloud>
> * 视频教程:<https://doc.iocoder.cn/video/>

# 用于记录从队列中成功获取的消息总数。
  • 在 RabbitMQ 中,当消费者从队列中获取消息并开始处理时,服务器会记录已被消费者成功获取的消息总数。

rabbitmq_queue_messages_global
#用于记录节点上所有队列的总消息数量。

rabbitmq_queue_messages_persistent
#它是用于记录队列中持久化消息数量的监控指标。

rabbitmq_queue_messages_publish_rate
#用于记录队列中每秒钟平均发布的消息数量(即发布速率)。

rabbitmq_queue_messages_published_total
#在 RabbitMQ 中,生产者可以向队列发布消息,而 rabbitmq_queue_messages_publish_rate 就是记录队列中每秒钟平均发布的消息数量指标。

rabbitmq_queue_messages_ram
#用于记录队列中非持久化消息的数量。

rabbitmq_queue_messages_ready
#指示可被消费者立即消费的消息数量。
rabbitmq_queue_messages_ready_global
#消息队列中可被消费者立即消费的消息总数。
  • 与"rabbitmq_queue_messages_ready"指标不同的是,它不是单个队列的指标,而是RabbitMQ中所有队列中未被消费的消息数量的总和。

  • 这是一个全局的聚合指标。

rabbitmq_queue_messages_ready_ram
#消息队列中存储在内存中等待消费的消息数量
rabbitmq_queue_messages_redelivered_total
#消息队列中重新投递消息的总数量
  • 当消息无法成功投递到消费者时,RabbitMQ会将消息重新投递给消费者,这可能是由于消费者出现故障或者消费者无法及时消费消息等原因导致的。

  • 当RabbitMQ重新投递这些消息时,会增加"rabbitmq_queue_messages_redelivered_total"指标的值。

rabbitmq_queue_messages_returned_total
#消息队列中被退回的消息总数量

rabbitmq_queue_messages_unacknowledged
#消息队列中已被消费者接收但尚未确认的消息数量的指标

rabbitmq_queue_messages_unacknowledged_global
#(包括所有队列)中未确认消息数量
rabbitmq_queue_messages_unacknowledged_ram
#内存中未确认消息数,它只计算RAM节点内存中的未确认消息数量。
  • 如果RAM中的未确认消息数量持续很高,可能会导致RAM节点的消耗过大,甚至会影响RabbitMQ服务器的稳定性。

rabbitmq_queue_reductions_total
#RabbitMQ队列处理的降低总数的指标。
  • 降低是指Erlang VM中执行的执行时间长的操作。RabbitMQ使用Erlang编写,因此RabbitMQ服务器中的许多操作都由Erlang VM实现。

  • 当RabbitMQ处理队列时,Erlang VM中的操作可能会变得很慢,因此需要进行降低以提高性能。

  • 该指标可用于监视队列的处理情况以及与队列处理相关的性能问题。

  • 当"rabbitmq_queue_reductions_total"指标持续增加时,可能表示RabbitMQ服务器在处理队列时出现了性能问题。

  • 为了解决这个问题,可能需要优化队列的路由、增加队列服务器的数量或调整队列的参数,例如队列大小和持久性设置等。

rabbitmq_queue_state
#队列的状态指标,其中包含了一些关于队列的元数据信息,例如队列的名称、虚拟主机名称、运行模式(磁盘或内存)、队列的持久性设置、队列中消息的数量等。

rabbitmq_queues
#该指标提供了与队列有关的一些数据点,例如队列中的消息数量、消费者数量和未确认的消息数量等。

rabbitmq_running
#RabbitMQ节点是否正在运行的指标。值为1表示RabbitMQ节点正在运行,值为0表示RabbitMQ节点已停止运行或处于非正常状态。

rabbitmq_sockets_available
#可用套接字描述符的数量指标,描述了RabbitMQ所使用的套接字描述符的总数量以及当前可用的数量。

rabbitmq_sockets_used
#已用套接字描述符数量

rabbitmq_up
#节点是否正在运行的指标之一,如果RabbitMQ节点正在运行,该指标的值将为1,否则为0。

rabbitmq_uptime
#节点已经运行的时间的指标,以秒为单位

rabbitmq_version_info
#RabbitMQ的版本信息指标,包括了RabbitMQ节点的主要版本、次要版本以及修订版本号等信息。

RabbitMQ 集群监控实践

实战 Prometheus + Grafana 监控 RabbitMQ 集群。

概述

对RabbitMQ集群进行监控指标的方法有两种:

  • 1、通过RabbitMQ内部集成的插件来获取指标。

    • 从v3.8后,RabbitMQ开始内置了rabbitmq_prometheus这个插件

  • 2、prometheus官网提供的rabbitmq_exporter来获取指标。

本文是针对第一种方法内置插件实现的。

打开插件

由于插件内置,所以也不需要进行下载。直接打开就好。

rabbitmq-plugins enable rabbitmq_prometheus

打开插件后可以在RabbitMQ默认的Web UI上可以看到暴露数据的端口默认是15692。

0fb2782a3fb0180a4cb306cf1bb420e8.png

这样我们可以通过http://yourIP:15692/metrics访问插件监听收集的指标数据:5ac9c59c65eea674a34252b502ff9cbf.png

将收集的指标加入Prometheus

既然数据已经收集到了,我们就可以把这些数据加入Prometheus中。直接编辑配置文件prometheus.yml

- job_name: 'rabbitmq_promethues'
scrape_interval: 60s
scrape_timeout: 60s
static_configs:
- targets: ['yourIP:15692','yourIP:15692']

如果正在运行Prometheus需要通过kill -9 pid关闭进程。重新启动Prometheus生效。在Prometheus的Web UI→status→Targets。

2ac7c309ced7819f0338cb4e91c6a4ef.png
Grafana数据源

之前已经在Grafana添加了Prometheus的数据源。Dashboard通过导入匹配指标,此处模版:

https://grafana.com/grafana/dashboards/10568
bcd95fd125627922ab34ab5e7055366b.png b2ab904fe5a1a07f89065e71c3b3fc79.png

导入模版后就可以对指标进行展示了。具体方法在导入的Dashboard界面选择一个panel,对其进行编辑:

2fda8d440239c021dc6127ea7fcb2b12.png

对panel面板的设置如下 :

a6d423621c3fa3983c76370fccf62711.png

类似的方法设置最后的效果类似下图:

036b825274268c3d8f0c4823dad6c702.png

以就是针对RabbitMQ监控指标以及配置监控的详细介绍。


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,长按”或“扫描”下方二维码噢

068b43f42206360846e1c71c578f0daa.png

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

d1156d0e8199741b24c3d074aa1f07a5.png

7a849ec6bae9d3265e0404338f67b049.png753f5e4f319b0bca25ee4a60b263b672.pngd3688e8be3a2ef96592742f922f3c8a8.png2f463582301aca06d818401d82460dbc.png

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RabbitMQ是一个开源的消息队列中间件,用于在应用程序之间传递消息。以下是RabbitMQ运维的一些须知: 1. 安装和配置:在开始使用RabbitMQ之前,需要先安装和配置它。确保按照官方文档正确安装并进行必要的配置,包括设置虚拟主机、用户权限等。 2. 高可用性:为了确保系统的高可用性,可以设置RabbitMQ集群。通过将多个节点组成集群,可以提高系统的可靠性和容错性。 3. 监控和管理:RabbitMQ提供了Web管理界面,可以通过浏览器访问并监控队列、交换机、连接等各种指标。在生产环境中,建议启用监控插件,并定期检查监控指标以确保系统的正常运行。 4. 安全性:保护RabbitMQ服务器免受经授权的访问是非常重要的。通过配置安全策略、使用SSL/TLS加密等措施,可以增加系统的安全性。 5. 性能调优:根据实际需求和负载情况,进行性能调优是提高RabbitMQ性能的关键。可以通过调整内存限制、优化持久化设置、增加节点等方式来提高系统的吞吐量和响应速度。 6. 备份和恢复:定期进行备份是保护数据免受丢失的重要措施。可以使用RabbitMQ提供的备份和恢复工具,或者通过复制数据目录等方式进行备份。 7. 故障处理:当出现故障时,需要及时进行排查和处理。RabbitMQ提供了日志功能,可以根据日志信息来查找和解决问题。另外,了解常见的故障类型和解决方法也是必要的。 请注意,这只是一些基本的运维须知,根据实际情况可能还会有其他方面需要考虑。在实际运维过程中,建议参考官方文档和最佳实践,以确保系统的稳定和可靠运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值