我有一个拥有数千个队列的RabbitMQ服务器。其中只有大约5个是持久队列。每隔一段时间就有一个队列的备份,它将在就绪状态下有大约5-10条消息。这些消息似乎不在持久队列中。我想找出哪些队列的消息处于就绪状态,但唯一的指示是它发生在Web管理控制台的概述页面上,该页面适用于所有队列。
有没有办法查询Rabbit告诉我处于就绪状态的消息的统计信息,持续一段时间以及它们在哪个队列?
答案 0 :(得分:1)
我会使用HTTP API。
http://rabbit-broker:15672/api/queues
这将为您提供JSON中当前队列状态的列表,因此您必须继续轮询它。为要监视的时间段存储给定队列“名称”的“messages_ready”。现在,您将能够看到哪些队列有积压峰值。
您可以使用简单的curl以及您喜欢的任何平台使用HTTP客户端。
请注意:您要连接的用户必须拥有监控标签才能访问所有队列信息。
开箱即用AFAIK没有简单的方法,您必须手动点击队列并在UI中查看最后一小时的图表,这很乏味。
答案 1 :(得分:0)
我有类似的要求,我发现了一种比轮询更好的方法。 docs说,如果您在请求中使用特殊参数,则可以通过api获取原始样本。
例如,如果您对处于就绪状态的消息感兴趣,则可以向队列询问队列长度的历史记录,例如,持续60秒,每1秒采样一次:
http://rabbitHost:15672/api/queues/vhost/queue?lengths_age=60&lengths_incr=1
对于默认vhost = /,它将为:
http://rabbitHost:15672/api/queues/%2F/queue?lengths_age=60&lengths_incr=1
然后在结果json中将有一些其他_details对象,如下所示:
"messages_ready_details": {
"avg": 8.524590163934427,
"avg_rate": 0.08333333333333333,
"samples": [{
"timestamp": 1532699694000,
"sample": 5
}, {
"timestamp": 1532699693000,
"sample": 11
},
<... more samples ...>
],
"rate": -6.0
},
"messages_ready": 5,
然后,您可以在此原始数据上执行所需的任何统计信息。 如果您在
中使用不同的参数,则会出现其他原始数据样本
将出现什么采样?它需要显示什么参数?
已发送和接收的邮件msg_rates_age / msg_rates_incr
已发送和接收的字节数data_rates_age / data_rates_incr
队列长度队列长度lengths_age / lengths_incr
节点统计信息(例如文件描述符,可用磁盘空间不足)node_stats_age / node_stats_incr