モニタリングとオブザーバビリティ

英語名 Monitoring & Observability
読み方 モニタリング アンド オブザーバビリティ
難易度
所要時間 基盤構築に1〜2週間、改善は継続的
提唱者 Google SREプラクティスから体系化
目次

ひとことで言うと
#

メトリクス・ログ・トレースの3つの柱で「システムの内部で何が起きているか」を可視化し、障害を予防・検知・迅速に解決するための手法。モニタリングは「何が起きたか」、オブザーバビリティは「なぜ起きたか」を知るための能力。

押さえておきたい用語
#

押さえておきたい用語
REDメトリクス
**Rate(リクエスト率)、Errors(エラー率)、Duration(所要時間)**の3指標。サービスの健全性を測る基本フレームワーク。
USEメトリクス
Utilization(使用率)、Saturation(飽和度)、Errorsの3指標。インフラリソースのボトルネックを特定するフレームワーク。
SLI / SLO
Service Level Indicator(計測指標)Service Level Objective(目標値)。信頼性を定量的に管理する基盤。
エラーバジェット
SLOの余白を**「使える信頼性の予算」**として管理する仕組み。予算が残っていればリリース可能、枯渇したら信頼性改善に集中。
構造化ログ
JSON形式などで検索・フィルタリングが容易なログ形式。非構造化テキストログの問題を解決する。

モニタリングとオブザーバビリティの全体像
#

3本柱とアラート・SLOの統合管理
メトリクス数値の時系列データRED / USE メソッドダッシュボードで可視化Prometheus + Grafana「異常の検知」に強いログ個々のイベント記録JSON構造化ログリクエストID付与ELK Stack / Loki「原因の特定」に強いトレースリクエストの経路追跡サービス間の処理時間ボトルネック可視化Jaeger / OpenTelemetry「どこが遅いか」に強いアラート + SLO管理SLOに影響するメトリクスを監視エラーバジェット消費で判断
障害調査のワークフロー
1
メトリクス
異常を検知しアラート発報
2
トレース
遅いサービスを特定
3
ログ
根本原因を詳細に調査
4
SLO管理
エラーバジェットで判断・改善

こんな悩みに効く
#

  • 障害に気づくのがいつもユーザーからの問い合わせ
  • 「なんか遅い」と言われても、どこがボトルネックか特定できない
  • マイクロサービスでリクエストが複数サービスをまたぐと、追跡できない

基本の使い方
#

ステップ1: メトリクスを収集する

システムの数値データを定期的に収集し、ダッシュボードで可視化する

  • インフラメトリクス: CPU使用率、メモリ使用量、ディスクI/O
  • アプリケーションメトリクス: リクエスト数、レスポンスタイム、エラーレート
  • ビジネスメトリクス: 注文数、アクティブユーザー数、売上
  • ツール: Prometheus + Grafana、Datadog、CloudWatch

ポイント: RED(Rate/Errors/Duration)またはUSE(Utilization/Saturation/Errors)メソッドで必要なメトリクスを選定する。

ステップ2: ログを構造化して集約する

アプリケーションのログを構造化し、一箇所に集める

  • JSON形式で構造化ログを出力する
  • リクエストIDやユーザーIDをログに含める
  • ログ集約: Elasticsearch + Kibana、Loki + Grafana、CloudWatch Logs
  • ログレベル(ERROR/WARN/INFO/DEBUG)を適切に使い分ける

ポイント: 「障害が起きたとき、このログだけで原因がわかるか?」を基準に、ログの内容を設計する。

ステップ3: 分散トレースを導入する

1つのリクエストが複数サービスを横断する経路を追跡する

  • リクエストにトレースIDを付与し、サービス間で伝播させる
  • 各サービスでの処理時間を可視化する
  • ツール: Jaeger、Zipkin、OpenTelemetry、Datadog APM

ポイント: マイクロサービス環境では分散トレースがないと障害調査が不可能に近い。

