⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 民工哥技术之路 「民工哥技术之路」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

前面介绍了 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  
# 用于记录队列自上次事件以来处于空闲状态的时间长度。
  • 当队列中没有任何消息排队并且没有消费者连接时,该队列被认为是空闲的。
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
# 用于记录从队列中成功获取的消息总数。
  • 在 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。

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

将收集的指标加入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。

Grafana数据源

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

https://grafana.com/grafana/dashboards/10568

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

对panel面板的设置如下 :

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

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

文章目录
  1. 1. 监控指标
  2. 2. RabbitMQ 集群监控实践
    1. 2.0.1. 概述
      1. 2.0.1.1. 打开插件
    2. 2.0.2. 将收集的指标加入Prometheus
    3. 2.0.3. Grafana数据源