Day06 - 监控 Sidekiq 有无正常运作(或执行超过多久)

前言

去年介绍过 Day25 - Ruby on Rails 中的 Sidekiq 的介绍与应用 ,这次延伸介绍如何自行写脚本监控 Sidekiq 是否正常运作,以及监控执行超过多久的方法 (绝不承认是挤牙膏策略

说明

网站上线後,若有使用像是 Sidekiq 或 Resque 等,非同步处理任务的 Gem 时,不会希望某个服务挂掉而影响使用者,这时可以自行写脚本监控,看是否正常运作

示意图

实作

ps aux 中可以看到是否有运作

# 判断是否有正常运作

out = `ps aux`
total_sidekiq_count = 1
# Normal: `sidekiq 6.2.1 wms [0 of 10 busy]`
# Quiet:  `sidekiq 6.2.1 wms [0 of 10 busy] stopping`
sidekiq_matcher = /sidekiq 6\.2\.1 ironman_13th_2021 \[\d+ of \d+ busy\]\s*$/
sidekiq_cnt = out.each_line.count { |line| sidekiq_matcher.match(line) }
if sidekiq_cnt != total_sidekiq_count
  msg = "Sidekiq 有 #{sidekiq_cnt} 个,应该是 #{total_sidekiq_count} 个,请检查。"

  # 想做的处理,ex: Slack 通知、寄信...等
end

能知道 Sidekiq 是否正常运作,相对也能判断每个 Job 执行多久

# 执行超过 10 分钟的 Sidekiq job 要有提醒

current_time = Time.now.to_i
workers = Sidekiq::Workers.new
sidekiq_over_ten_min = 0
# workers.first = [
#   [0] "local:41435:a7fojn24m345",
#   [1] "ounxdxzrw",
#   [2] {
#         "queue" => "default",
#       "payload" => {
#                 "class" => "xxx",
#                  "args" => [],
#                 "retry" => 0,
#                 "queue" => "default",
#                   "jid" => "46b49fg192950dda552h21a0",
#            "created_at" => 1600743892.457303,
#           "enqueued_at" => 1600743892.457865
#       },
#        "run_at" => 1600743892
#   }
# ]
workers.each { |_process_id, _thread_id, work| sidekiq_over_ten_min += 1 if current_time - work["run_at"] > 600 }

if sidekiq_over_ten_min.positive?
  msg = "Sidekiq 有 #{sidekiq_over_ten_min} 个执行超过 10 分钟,请检查。"

  # 想做的处理,ex: Slack 通知、寄信...等
end

小结

透过脚本监控,搭配 Slack 、寄信通知,当系统异常时,可以第一时间发现并处理,避免灾情扩大,但如果所有人都睡着且没留意到手机通知,结果还是一样 (笑

参考资料

  1. Sidekiq GitHub Wiki

铁人赛文章连结:https://ithelp.ithome.com.tw/articles/10264574
medium 文章连结:https://link.medium.com/mtoj9Ck2Mjb
本文同步发布於 小菜的 Blog https://riverye.com/

备注:之後文章修改更新,以个人部落格为主


<<:  Dungeon Mizarka 007

>>:  文件物件模型--DOM

【面试心态】每一次面试都是有意义的

先发 jserv 的 2021 年「资讯科技产业专案设计」课程又开始了, 课程内容就是教怎麽面资讯...

DynamoDB汇出至S3

NoSQL资料除了前次的备份还原之外, 也可以汇出至S3当作额外备份, 或是给其他AWS服务使用. ...

实际上与使用者对话

自从上周看了 YC SUS 的课程後,了解到了与使用者对话的重要性,在这周之中花了不少时间更加贴近自...

D-26.Block、Proc、lambda && Valid Perfect Square

Block说:我让Ruby发光发亮。 Ruby中少数天生不属於物件的存在。 未物件化前,只能依附在有...

Day 16-infrastructure 也可以 for each 之三: Count meta-argument

infrastructure 也可以 for each 之三 课程内容与代码会放在 Github 上...