Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
続く障害からの脱却 オブザーバビリティで立て直すサービス開発
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Yamato
February 22, 2025
1.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
続く障害からの脱却 オブザーバビリティで立て直すサービス開発
PHPカンファレンス名古屋2025
Yamato
February 22, 2025
More Decks by Yamato
See All by Yamato
#phpconkagawa レガシーコードにもオブザーバビリティを 〜少しずつ始めるサービス監視〜
yamato_sorariku
0
1.5k
わたしがインシデント対応のときに意識していることたち in PHPカンファレンス小田原2024 #phpcon_odawara
yamato_sorariku
0
1.1k
PHPerKaigi_2024_アンカンファレンス_-_完成度低いの歓迎LT大会
yamato_sorariku
1
120
一年目の君へ、人に頼れるようになろう
yamato_sorariku
2
710
Cloud Runを最速で体験する方法
yamato_sorariku
0
440
クローズドなサービスをIdentity-Aware Proxyを使って安全に公開する
yamato_sorariku
0
930
WEBサービスを支えるインフラたち + 自己流の学び方
yamato_sorariku
0
270
GCP PubSub Emulatorの WEB UIツール作った話(未完)
yamato_sorariku
0
490
PortainerとDocker Swarmで遊べる環境を作った話
yamato_sorariku
1
1.3k
Featured
See All Featured
AI: The stuff that nobody shows you
jnunemaker
PRO
8
690
Music & Morning Musume
bryan
47
7.2k
Google's AI Overviews - The New Search
badams
0
1k
A better future with KSS
kneath
240
18k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
1.6k
Producing Creativity
orderedlist
PRO
348
40k
Navigating Team Friction
lara
192
16k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
140
What's in a price? How to price your products and services
michaelherold
247
13k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
160
Typedesign – Prime Four
hannesfritz
42
3.1k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Transcript
#phpcon_nagoya #s 続く障害からの脱却 オブザーバビリティで立て直すサービス開発 in PHPカンファレンス名古屋2025 @yamato_sorariku
#phpcon_nagoya #s 自己紹介 @yamato_sorariku / 足利 大和 株式会社カオナビ • バックエンドエンジニア
◦ 軸はPHPer ◦ 必要なことはなんでもやります • 猫とコーヒーと飛行機が好き 2
#phpcon_nagoya #s 障害が頻発し苦境に陥り プロダクト自体の機能開発も改善も進まない状況のチーム そんなチームで私がやってきたことをお話します 3
#phpcon_nagoya #s 今回のトークで登場するサービスの概要 4 提携しているメディアの記事リスト を取得するcronジョブ 取得リストをもとに 順次実行して記事を取得する cronジョブ 取得した記事を使って
ユーザごとにレポート生成 するcronジョブ 調査レポート 提供している価値 取得先は数千件以上 総取得数は数万件以上 ユーザごとに設定された調査条件に合 致したデータを取得しレポート化 レポートに対する追加情報の取得 記事の注目度など
#phpcon_nagoya #s プロダクトチームの状況 5
#phpcon_nagoya #s 2週に1度は大小さまざまな障害が発生 6
#phpcon_nagoya #s 最重要なデータ収集バッチが 数日間実行エラーで稼働せず データ取得遅延・欠損 7
#phpcon_nagoya #s 提供するレポート用追加情報の 取得が数日間すべて失敗し続けデータ欠損 8
#phpcon_nagoya #s プロダクトチームの状況 2週に1度は大小さまざまな障害が発生 • 最重要なデータ収集バッチの停止 • ユーザに提供するレポート用追加情報の取得エラー どちらも数日間気づくことなく、CS部門からの問い合わせで発覚 9
#phpcon_nagoya #s プロダクトチームの状況 ほぼCS部門からの問い合わせで発覚 これがつらい。 10
#phpcon_nagoya #s 11 この表示って正しいですか?
#phpcon_nagoya #s 12 この表示って正しいですか? これデータ壊れてません?
#phpcon_nagoya #s これなんか起きてませんか? 13 この表示って正しいですか? これデータ壊れてません?
#phpcon_nagoya #s プロダクトチームの状況 ほぼCS部門からの問い合わせで発覚 サービスとしての安定感はゼロ、CS部門からの信頼もやばい CS部門の方が毎日見回りをルーティンタスクとして設定する事態 14
#phpcon_nagoya #s プロダクトチームの状況 当然チームには良くない空気が流れる • 対応に追われてプロダクトへの機能実装はうまく進捗できない ◦ レガシーなコードやインフラの改善も進まない 15
#phpcon_nagoya #s プロダクトチームの状況 当然チームには良くない空気が流れる • 対応に追われてプロダクトへの機能実装はうまく進捗できない ◦ レガシーなコードやインフラの改善も進まない • なにかアクションを起こすと問題が起きる
16
#phpcon_nagoya #s プロダクトチームの状況 当然チームには良くない空気が流れる • 対応に追われてプロダクトへの機能実装はうまく進捗できない ◦ レガシーなコードやインフラの改善も進まない • なにかアクションを起こすと問題が起きる
◦ 起きる問題に自分たちで気付けない ◦ 行動しないことが安全に繋がってしまう 17
#phpcon_nagoya #s プロダクトチームの状況 当然チームには良くない空気が流れる • 対応に追われてプロダクトへの機能実装はうまく進捗できない ◦ レガシーなコードやインフラの改善も進まない • なにかアクションを起こすと問題が起きる
◦ 起きる問題に自分たちで気付けない ◦ 行動しないことが安全に繋がってしまう 18 自分たちで気付けるようになろう ↓ システム監視から始める立て直しへ
#phpcon_nagoya #s システム監視 19
#phpcon_nagoya #s シンプルなシステム監視に着手 • CPUなどのサーバリソースの監視 • 各種ジョブ処理(cron実行)の実行結果を収集 • ログの監視とSlack通知 20
#phpcon_nagoya #s シンプルなシステム監視に着手 21 CPUの負荷状態
#phpcon_nagoya #s シンプルなシステム監視に着手 22 CPUの負荷状態 これはやばい?
#phpcon_nagoya #s シンプルなシステム監視に着手 23 CPUの負荷状態
#phpcon_nagoya #s シンプルなシステム監視に着手 24 CPUの負荷状態 これは平和?
#phpcon_nagoya #s シンプルなシステム監視に着手 • CPUなどのサーバリソースの監視 ◦ 余裕があるからと言って問題なく稼働してるかはわからない ◦ 使用率99%でも適切にサービス提供できれいれば問題ない •
各種ジョブ(cron実行)の実行結果を収集 • ログの監視とSlack通知 25 目安: 5分
#phpcon_nagoya #s シンプルなシステム監視に着手 26 ジョブの終了コードが0ならOK 1ならなにか問題が起きている
#phpcon_nagoya #s シンプルなシステム監視に着手 27 おや?
#phpcon_nagoya #s シンプルなシステム監視に着手 • CPUなどのサーバリソースの監視 ◦ 余裕があるからと言って問題なく稼働してるかはわからない ◦ 使用率99%でも適切にサービス提供できれいれば問題ない •
各種ジョブ処理(cron実行)の実行結果を収集 ◦ 終了コードにが0なら正常終了している判定 ▪ エラーなのに0応答しているコードが稀に…… • ログの監視とSlack通知 28
#phpcon_nagoya #s シンプルなシステム監視に着手 • CPUなどのサーバリソースの監視 ◦ 余裕があるからと言って問題なく稼働してるかはわからない ◦ 使用率99%でも適切にサービス提供できれいれば問題ない •
各種ジョブ処理(cron実行)の実行結果を収集 ◦ 終了コードにが0なら正常終了している判定 ▪ エラーなのに0応答しているコードが稀に…… • ログの監視とSlack通知 ◦ 対応不要なエラーログの山によるノイジーアラート 29
#phpcon_nagoya #s シンプルなシステム監視に着手 • CPUなどのサーバリソースの監視 ◦ 余裕があるからと言って問題なく稼働してるかはわからない ◦ 使用率99%でも適切にサービス提供できれいれば問題ない •
各種ジョブ処理(cron実行)の実行結果を収集 ◦ 終了コードにが0なら正常終了している判定 ▪ エラーなのに0応答しているコードが稀に…… • ログの監視とSlack通知 ◦ 対応不要なエラーログの山によるノイジーアラート 30 ちゃんと稼働してるかわからん
#phpcon_nagoya #s ※ インフラなどの監視はもちろん重要 • インフラレイヤで起きる問題も当然あるのでリソース監視なども必要 • 我々はWebアプリケーションエンジニアなので 「アプリケーション(サービス)」の監視が重要 •
アプリケーションが正しく動作できていなければ価値は提供できていない 31
#phpcon_nagoya #s ※ インフラなどの監視はもちろん重要 • インフラレイヤで起きる問題も当然あるのでリソース監視なども必要 • 我々はWebアプリケーションエンジニアなので 「アプリケーション(サービス)」の監視が重要 •
アプリケーションが正しく動作できていなければ価値は提供できていない 32 システムが価値が提供できていることを見えるようにしたい ↓ オブザーバビリティから始める立て直しへ
#phpcon_nagoya #s オブザーバビリティとは? 33
#phpcon_nagoya #s オブザーバビリティとは? オブザーバビリティとは、システムの外部出力の知識から 内部状態をどれだけ正確に推測できるかの尺度 引用: https://github.com/cncf/tag-observability/blob/whitepaper-v1.0.0/whitepaper.md 34
#phpcon_nagoya #s オブザーバビリティの3本柱 引用: https://github.com/cncf/tag-observability/blob/whitepaper-v1.0.0/whitepaper.md 35 メトリクス ログ トレース
#phpcon_nagoya #s オブザーバビリティの3本柱: メトリクス • システムの状態を数値で表現したもの ◦ 例:CPU使用率、メモリ使用量、リクエスト数/秒 • リアルタイムで収集され、時系列データとして保存、グラフ化しやすい
◦ システム全体の状態把握、異常の早期発見 36
#phpcon_nagoya #s オブザーバビリティの3本柱: ログ • システム内で発生したイベントの詳細な記録 ◦ アプリケーションログ、システムログ • テキスト形式で記録され、詳細な情報を含める(個人情報などには注意が必要)
◦ 1行のテキスト形式からJSONL形式など形は様々 37
#phpcon_nagoya #s オブザーバビリティの3本柱: トレース • リクエスト単位でイベントを記録する ◦ PHP、DB、外部APIなどごとの処理時間などを追うことができる • 全リクエストを対象にすると膨大なデータになるためサンプリングが必要
38
#phpcon_nagoya #s 内部状態をどれだけ正確に推測できるか 39
#phpcon_nagoya #s 内部状態をどれだけ正確に推測できるか ↓ システムが価値を提供できているか推測できるか 40
#phpcon_nagoya #s データの取得状況をすべて構造化ログとして出力 41
#phpcon_nagoya #s データの取得状況をすべて構造化ログとして出力 42 提携しているメディアの記事リスト を取得するcronジョブ 取得リストをもとに 順次実行して記事を取得する cronジョブ 取得した記事を使って
ユーザごとにレポート生成 するcronジョブ レポートに対する追加情報の取得
#phpcon_nagoya #s データの取得状況をすべて構造化ログとして出力 43 提携しているメディアの記事リスト を取得するcronジョブ 取得リストをもとに 順次実行して記事を取得する cronジョブ 取得した記事を使って
ユーザごとにレポート生成 するcronジョブ レポートに対する追加情報の取得
#phpcon_nagoya #s 価値が提供できていることを推測する 44 構造化ログをPHPで出力 構造化ログをNew Relicへ転送 構造化ログを集計して メトリクスへ変換
#phpcon_nagoya #s 価値が提供できていることを推測する 45 構造化ログを集計してメトリクスに -> 時系列のデータとして見える 目安: 10分
#phpcon_nagoya #s 価値が提供できていることを推測する 46 構造化ログを集計してメトリクスに -> 時系列のデータとして見える 安定して取得できてそう!
#phpcon_nagoya #s 価値が提供できていることを推測する 47 構造化ログを集計してメトリクスに -> 時系列のデータとして見える
#phpcon_nagoya #s 価値が提供できていることを推測する 48 構造化ログを集計してメトリクスに -> 時系列のデータとして見える 取得できてない時間が一定時間を超えた -> アラート発報
取得できなくなったメディアの確認 -> 全部? 一部?
#phpcon_nagoya #s 価値が提供できていることを推測する 49 構造化ログを集計してメトリクスに -> 時系列のデータとして見える 取得できてない時間が一定時間を超えた -> アラート発報
取得できなくなったメディアの確認 -> 全部? 一部? ログとメトリクスを組み合わせてサービスが 価値を正しく提供できているか推測可能に
#phpcon_nagoya #s どのようなリードをしてきたか 50
#phpcon_nagoya #s どのようなリードをしてきたか • 自分がチームに来たときは完全な「サバイバルモード」 ◦ 起きる問題に振り回されて改善の時間がない ◦ 「改善していこう!」と言うだけでは前に進めない状況 ◦
なんとかして「ゆとり時間」を作らないといけない 51 参考: https://www.oreilly.co.jp/books/9784873118024/
#phpcon_nagoya #s どのようなリードをしてきたか • 自分がチームに来たときは完全な「サバイバルモード」 ◦ 起きる問題に振り回されて改善の時間がない ◦ 「改善していこう!」と言うだけでは前に進めない状況 ◦
なんとかして「ゆとり時間」を作らないといけない 52 参考: https://www.oreilly.co.jp/books/9784873118024/ ↓ 一人でたたき台を作ってしまおう!
#phpcon_nagoya #s どのようなリードをしてきたか • ダッシュボードのたたき台を作成 • チームイベントなどで共有し、サービスの状態が把握できることをアピール • 気づきを得てチームで改善を繰り返すことで「チームの共通認識」に 53
#phpcon_nagoya #s 共通認識となったことで • チームのメンバーが主体的に ◦ オブザーバビリティ向上のためのログ・メトリクスの追加 ◦ ダッシュボードへ新しい視点での監視の追加 ◦
オブザーバビリティに関する研修への参加 54
#phpcon_nagoya #s 共通認識となったことで • チームのメンバーが主体的に ◦ オブザーバビリティ向上のためのログ・メトリクスの追加 ◦ ダッシュボードへ新しい視点での監視の追加 ◦
オブザーバビリティに関する研修への参加 55 ↓ チームでオブザーバビリティ向上アクションに取り組めるように
#phpcon_nagoya #s チームでオブザーバビリティに取り組めるようになる 56 早期問題の検知と対処 改善や機能開発に 使える時間が増える プロダクトの安定性向上 価値を高める機能の追加
#phpcon_nagoya #s チームでオブザーバビリティに取り組めるようになる 57 早期問題の検知と対処 改善や機能開発に 使える時間が増える プロダクトの安定性向上 価値を高める機能の追加 改善のループが回り始めた
#phpcon_nagoya #s まとめ 58
#phpcon_nagoya #s まとめ • 小さく少しずつ始めよう ◦ シンプルな監視や構造化ログの出力から着手し、少しずつ改善を積み重 ねる。 • 価値を可視化しよう
◦ ログやメトリクスを活用し、サービスが正しく価値を提供できているか わかるようにする。 • チームで育てよう ◦ ダッシュボードの共有や継続的な改善を通じて、オブザーバビリティを 文化として根付かせよう。 59
#phpcon_nagoya #s サービスのオブザーバビリティを高め ガードレールを作り安心安全な プロダクト開発につなげて価値を高めていこう 60
#phpcon_nagoya #s 参考資料 • Re:Define 可用性を支える モニタリング、パフォーマンス最適化、そしてセキュリティ ◦ https://speakerdeck.com/pyama86/re-define-ke-yong-xing-wozhi-eru-monitaringu-pahuomansuzui-shi-hua-sositesekiyuritei •
メトリクス、ログ、トレースをうまく使い分けて可観測性を高めよう! ◦ https://speakerdeck.com/masayoshi/metorikusu-rogu-toresuwoumakushi-ifen-keteke-guan-ce-xing-wogao-meyou • Observability Whitepaper ◦ https://github.com/cncf/tag-observability/blob/whitepaper-v1.0.0/whitepaper.md#what-is-observability • O'Reilly オブザーバビリティ・エンジニアリング ◦ https://www.oreilly.co.jp/books/9784814400126/ • O'Reilly エラスティックリーダーシップ ◦ https://www.oreilly.co.jp/books/9784873118024/ 61
#phpcon_nagoya #s We are hiring!! - 株式会社カオナビ https://corp.kaonavi.jp/recruit /list/ 62
https://hrmos.co/pages/kaonavi/jobs/casual21 選考を希望する⽅ まずは話を聞いてみたいという⽅