如何使用RabbitMQ http api查看哪些队列的消息处于就绪状态

时间:2015-06-08 18:17:27

标签: performance rabbitmq

我有一个拥有数千个队列的RabbitMQ服务器。其中只有大约5个是持久队列。每隔一段时间就有一个队列的备份,它将在就绪状态下有大约5-10条消息。这些消息似乎不在持久队列中。我想找出哪些队列的消息处于就绪状态,但唯一的指示是它发生在Web管理控制台的概述页面上,该页面适用于所有队列。 enter image description here

有没有办法查询Rabbit告诉我处于就绪状态的消息的统计信息,持续一段时间以及它们在哪个队列?

2 个答案:

答案 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