🔍

障害対応に使えるかもしれない Sidekiq ジョブの調べ方

に公開

これなに

その昔、仕事で sidekiq を使っていたのですが、障害で死んだ sidekiq のジョブをポチポチ調べるのがしんどかったので、調べた中でいろいろわかったことをメモ。

基本的には個人的な雑記なので、読みやすさや正確性云々は考えてません。悪しからず。
あとフレッシュで正確な情報は sidekiq の wiki ページを見るのが良い。

2023年10月に note に書いた記事を移行しただけなのですが、基本的な仕様は変わっていないはず。もし細かいところが変わっている場合はご容赦ください。

便利な一覧表

  • Sidekiq::DeadSet.new : 失敗
  • Sidekiq::Workers.new : 実行中
  • Sidekiq::Queue.new : 待機中
  • Sidekiq::ScheduledSet.new : 実行予約(あんま使い所ないので割愛)
  • Sidekiq::RetrySet.new : リトライ(同上)

失敗したジョブの情報取得する

失敗したジョブをすべて取得する

class: CronJob::AbcJob, job_id: fd02749d-29d7-4a1c-938d-7bbbc11ba353, enqueued_at: 2023-10-22T03:05:04Z 的な感じで書くことでリストできる

dead_jobs = Sidekiq::DeadSet.new
dead_jobs.map {|job| "class: #{job["args"][0]["job_class"]}, job_id: #{job["args"][0]["job_id"]}, enqueued_at: #{job["args"][0]["enqueued_at"]}"}

特定の失敗ジョブの情報を取得する

時間を指定して、dead_abc_jobs.first/last/length とかも使える

dead_jobs = Sidekiq::DeadSet.new
dead_abc_jobs = dead_jobs.scan("AbcJob").select{|job| job.args[0]["enqueued_at"].to_time > Date.new(2020,1,12)}

実行中のジョブの情報を取得する

実行中のジョブをすべて取得する

とりあえず全部出す

running_jobs = Sidekiq::Workers.new
running_jobs.each {|job| job}

待機中のジョブの情報を取得する

待機中のジョブを全て取得する

とりあえず全部出す

queuing_jobs = Sidekiq::Queue.new
queuing_jobs.each
GitHubで編集を提案

Discussion