Slide 1

Slide 1 text

Cloud Monitoringで非同期処理 オブザーバビリティ向上 Keisuke Nakama @kekke-n 2025.3.7 Jagu'e'r オブザーバビリティ分科会 Meetup#1

Slide 2

Slide 2 text

中間 啓介(なかま けいすけ) 株式会社SmartHR / SRE 自己紹介 ・今年からプロダクト 開発者から SREになりました ・5歳 息子と3歳 娘がいます ・芋焼酎とクラフトビールが大好きです ・最近 楽しみ 家族で外出することです @kekke-n

Slide 3

Slide 3 text

非同期処理 メトリクスを Cloud Monitoringで 確認できるようにして、 オブザーバビリティを向上させた話をします ※Ruby Sidekiq 事例になりますが、他 非同期処理でも使える ネタ あるんじゃないか?と思っています 🙏 本日 内容

Slide 4

Slide 4 text

● Sidekiqからメトリクスを取得するため 細かい実 装 話 話さないこと

Slide 5

Slide 5 text

Sidekiqと

Slide 6

Slide 6 text

Sidekiqと ● Rubyでバックグラウンド処理を行うため ライ ブラリ ● メール送信、画像処理など、時間 かかる処 理を非同期で実行 https://github.com/sidekiq/sidekiq

Slide 7

Slide 7 text

管理画面もある で便利

Slide 8

Slide 8 text

プロダクト システム構成

Slide 9

Slide 9 text

Sidekiq メトリクス 課題

Slide 10

Slide 10 text

過去にあったインシデント

Slide 11

Slide 11 text

文書配付 雇用契約書を SmartHR上で配付できる機能です 文書配付 プロダクト開発をしていた時 人事担当 従業員

Slide 12

Slide 12 text

カスタマーサポート お客様から 従業員に雇用契約書が送られていな いと問い合わせがきています ...

Slide 13

Slide 13 text

開発者 や い、Sidekiq ジョブが大 量に詰まって処理が遅くなっ ている!! ジョブ 状況

Slide 14

Slide 14 text

App Engine インスタンス数 を増やしてひとまず回避 ... ジョブ 状況

Slide 15

Slide 15 text

インシデント 時間帯でジョブ がどんな状況だったか確認し てみよう〜 Sidekiq管理画面

Slide 16

Slide 16 text

キュー毎にジョブ 状況が見 れないから分析がし辛い ... Sidekiq管理画面

Slide 17

Slide 17 text

● キュー毎に ○ ジョブ 数が確認できない ○ ジョブがどれだけ待たされたか確認できない ↓ 原因 分析がやりづらい ... Sidekiq メトリクス 課題

Slide 18

Slide 18 text

つまり、 オブザーバビリティが 良くない!!! 🥺

Slide 19

Slide 19 text

Sidekiq メトリクスを取得

Slide 20

Slide 20 text

● Sidekiq::MetricsExporterという社内ライブラリを作りまし た! ○ Sidekiq プロセスやキュー毎 メトリクスを Cloud Monitoringに送信できます ○ 試験的に導入しているため現状 公開せず社内 み で利用しています SREとしてやったこと

Slide 21

Slide 21 text

メトリクス送信 全体像

Slide 22

Slide 22 text

こんな情報が取得できます 送信される Sidekiq メトリクス 以下 ようなも があります。 ● 各キュー レイテンシー、サイズ ● プロセス、ワーカー 数 ● 完了、失敗、デット ...など ジョブ 数

Slide 23

Slide 23 text

メトリクス送信時 擬似コード ● メトリクスデータを作成 ○ メトリクス タイプを指定 ○ 値(ジョブ 数等) ● Cloud Monitoringにメトリクス送信

Slide 24

Slide 24 text

Metrics Explorer でキュー別に指標を選択

Slide 25

Slide 25 text

Cloud Monitoringでジョブ 数を確認

Slide 26

Slide 26 text

Cloud Monitoringでジョブ レイテンシーを確認

Slide 27

Slide 27 text

ダッシュボードで見る も便利

Slide 28

Slide 28 text

オブザーバビリティ よくなった ☺

Slide 29

Slide 29 text

● Periodic Jobsを使って定期的にメトリクスを送る ○ キューが詰まっている場合にメトリクスも送れなくなってしまうという問題が ありました ● メトリクスを出力する httpエンドポイントを作り、 Prometheus的なやり方でメトリ クスを取得する ○ Sidekiq App Engine, Cloud Run 両方で動作するケースがあります ○ そ 両方でprivateなエンドポイントを叩くため 仕組みが必要になり難易 度が高そうでした 検討したけどやらなかったこと

Slide 30

Slide 30 text

検討したけどやらなかったこと ● メトリクスをログに出すエンドポイントを作成し、そ エンドポイントを定期的にリ クエストしてログベース 指標を作る ○ New Relicにもメトリクスを送る必要があったため見送りました

Slide 31

Slide 31 text

なぜSREがこ 取り組みをし た か?

Slide 32

Slide 32 text

● プロダクトエンジニア 167人 ● プロダクト数 約 20 ● SRE 2人 SmartHR SRE 現状

Slide 33

Slide 33 text

● Embedded SREで なくEnabling SRE ● 他チームへ新しい技術やスキル 導入を支援する ● 開発チームが自走できるような状況を作る SmartHR SRE スタンス

Slide 34

Slide 34 text

メトリクス 取り方 どうやってやるんだろう .. SmartHR SRE スタンス うおお、これがあれ 自分達でできそうだ! 開発者 SRE 開発者 仕組み 作ったよ〜

Slide 35

Slide 35 text

● Sidekiq::MetricsExporterという社内ライブラリを各チームに 提供する ● 開発チームに非同期処理 オブザーバビリティに関心を持っ てもらう ● 開発チームが非同期処理 デバッグや分析を自走できるよう にする 今回 取り組み 狙い

Slide 36

Slide 36 text

まとめ

Slide 37

Slide 37 text

● Sidekiq メトリクスを Cloud Monitoringで確認する方 法について紹介しました ● 同様な課題がある場合、参考にしていただけると幸い です ● 実 SRE まだ2人です...絶賛採用中!! まとめ

Slide 38

Slide 38 text

ありがとうございました!