我有兴趣设置一个监控服务,只要 Resque 队列中有太多作业(我有大约 6 个队列,每个队列都有不同的编号),它就会寻呼我。我还想设置一个非常相似的监控服务,当我在队列中超过一定数量的失败作业时会提醒我。
我的问题是,我在我的 redis 服务器上看到了与 Resque 相关的许多密钥和混乱。我不一定看到一种直接的方法来获取每个队列的作业数或失败的作业数。目前有没有一种简单的方法可以从 redis 中获取这些数据?
我有兴趣设置一个监控服务,只要 Resque 队列中有太多作业(我有大约 6 个队列,每个队列都有不同的编号),它就会寻呼我。我还想设置一个非常相似的监控服务,当我在队列中超过一定数量的失败作业时会提醒我。
我的问题是,我在我的 redis 服务器上看到了与 Resque 相关的许多密钥和混乱。我不一定看到一种直接的方法来获取每个队列的作业数或失败的作业数。目前有没有一种简单的方法可以从 redis 中获取这些数据?
是的,这很容易,因为您使用的是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])  ......
这是一个 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 可能有不同的键名。
还有一种方法Resque.queue_sizes返回队列名称和大小的哈希
Resque.queue_sizes => {"default"=>0, "slow"=>0}