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 ,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 的运行性能,优化资源使用,减少数据延迟,从而改善用户的体验。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

初识 Git——《Pro Git》

Why Git&#xff1f; 1. 本地版本控制系统 Why&#xff1a; 许多人习惯用复制整个项目目录的方式来保存不同的版本&#xff0c;或许还会改名加上备份时间以示区别。 这么做唯一的好处就是简单&#xff0c;但是特别容易犯错。 有时候会混淆所在的工作目录&#xff0c;一不小心…

C语言gdb调试

目录 1.gdb介绍 2.设置断点 2.1.测试代码 2.2.设置函数断点 2.3.设置文件行号断点 2.4.设置条件断点 2.5.多线程调试 3.删除断点 3.1.删除指定断点 3.2.删除全部断点 4.查看变量信息 4.1.p命令 4.2.display命令 4.3.watch命令 5.coredump日志 6.总结 1.gdb介绍…

UML系列之Rational Rose笔记三:活动图(泳道图)

一、新建活动图&#xff08;泳道图&#xff09; 依旧在用例视图里面&#xff0c;新建一个activity diagram&#xff1b;新建好之后&#xff0c;就可以绘制活动图了&#xff1a; 正常每个活动需要一个开始&#xff0c;点击黑点&#xff0c;然后在图中某个位置安放&#xff0c;接…

【CSS】HTML页面定位CSS - position 属性 relative 、absolute、fixed 、sticky

目录 relative 相对定位 absolute 绝对定位 fixed 固定定位 sticky 粘性定位 position&#xff1a;relative 、absolute、fixed 、sticky &#xff08;四选一&#xff09; top&#xff1a;距离上面的像素 bottom&#xff1a;距离底部的像素 left&#xff1a;距离左边的像素…

HTML前端从零开始

第一天 HTML部分 什么是HTML HTML&#xff08;Hypertext Markup Language&#xff09;超文本标记语言。HTML是万维网的基石。 超&#xff1a; 超字第一层意义是指最重要的标签&#xff0c;超链接标签 超越文本的意思 HTML的发展历程 HTML1990年出现&#xff0c;web之父…

Vue2+OpenLayers调用WMTS服务初始化天地图示例(提供Gitee源码)

目录 一、案例截图 二、安装OpenLayers库 三、WMTS服务详解 四、完整代码 五、Gitee源码 一、案例截图 二、安装OpenLayers库 npm install ol 三、WMTS服务详解 WMTS&#xff08;Web Map Tile Service&#xff09;是一种标准的网络地图服务协议&#xff0c;用于提供基于…

Linux syslog 运行机制

Busybox的syslogd认识与使用 syslogd 的基本工作原理&#xff1a; syslogd 是一个系统日志守护进程&#xff0c;它接收来自各种进程和系统服务的日志消息&#xff0c;并根据配置将这些消息存储到不同的日志文件中。 syslogd日志记录器由两个守护进程&#xff08;klogd&#x…

离线录制激光雷达数据进行建图

目前有一个2D激光雷达&#xff0c;自己控制小车运行一段时间&#xff0c;离线获取到激光雷达数据后运行如下代码进行离线建图。 roslaunch cartographer_ros demo_revo_lds.launch bag_filename:/home/firefly/AutoCar/data/rplidar_s2/2025-01-08-02-08-33.bag实际效果如下 d…

SDK调用文心一言如何接入,文心一言API接入教程

一、前期准备 注册百度智能云账号&#xff1a; 前往百度智能云官网注册一个账号。这是接入文心一言API的基础。 了解API接口&#xff1a; 在百度智能云开放平台中&#xff0c;找到文心一言API的详情页&#xff0c;了解提供的API接口类型&#xff08;如云端API、移动端API、离线…

CNN张量输入形状和特征图

CNN张量输入形状和特征图 这个是比较容易理解的张量的解释&#xff0c;比较直观 卷积神经网络 在这个神经网络编程系列中&#xff0c;我们正在逐步构建一个卷积神经网络&#xff08;CNN&#xff09;&#xff0c;所以让我们看看CNN的张量输入。 ​ ​ 在最后两篇文章中&…

