61

我有兴趣设置一个监控服务,只要 Resque 队列中有太多作业(我有大约 6 个队列,每个队列都有不同的编号),它就会寻呼我。我还想设置一个非常相似的监控服务,当我在队列中超过一定数量的失败作业时会提醒我。

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

4

3 回答 3

146

是的,这很容易,因为您使用的是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]) ......

于 2012-06-27T22:56:20.100 回答
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 可能有不同的键名。

于 2014-06-05T03:52:13.980 回答
2

还有一种方法Resque.queue_sizes返回队列名称和大小的哈希

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

于 2020-06-30T15:29:41.833 回答