我有兴趣设置一个监控服务,每当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])
......
Resque::Failure.count
。 - Raootwhile :
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}