Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

会社紹介

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

We are hiring!!!