$30 off During Our Annual Pro Sale. View Details »

明日から始めるSidekiqオブザーバビリティ向上

imaharu
November 12, 2023

 明日から始めるSidekiqオブザーバビリティ向上

After Kaigi on Rails LT Night で登壇しました

https://smartbank.connpass.com/event/299631

imaharu

November 12, 2023
Tweet

Other Decks in Technology

Transcript

  1. GLOBIS DIGITAL PLATFORM
    明日から始める
    Sidekiqオブザーバビリティ向上

    View Slide

  2. GLOBIS DIGITAL PLATFORM 2
    自己紹介
    越智亮太 @imaharuTech
    株式会社グロービス
    Railsエンジニア3年
    SRE 1.5年

    View Slide

  3. 会社紹介

    View Slide

  4. GLOBIS DIGITAL PLATFORM 4
    本日のゴール
    明日、Sidekiqオブザーバビリティ向上 Pull Requestを作成し
    検証環境で実験できるになる

    View Slide

  5. GLOBIS DIGITAL PLATFORM 5
    オブザーバビリティとは
    システムで何が起きているか把握できる能力

    View Slide

  6. GLOBIS DIGITAL PLATFORM 6
    Sidekiqのオブザーバビリティがある状態
    1. 遅いJobが特定可能
    2. Jobが完了していない原因を特定可能

    View Slide

  7. GLOBIS DIGITAL PLATFORM 7
    Sidekiqのオブザーバビリティがある状態
    遅いJobが特定可能

    View Slide

  8. GLOBIS DIGITAL PLATFORM 8
    Sidekiqのオブザーバビリティがある状態
    Jobが完了していない原因を特定可能

    View Slide

  9. GLOBIS DIGITAL PLATFORM 9
    Sidekiqのオブザーバビリティがある状態
    Jobが完了していない原因を特定可能

    View Slide

  10. GLOBIS DIGITAL PLATFORM 10
    Sidekiqのオブザーバビリティ向上施策の紹介
    1. エラーログにjid追加
    2. enqueuedログ追加
    3. dequeuedログにjob引数を追加
    4. datadogのdurationとelapsedを紐付け
    5. job statusを追加

    View Slide

  11. GLOBIS DIGITAL PLATFORM 11
    Sidekiqのオブザーバビリティ向上施策の紹介
    1. エラーログにjid追加
    2. enqueuedログ追加
    3. dequeuedログにjob引数を追加
    4. datadogのdurationとelapsedを紐付け
    5. job statusを追加

    View Slide

  12. GLOBIS DIGITAL PLATFORM 12
    Sidekiq JSONログの出力形式

    View Slide

  13. GLOBIS DIGITAL PLATFORM 13
    成功するJobのログ

    View Slide

  14. GLOBIS DIGITAL PLATFORM 14
    失敗するJobのログ

    View Slide

  15. GLOBIS DIGITAL PLATFORM 15
    エラーメッセージに jidがない

    View Slide

  16. GLOBIS DIGITAL PLATFORM 16
    Jobライフサイクル全てのログを追跡できない
    つまり、Jobが完了していない原因を特定可能できない
    引用: https://github.com/sidekiq/sidekiq/wiki/Job-Lifecycle

    View Slide

  17. GLOBIS DIGITAL PLATFORM 17
    実装
    $ cat config/initializers/sidekiq.rb

    View Slide

  18. GLOBIS DIGITAL PLATFORM 18
    実装前後のログ変化

    View Slide

  19. GLOBIS DIGITAL PLATFORM 19
    実装
    $ cat config/initializers/sidekiq.rb
    Sidekiq::Context.add

    View Slide

  20. GLOBIS DIGITAL PLATFORM 20
    実装の解説
    ctxにjidを詰めれば良さそう
    Sidekiq::Context.add

    View Slide

  21. GLOBIS DIGITAL PLATFORM 21
    実装の解説
    Sidekiq::Context.add

    View Slide

  22. GLOBIS DIGITAL PLATFORM 22
    実装の解説
    Sidekiq::Contextは
    Jobの状態をハッシュに詰め込んだもの
    Sidekiq::Context.add

    View Slide

  23. GLOBIS DIGITAL PLATFORM 23
    実装の解説
    $ cat config/initializers/sidekiq.rb
    config.error_handlers

    View Slide

  24. GLOBIS DIGITAL PLATFORM 24
    実装の解説
    config.error_handlers

    View Slide

  25. GLOBIS DIGITAL PLATFORM 25
    実装の解説
    config.error_handlers
    default error
    handler
    add_jid_
    error_handler
    default error
    handler
    Array#unshiftで配列に先頭追加することで
    以降のhandlerでctx.jidが出力される

    View Slide

  26. GLOBIS DIGITAL PLATFORM 26
    まとめ
    Jobが完了していない原因を特定しやすくなった!!!
    引用: https://github.com/sidekiq/sidekiq/wiki/Job-Lifecycle

    View Slide

  27. GLOBIS DIGITAL PLATFORM 27
    まとめ
    明日、Sidekiqオブザーバビリティ向上 Pull Requestを作成し
    検証環境で実験できるようになった!

    View Slide

  28. We are hiring!!!

    View Slide