【Linux】4.Linux常见指令以及权限理解(2)

文章目录 3. Linux指令3.1 ls指令和rm指令补充3.2 man指令&#xff08;重要&#xff09;3.3cp指令&#xff08;重要&#xff09;输出重定向3.3.1ubuntu20.04如何安装tree 3.4 mv指令&#xff08;重要&#xff09;mv指令更改文件名mv指令更改目录名 如何看待指令指令的重命名3.5…

硬件设计-齐纳管

目录 摘要 详情 齐纳管的工作电流、 摘要 齐纳管&#xff08;Zener Diode&#xff09;是一种特殊的二极管&#xff0c;它能够在特定的反向电压下保持电流稳定。正常情况下&#xff0c;二极管只允许正向电流通过&#xff0c;而阻止反向电流流过。而齐纳管在一定的反向电压下可…

C语言进阶——1数据的存储

目录 1. 数据类型介绍1.1 类型的基本归类&#xff1a;1.1.1 整形家族1.1.2 浮点型家族1.1.3 构造类型&#xff1a;1.1.4.指针类型1.1.5 void 表示空类型&#xff08;无类型&#xff09; 2. 整形在内存中的存储2.1 原码、反码、补码2.1.1 示例 20在计算机中的存储 2.2 大小端2.2…

【论文阅读】MAMBA系列学习

Mamba code&#xff1a;state-spaces/mamba: Mamba SSM architecture paper&#xff1a;https://arxiv.org/abs/2312.00752 背景 研究问题&#xff1a;如何在保持线性时间复杂度的同时&#xff0c;提升序列建模的性能&#xff0c;特别是在处理长序列和密集数据&#xff08;如…

数据结构——查找二叉树

二叉搜索树的概念 如图所示&#xff0c;二叉搜索树&#xff08;binary search tree&#xff09;满足以下条件。 对于根节点&#xff0c;左子树中所有节点的值 < 根节点的值 < 右子树中所有节点的值。任意节点的左、右子树也是二叉搜索树&#xff0c;即同样满足条件 1. …

【并发多个请求并失败重发】

文章目录 需求思路代码 需求 可以一次发任意多个请求&#xff0c;如果有失败&#xff0c;则重发失败的请求&#xff0c;知道所有的都成功&#xff0c;或者超出最大重试次数&#xff0c;才返回最终结果。封装成可复用的并发请求工具。 实际的应用场景&#xff1a;数据太大&…

hutool糊涂工具通过注解设置excel宽度

import java.lang.annotation.*;Documented Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER}) public interface ExcelStyle {int width() default 0; }/*** 聊天记录*/ Data public class DialogContentInfo {/**…

Redis高频知识点

Redis 目录 1 Redis是AP的还是CP的&#xff1f;2 介绍一下Redis的集群方案&#xff1f;3 什么是Redis的数据分片&#xff1f;4 Redis为什么这么快&#xff1f;5 Redis 的事务机制是怎样的&#xff1f;7 Redis的持久化机制是怎样的&#xff1f;8 Redis 的过期策略是怎么样的&a…

shell程序题1.11

作业&#xff1a; shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容&#xff0c;不存在则创建一个文件将创建时间写入。 #!/bin/bash#-f 选项来判断 /tmp/size.log 文件是否是一个常规文件if [ -f "/tmp/size.log" ];thencat /tmp/size.logecho "…

Docker: 教程07 - ( 如何对 Docker 进行降级和升级)

如果我们使用 docker 来管理容器&#xff0c;那么保持 docker 引擎的更新将会是十分重要的&#xff0c;这一篇文章我们将会讨论如何对Docker 进行降级和升级。 准备工作 - docker 环境 我们需要拥有一个安装好 docker 的运行环境。 如果你需要了解如何安装 docker 可以通过如…