如何从Sidekiq获取作业执行时间?

3

我希望在运行我的任务时了解执行时间。似乎有一个叫做sidekiq-statistic的宝石可以满足我的要求,甚至还有图形用户界面,但不幸的是它不支持sidekiq 5。我能否从 perform 方法内部获取此类信息?我更喜欢避免手动编写基准测试代码,而是将我的方法包装在Benchmark块中。

5个回答

3
您可以从日志输出中抓取它。

2

我曾经遇到一个问题,就是无法确定哪个任务花费的时间最长,所以我编写了一个小工具来分析日志。

好消息是:我找到了答案,现在我要分享我的代码 :-)

希望它没有任何bug。

  desc "sidekiq run statistics"
  task sidekiq_run_statistics: :environment do
    # 2021-02-19T06:04:23.088Z 20240 TID-ov75i75aw Importer::PriceJob JID-95245ccf3933fe1f5897d52b INFO: done: 193.952 sec
    file = File.open( Rails.root.join("log","sidekiq.log"))
    job_stats = {}
    file.each_line do |line|
      job_stat = line.split(" ")
      if job_stat[8] == "sec"
        time = job_stat[7].to_f
        job_stats[ job_stat[3] ] ||= {longest_run_time: 0, total_run_time:0, total_runs: 0 }
        job_stats[ job_stat[3] ][:longest_run_time] = time if  job_stats[ job_stat[3] ][:longest_run_time] < time 
        job_stats[ job_stat[3] ][:total_run_time]+=time 
        job_stats[ job_stat[3] ][:total_runs]+=1 
      end 
    end
    file.close
    puts %w(total_runs total_run_time longest_run_time job ).collect{|i| i.rjust(16) }.join(" ")
    puts "="*80
       
    job_stats.keys.each do |key| 
      puts( [job_stats[key][:total_runs],job_stats[key][:total_run_time].round(3), job_stats[key][:longest_run_time].round(3), key ].collect{|i| i.to_s.rjust(16) }.join(" "))
    end 
  end 

样例输出

total_runs       total_run_time   longest_run_time job             
==================================================================
56               68.909           7.641            Job1
56               98.9             11.599           Job2
47               193.909          13.795           Job3
234              1806.76          20.644           Job4

1

正如Mike 所说,它已经记录在日志中。

要快速查看昨天工人的平均完成时间:

rg MyWorker sidekiq.log.1 |rg done| awk '{ total += $8; count++ } END { print total/count }'

对于我们这些新手来说,“rg”是什么? - Abe Petrillo
rgripgrep - weston

1
你可以在 perform 方法中进行计算,然后将其记录到 Rails 日志中。
def preform(task,*params)
   ...start metric times...
   ... do your computations ...
   ...end metric times...
   Rails.logger.info "Your Metrics..."
end

我在Heroku上使用Paper-trail取得了成功,只需查看工作程序的启动和完成时间即可。

0
你可以尝试使用Scout,它是一个非常好的工具,可以提供详细的方法指标。它也可以与Heroku一起使用,在那里他们有附加组件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接