RabbitMQ内存及磁盘告警

RabbitMQ内存与磁盘告警机制
本文介绍RabbitMQ如何通过内存与磁盘告警机制避免服务崩溃。当资源使用超过预设阈值时,RabbitMQ会暂时阻塞客户端连接,并停止接收消息。文中详细解释了内存与磁盘告警的触发条件及如何通过配置文件或命令行调整这些阈值。

概述

当内存使用超过配置的阈值或者磁盘剩余空间地狱配置的阈值时,RabbitMQ都会暂时阻塞(block)客户端的连接并停止接收客户端发来的消息,以此避免服务崩溃。于此同时,客户端与服务端的心跳检测也会失效,可以通过rabbitmqctl list_connections命令查看,web也可。

内存告警

默认情况下vm_memory_high_watermark的值为0.4,即内存阈值为0.4,表示当RabbitMQ使用内存的阈值设置为40%就会产生内存警告并阻塞所有生产者的链接。一旦告警被解除,一切都会恢复正常。
默认的阈值40%不是单纯的使用超过40%的内存,这仅仅只是限制了RabbitMQ的消息生产者。在最坏的情况下,Erlang的垃圾回收机制会导致两倍内存消耗,也就是80%的使用占比。

如果设置fraction为0,所有的生产者都会被停止发送消息。

可以通过配置文件来配置:

[
	{
		rabbit, 
		[
			{vm_memory_high_watermark, 0.4}
		]
	}
].

可以通过rabbitmqctl命令来配置

root@shovel01:/# rabbitmqctl set_vm_memory_high_watermark 0.4 
Setting memory threshold on rabbit@shovel01 to 0.4 ...

设置内存阈值的绝对值为1GiB

[
	{
		rabbit, 
		[
			{vm_memory_high_watermark,{absolute,1073741824}}
		]
	}
].

设置内存阈值为单位的形式

[
	{
		rabbit, 
		[
		{vm_memory_high_watermark,{absolute,"1024
### 配置 RabbitMQ 管理界面中的告警 RabbitMQ 提供了一个管理插件,允许通过 Web UI 或 HTTP API 来监控队列和节点的状态并设置告警条件。以下是关于如何在 RabbitMQ 的管理界面上配置告警的相关说明。 #### 告警机制概述 RabbitMQ 支持基于策略的告警功能,这些策略可以应用于队列长度、内存使用率或其他资源指标。当某个指标超过预定义阈值时,系统会触发告警并将通知发送到指定的目标地址(通常是电子邮件)。此功能依赖于 `rabbitmq_management` 插件以及 `rabbitmq_email_notification` 插件的支持[^1]。 #### 启用必要的插件 为了实现告警功能,需确保启用了以下两个主要插件: ```bash rabbitmq-plugins enable rabbitmq_management rabbitmq-plugins enable rabbitmq_email_notification ``` 上述命令分别用于启用管理插件和支持邮件通知的功能模块。如果未安装后者,则需要先下载对应的包文件再执行加载操作。 #### 创建告警规则 进入 RabbitMQ Management 控制台后,在 **Policies** 页面创建新的策略来定义具体的告警逻辑。例如,可以通过设定最大消息数或者磁盘空间占用比例等方式激活警告信号: - 路径导航至 `/#/policies` - 添加新 Policy 并填写名称如 "queue-length-alert" - 定义模式匹配规则 (Pattern),比如针对所有队列可设为 `"^.*$"` - 设置参数键名为 `max-length` 和其对应数值作为上限标准 - 应用范围选择 Virtual Hosts 下拉框内的目标 vhost 完成以上步骤即可让系统依据所定条件自动检测异常情况并向管理员报告。 #### 测试与验证 确认配置无误之后,尝试模拟达到预警界限的情形以检验实际效果是否符合预期。此外还可以调整 SMTP Server 参数确保电子邮箱送达正常工作。 ```python import pika connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() for i in range(50): # Assuming max length is set to less than this value. channel.basic_publish(exchange='', routing_key='test_queue', body=f'Message {i}') connection.close() ``` 该脚本片段演示了向测试队列连续投递多条消息的过程,便于观察告警行为的发生过程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Energet!c

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值