使用参数查找失败的Sidekiq作业列表

时间:2015-11-06 21:45:22

标签: ruby-on-rails sidekiq

我正在使用Sidekiq进行Rails APP的作业管理。我想知道如何获得失败作业的参数(Ids,对象,错误消息等)?在WebUI上,你得到的就是失败的工作。如果我理解正确,默认是将给定作业失败的所有时间加起来。我已经部署了我的应用程序,它正在几个工作人员上运行。很难找到每一个工人并试图找出答案,特别是当你有一个很久以前的sidekiq.log时。

我在这里和网上搜索答案。在下面的链接中描述了最接近的一个。

How to find failed jobs list in sidekiq?

这可以找出我在一段时间内失败的工作量。但是,我仍然不知道如何知道什么工作失败以及为什么失败。

基本上,我想以某种方式收集job_ids并定期检查哪些失败或者是否有更简单的方法,只需查询Sidekiq / Redis并查看失败作业的参数和错误。

我也访问过此链接:Get error message out of Sidekiq job

以下是我正在使用的示例作业

class ClassificationJob < ActiveJob::Base
 queue_as :default

 def perform(entity)
  entity.preprocess!
  entity.classify!
 end
end

我试图修改为

class ClassificationJob < ActiveJob::Base
 queue_as :default

 def perform(entity)
  entity.preprocess!
  entity.classify!
  store entity_id: entity.id.to_s

  entity_id = retrieve :entity_id
 end
end

但它吐出以下错误:

ArgumentError: You cannot include Sidekiq::Worker in an ActiveJob: ClassificationJob

谢谢,

Yannick

2 个答案:

答案 0 :(得分:8)

您正在寻找重试。 “重试”是Sidekiq关于失败的工作的期限,并将在未来的某个时间重试。

Web UI使用API​​ wiki页面上记录的Sidekiq API列出重试选项卡上的重试次数:

https://github.com/mperham/sidekiq/wiki/API#retries

retries = Sidekiq::RetrySet.new
retries.each do |job|
  p [job.klass, job.args, job.jid]
end

答案 1 :(得分:2)

我一直在寻找一种方法来缩小控制台中来自给定队列的不同类型的故障。

经过一番挖掘后,

获取工人名单:

query = Sidekiq::Failures::FailureSet.new.map(&:item)

query.map { |item| item['class'] }.uniq # Gives you a sense of what failed
query.map { |item| item['wrapped'] }.uniq # Gives you the job's original class
query.map { |item| item['queue'] }.uniq # Gives you a name of each of the queues
query.map { |item| item['args'] }.uniq # This would give you all the argument hashes for all failures.  

args哈希有以下键:

job_class
job_id
queue_name
arguments
locale

我认为你必须拥有这个宝石才能发挥作用:https://github.com/mhfs/sidekiq-failures