以编程方式获取 Resque 队列中作业的数量

65

我有兴趣设置一个监控服务,每当Resque队列中的工作过多时(我有大约6个队列,每个队列的数字都不同),它就会给我发页面。我还想设置一个非常类似的监控服务,当我的队列中的失败作业超过一定数量时,会向我发出警报。

我的问题是,在我的redis服务器上,我看到了许多与Resque相关的密钥和混乱。我并没有看到一个直接的方式来获取每个队列的作业数或失败作业的数量。目前是否有一种简单的方法从redis中获取这些数据?


是否也可以获取每个队列的运行时间?比如,一个队列已经运行了多长时间? - Abhi
3个回答

150

如果你使用 Resque gem 的话,这很容易实现:


require 'resque'

Resque.info 

将返回一个哈希值

例如/ =>

{
      :pending => 54338,
      :processed => 12772,
      :queues => 2,
      :workers => 0,
      :working => 0,
      :failed => 8761,
      :servers => [
      [0] "redis://192.168.1.10:6379/0"
    ],
    :environment => "development"
}

因此,要获取失败的作业计数,只需使用:

Resque.info[:failed]

在我的例子中,执行该操作会得到 8761。

要获取队列,请使用以下方法:

Resque.queues

这会返回一个数组

例如/ =>

[
    [0] "superQ",
    [1] "anotherQ"
]

您随后可以找到每个队列的工作数量:

Resque.size(queue_name)

例如:Resque.size("superQ") 或者 Resque.size(Resque.queues[0]) ......


这看起来很好,但它似乎没有给我当前失败作业的数量,就像在 Resque Web 中看到的那样。即使我已经删除了它们,它看起来更像是历史性的失败工作计数。 - Raoot
2
如果其他人想要获取当前失败的作业而不是总数,可以使用 Resque::Failure.count - Raoot

8
这里有一个bash脚本,它将监测队列中的工作总数和失败的工作数量。
while :
do 
  let sum=0
  let errors=$(redis-cli llen resque:failed)
  for s in $(redis-cli keys resque:queue:*)
  do 
    let sum=$sum+$(redis-cli llen $s)
  done
  echo $sum jobs queued, with $errors errors
  sleep 1 # sleep 1 second, probably want to increase this
done

以下翻译仅适用于Resque 1.X版本,2.0版本可能有不同的键名。


5

还有一个名为Resque.queue_sizes的方法,它返回一个队列名称及其大小的哈希表。

Resque.queue_sizes => {"default"=>0, "slow"=>0}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接