Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
続く障害からの脱却 オブザーバビリティで立て直すサービス開発
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Yamato
February 22, 2025
1.7k
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.2k
PHPerKaigi_2024_アンカンファレンス_-_完成度低いの歓迎LT大会
yamato_sorariku
1
120
一年目の君へ、人に頼れるようになろう
yamato_sorariku
2
760
Cloud Runを最速で体験する方法
yamato_sorariku
0
470
クローズドなサービスをIdentity-Aware Proxyを使って安全に公開する
yamato_sorariku
0
1.1k
WEBサービスを支えるインフラたち + 自己流の学び方
yamato_sorariku
0
280
GCP PubSub Emulatorの WEB UIツール作った話(未完)
yamato_sorariku
0
490
PortainerとDocker Swarmで遊べる環境を作った話
yamato_sorariku
1
1.3k
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
230
Into the Great Unknown - MozCon
thekraken
41
2.7k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
420
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
660
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
360
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
410
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Optimising Largest Contentful Paint
csswizardry
37
4k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
590
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
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 選考を希望する⽅ まずは話を聞いてみたいという⽅