RabbitMQ 可观测性最佳实践

news2025/1/9 23:20:00

RabbitMQ 简介

RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写,支持多种客户端。它通过使用交换机(Exchanges)、队列(Queues)和绑定(Bindings)来路由消息,提供灵活的路由功能。RabbitMQ 支持多种消息协议,包括 AMQP 等,使其能够轻松地与多种应用程序集成。

RabbitMQ 作为一款流行的消息队列中间件,其监控对于确保系统的稳定性和性能至关重要。监控能够帮助我们及时发现并解决潜在问题,避免对用户造成影响;通过监控数据,我们可以优化性能,提升系统的处理能力和响应速度;同时,监控还能揭示系统的行为趋势,辅助我们预测未来的系统需求,合理规划资源和扩容,增强系统的可伸缩性和稳定性。此外,监控还包括对 RabbitMQ 的健康检查,如 Erlang VM 的运行状态,以及对 RabbitMQ 特有的指标和操作系统指标的监控,例如套接字描述符使用量、排队消息总数、节点间通信流量率、CPU 利用率和内存使用量等。

观测云

观测云是一款专为 IT 工程师打造的全链路可观测产品,它集成了基础设施监控、应用程序性能监控和日志管理,为整个技术栈提供实时可观察性。这款产品能够帮助工程师全面了解端到端的用户体验追踪,了解应用内函数的每一次调用,以及全面监控云时代的基础设施。此外,观测云还具备快速发现系统安全风险的能力,为数字化时代提供安全保障。

前置条件

  • RabbitMQ 版本 >= 3.8.14
  • 安装 rabbitmq 以 Ubuntu 为例
sudo apt-get update
sudo apt-get install rabbitmq-server
sudo service rabbitmq-server start
  • 开启 REST API plug-ins
sudo rabbitmq-plugins enable rabbitmq_management
  • 创建 user,比如:
sudo rabbitmqctl add_user guance <SECRET>
sudo rabbitmqctl set_permissions  -p / guance "^aliveness-test$" "^amq\.default$" ".*"sudo rabbitmqctl set_user_tags guance monitoring

安装 DataKit

如果未部署 DataKit 可参考如下操作提前部署。

登录观测云控制台,点击「集成」 -「DataKit」 - 「Linux」,拷贝第 2 步中的安装命令。

在 RabbitMQ 的节点上复制该安装命令,安装 DataKit。

安装完成后,DataKit 会提示您使用 datakit monitor 来检查 DataKit 的运行状态,如下图所示:

开启 RabbitMQ 采集器

进入 DataKit 安装目录下的 /usr/local/datakit/conf.d/rabbitmq 目录,复制 rabbitmq.conf.sample 并命名为 rabbitmq.conf。示例如下:

[[inputs.rabbitmq]]
  # rabbitmq url ,required
  url = "http://localhost:15672"

  # rabbitmq user, required
  username = "guest"

  # rabbitmq password, required
  password = "guest"

  # ##(optional) collection interval, default is 30s
  # interval = "30s"

  ## Optional TLS Config
  # tls_ca = "/xxx/ca.pem"
  # tls_cert = "/xxx/cert.cer"
  # tls_key = "/xxx/key.key"
  ## Use TLS but skip chain & host verification
  insecure_skip_verify = false

  ## Set true to enable election
  election = true

  # [inputs.rabbitmq.log]
  # files = []
  # #grok pipeline script path
  # pipeline = "rabbitmq.p"

  [inputs.rabbitmq.tags]
  # some_tag = "some_value"
  # more_tag = "some_other_value"
  # ...

配置完成后重启 DataKit 即可。

# 终端执行命令
datakit service -R

指标介绍

