> [!abstract]
> 分散システムのモニタリングは、サービスの健全性を判断し、異常を検知して対処するための基盤である。ホワイトボックスとブラックボックスの 2 種類のモニタリングを組み合わせ、4 つのゴールデンシグナルに基づいて計測とアラートを設計することで、信頼性の高い運用体制を構築する。
## 書誌情報
- タイトル: Monitoring Distributed Systems(Chapter 6)
- 著者: Rob Ewaschuk
- 書籍: [[SRE Book]](Site Reliability Engineering: How Google Runs Production Systems, O'Reilly, 2016)
- URL: https://sre.google/sre-book/monitoring-distributed-systems/
## モニタリングの分類
### ホワイトボックスモニタリング
システム内部のメトリクス(ログ、プロファイル、HTTP ハンドラの計装値など)に基づく監視である。原因の診断や、まだ顕在化していない問題の予測に適する。
### ブラックボックスモニタリング
外部から見えるシステムの振る舞い(HTTP レスポンスコード、レイテンシなど)に基づく監視である。ユーザが現在体験している症状を捉えるのに適する。
両者は補完関係にある。ブラックボックスは「今何が壊れているか」を示し、ホワイトボックスは「なぜ壊れているか」と「もうすぐ壊れそうなもの」を示す。
## 4 つのゴールデンシグナル
サービスの健全性を把握するために最低限計測すべき 4 つの指標を以下に示す。
1. **レイテンシ(latency)**: リクエストの処理にかかる時間。成功リクエストと失敗リクエストのレイテンシを区別することが重要である。高速に返るエラーレスポンスを含めると、成功リクエストの実態が見えなくなる。
2. **トラフィック(traffic)**: システムに対する需要の量。ウェブサービスでは秒間 HTTP リクエスト数、ストリーミングでは I/O レートやセッション数など、サービス種別に応じた指標で計測する。
3. **エラー(errors)**: 失敗したリクエストの割合。明示的な失敗(HTTP 500)、暗黙的な失敗(HTTP 200 だが内容が不正)、ポリシー違反(レスポンスが 1 秒超)を区別する。
4. **サチュレーション(saturation)**: システムリソースの利用率。CPU、メモリ、I/O、ネットワーク帯域など、最も制約の厳しいリソースに注目する。多くのシステムは 100% 利用に達する前にパフォーマンスが劣化するため、利用率の目標値を設定しておく。
## パーセンタイル分布の重要性
レイテンシなどの指標を平均値で評価すると、外れ値やロングテールが隠蔽される。50 パーセンタイル(中央値)、99 パーセンタイル、99.9 パーセンタイルの分布を計測し、ユーザ体験の実態を可視化する。平均レイテンシが 100ms でも、99 パーセンタイルが 5 秒であれば、100 リクエストに 1 回はユーザが著しく遅延を体験している。
## アラート設計の 5 つの問い
アラートを追加する前に以下の 5 つの問いに答える。すべてに「はい」と答えられない場合、そのアラートは不要である。
1. このアラートは、ユーザに見える緊急の問題か、まもなく緊急になる問題を検知しているか
2. このアラートに対してアクションを取れるか。アクションは緊急か、それとも翌朝まで待てるか
3. このアラートに対するアクションは人間の知的判断を要するか。自動化できないか
4. このアラートは新しい情報を提供しているか。他のアラートと重複していないか
5. このアラートに対して、定義されたアクションが存在するか
## シンプルさの原則
モニタリングシステムは可能な限り単純に保つ。複雑なルールや依存関係、「マジックシステム」を構築すると、保守コストが上がり、脆弱性の原因となる。アラートルールは人間が容易に理解できるものに限定する。使われていないアラートやダッシュボードは定期的に削除する。
## 短期的可用性と長期的改善のトレードオフ
短期的な可用性を犠牲にしてでも、モニタリングシステム自体の改善に投資することが長期的な信頼性につながる。たとえば、アラートの精度を上げるために一時的にカバレッジを落とすことは許容される。
## 関連
- [[サービスレベル目標]]: ゴールデンシグナルに基づく SLO 設計
- [[異常検知]]: モニタリングデータに基づく自動検知手法
- [[インシデント管理]]: アラート発火後の対応プロセス
- [[@2007__LISA__On Designing and Deploying Internet-Scale Services]]: Hamilton による監視設計の原則
## 出典
- Rob Ewaschuk, "Monitoring Distributed Systems," in *Site Reliability Engineering*, O'Reilly, 2016