運用・監視 レッスン3

モニタリングとアラート設計

システムの異常を検知するモニタリング指標の選び方と、無駄なアラートを減らす設計のコツを学ぶ

何を計測するか: 4つのゴールデンシグナル

計測すべき指標に迷ったら、Google SREの考え方である4つのゴールデンシグナルから 始めるのが定石です。

レイテンシ(Latency)

リクエストの処理にかかる時間。平均値だけでなくp95・p99などの分布も見る

トラフィック(Traffic)

システムへの需要量。秒間リクエスト数など

エラー(Errors)

失敗したリクエストの割合。明示的なエラーだけでなく誤った応答も含む

飽和度(Saturation)

CPU・メモリ・キューの詰まり具合など、限界にどれだけ近いか

アラートは「症状」に張る

アラート設計で最も重要な原則は、ユーザーに影響する症状(エラー率の上昇、応答遅延など)に対してアラートを張ることです。考えられる原因1つ1つに 個別のアラートを設定すると、原因の数だけアラートが増えてしまい、運用が破綻します。

# 原因ベースのアラート(避けたい設計) - 原因が増えるたびにルールも増える
alert: DBConnectionPoolNear80Percent
alert: DiskUsageAbove85Percent
alert: ThirdPartyApiSlowResponse
alert: CacheHitRateBelow50Percent

# 症状ベースのアラート(推奨) - ユーザーへの影響を直接見る
alert: HighErrorRate
  expr: rate(http_requests_total{status=~"5.."}[5m])
        / rate(http_requests_total[5m]) > 0.05
  for: 5m
  summary: "直近5分のエラー率が5%を超えています"

補足

原因ベースの指標(DB接続プールの使用率など)は「ダッシュボードで見る診断材料」として残しつつ、 通知(アラート)は症状ベースに絞ると、担当者が起こされる回数を最小限にできます。

アラート疲れを防ぐ設計

アラートが多すぎると担当者は次第に通知を無視するようになり、本当に重要な異常も 見逃してしまいます。これをアラート疲れと呼びます。

  • 継続時間の考慮: 一瞬の跳ね上がりで発火せず、一定時間(forの指定)継続した場合のみ通知する
  • 重複排除とグルーピング: 同じ根本原因から生じた複数のアラートを1つの通知にまとめる
  • 重要度の段階分け: 即座の対応が必要なものと、翌営業日でよいものを分けて通知経路を変える
  • 定期的な棚卸し: 発火しても対応不要だったアラートは閾値や設計を見直す

静的閾値と異常検知

「エラー率が5%を超えたら通知」のような静的閾値は シンプルで理解しやすい一方、トラフィックの季節変動が大きいサービスでは 誤検知や見逃しが起きやすくなります。より高度な仕組みでは、過去の傾向から 動的にベースラインを学習する異常検知を組み合わせますが、 導入・運用コストが上がるため、まずは症状ベースの静的閾値を丁寧にチューニングすることから始めるのが現実的です。

ポイント

  • まずはレイテンシ・トラフィック・エラー・飽和度の4つのゴールデンシグナルを計測する
  • アラートは原因ではなく、ユーザーに影響する症状に対して設定する
  • 継続時間・重複排除・重要度分けでアラート疲れを防ぐ
  • 静的閾値をまず丁寧に調整し、必要になってから異常検知の導入を検討する

確認クイズ

1 / 3

アラート設計の基本原則として正しいものはどれか?