MetricDescriptionUnit
message_ack_count客户端确认的消息数量count
message_ack_rate每秒客户端确认的消息速率percent
message_confirm_count确认的消息数量count
message_confirm_rate每秒确认的消息速率percent
message_deliver_get_count确认模式下交付给消费者的消息总数,无确认模式下交付给消费者的消息总数,确认模式下响应basic.get的消息总数,以及无确认模式下响应basic.get的消息总数count
message_deliver_get_rate确认模式下交付给消费者的消息速率,无确认模式下交付给消费者的消息速率,确认模式下响应basic.get的消息速率,以及无确认模式下响应basic.get的消息速率percent
message_publish_count发布的消息数量count
message_publish_in_count从通道发布到此概览的消息数量count
bindings_count特定队列的绑定数量count
consumer_utilization队列消费者可以接收新消息的时间比例percent
consumers消费者数量count
head_message_timestamp队列头部消息的时间戳,以毫秒显示msec
memory与队列关联的Erlang进程消耗的内存字节,包括栈、堆和内部结构B
message_ack_count队列中交付给客户端并被确认的消息数量count
message_ack_rate每秒交付给客户端并被确认的消息数量percent
message_deliver_count确认模式下交付给消费者的消息数量count
message_deliver_get_count队列中确认模式下交付给消费者的消息总数,无确认模式下交付给消费者的消息总数,确认模式下响应basic.get的消息总数,以及无确认模式下响应basic.get的消息总数count
message_deliver_get_rate队列中确认模式下交付给消费者的消息速率,无确认模式下交付给消费者的消息速率,确认模式下响应basic.get的消息速率,以及无确认模式下响应basic.get的消息速率percent
message_deliver_rate确认模式下交付给消费者的消息速率percent
message_publish_count队列中发布的消息数量count
message_publish_rate每秒发布的消息数量percent
message_redeliver_count队列中deliver_get中设置了重新交付标志的消息子集数量count
message_redeliver_rate队列中deliver_get中设置了重新交付标志的消息子集每秒数量percent
messages队列中的总消息数量count
messages_rate每秒队列中的总消息数量percent
messages_ready准备交付给客户端的消息数量count

场景视图

登录观测云控制台,点击「场景」 -「新建仪表板」,输入 “RabbitMQ”, 选择 “RabbitMQ 监控视图”,点击 “确定” 即可添加。

监控器(告警)

  • 队列消息数过高

通过实时查询队列中的消息总数来监控队列是否有堆积,如果有堆积,可能会影响到数据的延迟消费。

window("M::`rabbitmq_queue`:(last(`messages`)) BY `queue_name`", '5m')

  • 消息重传次数过多

指标 queue_totals_messages_unacknowledged_rate 描述的是 RabbitMQ 中未确认消息的数量的速率。这个指标反映了在 RabbitMQ 队列中,每秒未被消费者确认的消息数量的变化率。

在 RabbitMQ 中,消息的确认机制是非常重要的,因为它确保了消息的可靠传递。当一个消息被消费者接收后,消费者需要发送一个确认(ack)给 RabbitMQ 服务器,表明消息已经被成功处理。如果消费者在处理消息时失败或没有发送确认,那么该消息就是未确认的。

M::`rabbitmq_overview`:(avg(`queue_totals_messages_unacknowledged_rate`)) BY `host_ip`, `url`

  • 队列新增速率过高

queue_totals_messages_rate 是 RabbitMQ 中的一个监控指标,它描述的是队列中未确认消息数量的变化速率,即每秒未确认消息数量的变化率。这个指标对于了解和监控 RabbitMQ 队列的消费情况非常重要。

M::`rabbitmq_overview`:(avg(`queue_totals_messages_rate`) AS `消息速率`) BY `host_ip`

  • 不可用路由突增过高

message_return_unroutable_count_rate 描述的是每秒返回给发布者作为无法路由的消息的速率。在 RabbitMQ 中,当一个消息被发送到交换机(exchange),而该交换机无法将消息路由到任何绑定的队列时,这个消息就被认为是无法路由的。这种情况下,如果设置了备用交换机(alternate exchange),消息将被发送到备用交换机;如果没有设置备用交换机,或者备用交换机同样无法路由该消息,则消息将被返回给发布者。

M::`rabbitmq_overview`:(avg(`message_return_unroutable_count_rate`)) BY `host_ip`, `url`

总结

结合观测云的可视化监控,可以达到实时监控 RabbitMQ 的运行性能,优化资源使用,减少数据延迟,从而改善用户的体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2274047.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Github Copilot学习笔记

