RabbitMQ 可观测性最佳实践

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 ,requiredurl = "http://localhost:15672"# rabbitmq user, requiredusername = "guest"# rabbitmq password, requiredpassword = "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 verificationinsecure_skip_verify = false## Set true to enable electionelection = 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.mzph.cn/web/65748.shtml

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

相关文章

美摄科技PC端视频编辑解决方案,为企业打造专属的高效创作平台

在当今这个信息爆炸的时代&#xff0c;视频已成为不可或缺的重要内容形式&#xff0c;美摄科技推出了PC端视频编辑解决方案的私有化部署服务&#xff0c;旨在为企业提供一款量身定制的高效创作平台。 一、全面功能&#xff0c;满足企业多样化需求 美摄科技的PC端视频编辑解决…

【Oracle篇】深入了解执行计划中的访问路径(含表级别、B树索引、位图索引、簇表四大类访问路径)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;从事IT领域✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控&#xff1b;并对SQLserver、NoSQL(…

腾讯云AI代码助手编程挑战赛-厨房助手之AI大厨

腾讯云AI代码助手编程挑战赛-厨房助手之AI大厨 作品简介 身处当今如火箭般迅猛发展的互联网时代&#xff0c;智能聊天助手已然化身成为提升用户体验的关键利器&#xff0c;全方位渗透至人们的数字生活。 紧紧跟随着这股汹涌澎湃的时代浪潮&#xff0c;我毅然投身于极具挑战性…

vscode 无法使用npm, cmd命令行窗口可以正常执行

解决方法&#xff1a; 执行命令获得命令的位置 get-command npm 得到如下 然后删除或者修改 npm.ps1文件 让其不能使用就行。然后重启vscode即可。 pnpm 同理即可 另外加速源 国内镜像源&#xff08;淘宝&#xff09;&#xff1a; npm config set registry https://regist…

简易CPU设计入门:算术逻辑单元(四)

项目代码下载 请大家首先准备好本项目所用的源代码。如果已经下载了&#xff0c;那就不用重复下载了。如果还没有下载&#xff0c;那么&#xff0c;请大家点击下方链接&#xff0c;来了解下载本项目的CPU源代码的方法。 CSDN文章&#xff1a;下载本项目代码 上述链接为本项目…

Spring Boot 和微服务:快速入门指南

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…

VSCode 使用鼠标滚轮控制字体

一、 文件 | 首选项 | 设置 二、单击在 settings.json中编辑 "editor.mouseWheelZoom": true 注注注意&#xff1a;保存哦&#xff01;ctrlS 三、测试 按住ctrl鼠标滚轮&#xff0c;控制字体大小

rabbitmq的三个交换机及简单使用

提前说一下&#xff0c;创建队列&#xff0c;交换机&#xff0c;绑定交换机和队列都是在生产者。消费者只负责监听就行了&#xff0c;不用配其他的。 完成这个场景需要两个服务哦。 1直连交换机-生产者的代码。 在配置类中创建队列&#xff0c;交换机&#xff0c;绑定交换机…

代码随想录算法训练营第3天(链表1)| 203.移除链表元素 707.设计链表 206.反转链表

一、203.移除链表元素 题目&#xff1a;203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 视频&#xff1a;手把手带你学会操作链表 | LeetCode&#xff1a;203.移除链表元素_哔哩哔哩_bilibili 讲解&#xff1a;代码随想录 注意&#xff1a; 针对头结点和非头结点的…

CES Asia 2025科技盛宴,AI智能体成焦点

2025第七届亚洲消费电子技术展&#xff08;CES Asia赛逸展&#xff09;将在北京拉开帷幕&#xff0c;AI智能体有望成为展会的核心亮点。 深圳市人工智能行业协会发文表示全力支持CES Asia 2025&#xff08;赛逸展&#xff09;&#xff0c;称其为人工智能领域的创新发展提供了强…

matlab编写分段Hermite插值多项式

文章目录 原理使用分段Hermite插值多项式原因公式第一类的两个插值积函数第二类的两个插值积函数 例题法一法二 代码分段 Hermite 插值的思路&#xff1a;分段 Hermite 插值多项式的构造&#xff1a;MATLAB 实现代码&#xff1a;结果如图&#xff1a;注归一化变量的作用&#x…