ステップ4: アラートとSLOを設定する

異常を検知して通知し、サービスレベルを管理する

  • SLI(サービスレベル指標): レスポンスタイム p99 < 500ms、エラーレート < 0.1%
  • SLO(サービスレベル目標): 可用性 99.9%(月間ダウンタイム43分以内)
  • アラート: SLOに影響するメトリクスが閾値を超えたらSlack/PagerDutyに通知

ポイント: アラートが多すぎると「アラート疲れ」で無視される。本当に対応が必要なものだけ通知する。

具体例
#

例1:ECサイトの注文処理を3本柱で監視する

メトリクス: 注文APIのリクエスト数(1分あたり)、p50/p95/p99レスポンスタイム、決済成功率、在庫エラー率をGrafanaダッシュボードで可視化。

ログ: 注文処理の各ステップをJSON形式で出力。{ "traceId": "abc-123", "step": "payment", "status": "success", "duration_ms": 150 }。KibanaでtraceId検索すると1注文の全処理ログが一覧表示。

トレース: 注文API → 在庫サービス → 決済サービス → 通知サービスの処理時間をJaegerで可視化。決済サービスのレスポンスが2秒かかっていることを発見 → 決済ゲートウェイのタイムアウト設定を調整。

結果: 障害の検知から原因特定まで平均45分から12分に短縮。ユーザーからの問い合わせで気づくケースがゼロに。

例2:アラート疲れを解消してオンコール体制を改善する

状況: 月間アラート数が800件。うち対応が必要なのは50件(6%)。オンコール担当が疲弊し、本当に重要なアラートも見逃す事態に。

改善:

  • SLOベースのアラートに移行。「エラーバジェットの消費速度」でアラート発報
  • 情報系(ログ量の急増など)はSlack通知のみに格下げ
  • 同一障害の連続アラートを抑制(グルーピング+抑制ルール)

結果: 月間アラート数が800件から60件に削減。対応必要なアラートの割合が6%から85%に向上。オンコール担当の離職率も改善。

例3:ビジネスメトリクスで障害の影響を即座に把握する

状況: 深夜にDBの応答が遅くなる障害が発生。技術メトリクスでは「DB応答時間が3倍」とわかるが、ビジネスへの影響がわからず、エスカレーション判断に30分を浪費。

改善: Grafanaダッシュボードにビジネスメトリクスを追加。

  • リアルタイム注文数(1分間隔)
  • 決済成功率
  • カート離脱率

効果: 同様の障害が再発した際、「注文数が通常の40%に低下」「決済成功率が60%に悪化」を即座に確認。影響額を「分あたり約15万円の機会損失」と見積もり、5分でエスカレーション判断を実行。

やりがちな失敗パターン
#

  1. メトリクスを取りすぎてダッシュボードが見きれない — 100個のグラフがあるダッシュボードは誰も見ない。「この画面を見れば健全性がわかる」というサマリーダッシュボードを1つ作る
  2. ログに個人情報を出力する — メールアドレスやパスワードがログに残り、セキュリティインシデントになる。個人情報はマスキングするルールを必ず設ける
  3. アラートの閾値が固定的すぎる — 平日と休日でトラフィックが違うのに同じ閾値を使い、毎週末に誤報が出る。動的な閾値(異常検知ベース)を検討する
  4. 3つの柱をバラバラに運用する — メトリクスからトレース、トレースからログへジャンプできない。トレースIDで横断検索できる仕組みを構築すること

まとめ
#

モニタリングとオブザーバビリティは 「運用の基盤」。メトリクス・ログ・トレースの3本柱を整備し、SLOベースでアラートを設定することで、障害の早期検知と迅速な原因特定が可能になる。まずはアプリケーションのREDメトリクス(リクエスト数、エラーレート、レスポンスタイム)のダッシュボードを1つ作るところから始めよう。