&#xff08;一&#xff09;Prompt Engineering 利用AI工具生成prompt设计好的prompt结构使用MarkDown语法&#xff0c;按Role, Skills, Constrains, Background, Requirements和Demo这几个维度描述需求。然后收输入提示词&#xff1a;作为 [Role], 拥有 [Skills], 严格遵守 […

单片机-定时器中断

1、相关知识 振荡周期1/12us; //振荡周期又称 S周期或时钟周期&#xff08;晶振周期或外加振荡周期&#xff09;。 状态周期1/6us; 机器周期1us; 指令周期1~4us; ①51单片机有两组定时器/计数器&#xff0c;因为既可以定时&#xff0c;又可以计数&#xff0c;故称之为定时器…

高比例压缩:Linux 中的压缩命令与技巧

文章目录 高比例压缩&#xff1a;Linux 中的压缩命令与技巧1. 压缩格式的选择2. gzip 命令示例&#xff1a;压缩文件示例&#xff1a;解压文件 3. bzip2 命令示例&#xff1a;压缩文件示例&#xff1a;解压文件 4. xz 命令示例&#xff1a;压缩文件示例&#xff1a;解压文件 5.…

【ArcGIS Pro二次开发实例教程】(1):图层的前置、后置

一、简介 此工具要实现的功能是&#xff1a;将内容框中当前选定的图层移到最顶层或最底层。 主要技术要点包括&#xff1a; 1、Config.daml文件设置&#xff08;UI设置&#xff09; 2、按钮的图片和位置设置 3、当前选定图层的获取 4、图层在内容列表中位置的获取和移动 …

Sprint Boot教程之五十:Spring Boot JpaRepository 示例

Spring Boot JpaRepository 示例 Spring Boot建立在 Spring 之上&#xff0c;包含 Spring 的所有功能。由于其快速的生产就绪环境&#xff0c;使开发人员能够直接专注于逻辑&#xff0c;而不必费力配置和设置&#xff0c;因此如今它正成为开发人员的最爱。Spring Boot 是一个基…

ESP32 IDF VScode出现头文件“无法打开 源 文件 ”,并有红色下划线警告

问题背景&#xff1a; ESP32 IDF VScode出现头文件“无法打开 源 文件 ”&#xff0c;并有红色下划线警告&#xff1a; 解决办法&#xff1a; 在工程里面的.vscode文件夹下&#xff0c;检查是否存在c_cpp_properties.json文件&#xff0c;如果没有可以手动创建添加。如图…

【Shell脚本】Docker构建Java项目,并自动停止原镜像容器,发布新版本

本文简述 经常使用docker部署SpringBoot 项目&#xff0c;因为自己的服务器小且项目简单&#xff0c;因此没有使用自动化部署。每次将jar包传到服务器后&#xff0c;需要手动构建&#xff0c;然后停止原有容器&#xff0c;并使用新的镜像启动&#xff0c;介于AI时代越来越懒的…

关于ssh-server在windows系统中进行部署及通过mobaxterm中ssh隧道技术实现不同网段之间进行网络通讯的问题

问题1.windows系统部署ssh-server 在安装部署过程中参考先行者就可实现部署。我使用的作者百度云安装包。 记录一下操作步骤&#xff1a; 1.在搜索中打开power shell命令行&#xff0c;将文件夹复制到C:\Program Files&#xff0c;切换到OpenSSH-Win64&#xff0c;执行如下安装…

写了个小工具,绿色/C#/Url/Base64/Encode/Decode

写这个小工具的动机是什么呢&#xff1f; 虽然很多在线工具也非常地方便&#xff0c;但经常在抓包的时候需要操作相关的转码工作&#xff0c;但你开着抓包工具访问网页有时候又非常地不方便。这时候就想到如果有一款本地的工具软件&#xff0c;就非常地耐斯。 这种工具也不是…

【优选算法】Binary-Blade:二分查找的算法刃(下)

文章目录 1.山脉数组的峰顶索引2.寻找峰值3.寻找旋转排序数组中的最小值4.点名希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力&#xff01; 本篇接上一篇二分查找&#xff0c;主要通过部分题目熟悉二分查找的进阶使用&#xff0c;重点强调二段性&#xff0c;…

【Ubuntu22.04】VMware虚拟机硬盘扩容