Cline(原Claude Dev)开源的IDE AI插件,如何搭配OpenRouter实现cursor功能,Cline怎么使用

Cline&#xff08;原Claude Dev&#xff09;是一个开源的IDE AI插件&#xff0c;可以使用你的命令行界面和编辑器的人工智能助手。 你可以直接在VS Code编辑器进行安装。如果你使用过Cursor AI IDE的话&#xff0c;可以尝试最新发布的Cline3.1版本。 在OpenRouter上&#xff0…

计科高可用服务器架构实训(防火墙、双机热备,VRRP、MSTP、DHCP、OSPF)

一、项目介绍 需求分析&#xff1a; &#xff08;1&#xff09;总部和分部要求网络拓扑简单&#xff0c;方便维护&#xff0c;网络有扩展和冗余性&#xff1b; &#xff08;2&#xff09;总部分财务部&#xff0c;人事部&#xff0c;工程部&#xff0c;技术部&#xff0c;提供…

企业级PHP异步RabbitMQ协程版客户端 2.0 正式发布

概述 workerman/rabbitmq 是一个异步RabbitMQ客户端&#xff0c;使用AMQP协议。 RabbitMQ是一个基于AMQP&#xff08;高级消息队列协议&#xff09;实现的开源消息组件&#xff0c;它主要用于在分布式系统中存储和转发消息。RabbitMQ由高性能、高可用以及高扩展性出名的Erlan…

AsyncOperation.allowSceneActivation导致异步加载卡死

先看这段代码&#xff0c;有个诡异的问题&#xff0c;不确定是不是bug public class Test : MonoBehaviour {void Start(){StartCoroutine(LoadScene(Ego.LoadingLevel));}IEnumerator LoadScene(string sceneName){LoadingUI.UpdateProgress(0.9f);yield return new WaitForS…

C#使用MVC框架创建WebApi服务接口

第一步,使用VS2019新建MVC-Web API应用程序 创建BridgeApi 第二步,运行将生成默认的示例网页,网页Url为 https://localhost:44361/home/index 右键 项目 添加 WebAPI控制器类 添加 我们可以看到App_Start目录下 有三个文件: BundleConfig.cs代表 捆绑文件的引用 有脚本文件…

hive迁移后修复分区慢,怎么办?

我有1个30TB的分区表&#xff0c;客户给的带宽只有600MB&#xff0c;按照150%的耗时来算&#xff0c;大概要迁移17小时。 使用hive自带的修复分区命令&#xff08;一般修复分区比迁移时间长一点&#xff09;&#xff0c;可能要花24小时。于是打算用前面黄大佬的牛B方案。 Hive增…

慧集通(DataLinkX)iPaaS集成平台-业务建模之业务对象(一)

通过左侧导航菜单〖业务建模〗→〖业务对象〗&#xff0c;进入该界面&#xff1b;在该界面可以查看到系统中已存在的业务对象&#xff1b; 1.新建业务对象 在DatalinkX中进入【业务建模】的【业务对象】页面&#xff0c;点击【新建】按钮进入新建页面&#xff1b; 新建页面左侧…

Linux系统之hostname相关命令基本使用

Linux系统之hostname相关命令基本使用 一、检查本地系统版本二、hostname命令的帮助说明中文帮助说明 三、hostname命令的基本使用1. 查看计算机名2. 查看本机上所有IP地址3. 查看主机FQDN4. 查看短主机名 四、hostnamectl命令的使用1. 查看主机详细信息2. 设置主机名3. hostna…

DC系列靶场渗透--DC-3

目录 环境搭建 开始渗透 扫存活 扫端口 扫服务 查看80端口 尝试在80端口中的登陆页面寻找sql注入失败 扫目录 进入/htaccess.txt目录看一下 我们尝试找一下Joomla3.7.0版本的漏洞 我们尝试利用该漏洞 查数据库名 查表名 查列名 查数据 找到密码的可能的编码方式…