1.首先打开虚拟机设置 2.根据需要对硬盘扩展 这边提示我们还需要进入虚拟机在内部分区 3.安装界面化磁盘管理工具 # 安装 sudo apt install gparted# 启动 sudo gparted调整硬盘大小 调整的时候会提示我们硬盘是只读的&#xff0c;因此还要进行操作 新建终端重新挂载文件系…

无网络时自动切换备用网络环境

目录 背景目标为什么需要做自动网络切换网络切换手段 网络环境实现思路和代码部署脚本开机自动执行附录连接两个网络时的路由问题 背景 目标 学校实验室有两个网络环境&#xff0c;我电脑使用网线连接稳定但低速的网络A&#xff0c;使用WiFi连接高速但不稳定的网络B。因此&am…

设计模式 行为型 策略模式(Strategy Pattern)与 常见技术框架应用 解析

策略模式&#xff08;Strategy Pattern&#xff09;核心思想是将算法的实现从使用该算法的类中分离出来&#xff0c;作为独立的对象&#xff0c;通过接口来定义算法家族&#xff0c;这样就可以很容易地改变或扩展算法。通过这种方式&#xff0c;可以避免在客户端代码中使用大量…

Unity 热更新基础知识

文章目录 1.一些名词2.三种编译方式3.Unity 两种脚本后端3.1 Mono3.2 IL2CPP3.3 对比 1.一些名词 IL&#xff08;Intermediate Language&#xff09;&#xff1a;中间语言&#xff08;类似于汇编代码&#xff09;CIL&#xff08;Common Intermediate Language&#xff09;&…

C++感受15-Hello STL 泛型启蒙

生鱼片和STL的关系&#xff0c;你听过吗&#xff1f;泛型编程和面向对象编程&#xff0c;它们打架吗&#xff1f;行为泛型和数据泛型&#xff0c;各自的目的是&#xff1f; 0 楔 俄罗斯生鱼片&#xff0c;号称俄罗斯版的中国烤鸭&#xff0c;闻名于世。其鱼肉&#xff0c;源于…

LabVIEW轴承性能测试系统

本文介绍了基于LabVIEW的高效轴承性能测试系统的设计与开发。系统通过双端驱动技术实现高精度同步控制&#xff0c;针对轴承性能进行全面的测试与分析&#xff0c;以提高轴承的可靠性和寿命。 项目背景 随着工业自动化程度的提高&#xff0c;对轴承的性能要求越来越高。传统的…

(k8s)Flannel Error问题解决!

1.问题描述 书接上回&#xff0c;我们在解决kubectl不断重启的时候引入了Flannel 网络插件&#xff0c;但是一上来就报错&#xff0c; 2.问题解决 自己的思路&#xff1a;照例开始检查 1.先检查一下目前Flannel的pod kubectl get pods --all-namespaces 2.检查 Flannel的po…

CatLog的使用

一 CatLog的简介 1.1 作用 CAT&#xff08;Central Application Tracking&#xff09; 是基于 Java 开发的实时应用监控平台&#xff0c;为美团点评提供了全面的实时监控告警服务。 1.2 组成部分 1.2.1 Transaction 1.Transaction 适合记录跨越系统边界的程序访问行为&a…

深入Android架构(从线程到AIDL)_18 SurfaceView的UI多线程02

目录 2、 使用SurfaceView画2D图 范例一 设计GameLoop(把小线程移出来) 范例二 2、 使用SurfaceView画2D图 范例一 以SurfaceView绘出Bitmap图像设计SpriteView类别来实作SurfaceHolder.Callback接口首先来看个简单的程序&#xff0c;显示出一个Bitmap图像。这个图像就构…

【FlutterDart】 拖动边界线改变列宽类似 vscode 那种拖动改变编辑框窗口大小(11 /100)

【Flutter&Dart】 拖动改变 widget 的窗口尺寸大小GestureDetector&#xff5e;简单实现&#xff08;10 /100&#xff09; 【Flutter&Dart】 拖动边界线改变列宽并且有边界高亮和鼠标效果&#xff08;12 /100&#xff09; 上效果&#xff1a; 这个在知乎里找到的效果&…