ストーリー
田
田中VPoE
異常検知の手法を学んだ。次は「アラート設計」だ。TaskFlow社の現状を教えよう。月間アラート発報数は約3,200件。そのうちオンコール担当者が実際に対応したのは約200件。つまり偽陽性率が約94%だ
あなた
94%のアラートがノイズだと、本当に重要なアラートも見逃しますよね
あ
田
田中VPoE
まさにその通りだ。これを「アラート疲れ(Alert Fatigue)」という。ノイズが多すぎるとオンコール担当者はアラートを無視するようになり、本当に深刻な障害でも対応が遅れる。アラートシステムへの信頼が崩壊した状態だ
田
田中VPoE
3つのアプローチだ。「アラートの体系的な設計」「ノイズフィルタリング」「継続的な改善サイクル」。個別のアラートをチューニングするだけでは限界がある。組織としてのアラート設計戦略が必要だ
アラート設計の原則
アラートの3分類
| 分類 | 説明 | 通知先 | 応答時間 |
|---|
| ページアラート(Page) | 即時の人的対応が必要 | PagerDuty → オンコール | 5分以内 |
| チケットアラート(Ticket) | 次営業日までに対応 | Jira/Linear → チーム | 24時間以内 |
| 情報アラート(Inform) | 対応不要だが認識が必要 | Slack通知 → チャネル | 認識のみ |
アラート設計の5原則
| 原則 | 説明 | 悪い例 | 良い例 |
|---|
| アクショナブル | アラートを受けた人が対処行動を取れる | 「CPU使用率が高い」 | 「Payment ServiceのCPUが90%超過。スケールアウトまたはリクエスト制限を検討」 |
| 症状ベース | 原因ではなく症状(ユーザー影響)でアラート | 「Pod再起動が発生」 | 「エラーレートが0.5%を超過。ユーザーの5%がエラーを経験中」 |
| 重複排除 | 同じ問題の複数アラートをグルーピング | 10台のPodそれぞれからアラート | 「サービスXのPod 10台中8台でメモリ不足」 |
| 適切な緊急度 | 緊急度に応じた通知チャネル | 全てPagerDutyページ | ページ/チケット/情報を使い分け |
| コンテキスト付与 | ランブック、ダッシュボードリンクを含む | 「エラー発生」のみ | エラー詳細 + ランブックURL + 関連ダッシュボードリンク |
SLOベースのアラート設計
バーンレートアラートの実装
| アラート名 | 条件 | 分類 | 意味 |
|---|
| Critical Burn | 1hバーンレート > 14.4 AND 5mバーンレート > 14.4 | ページ | 2時間でバジェット2%消費する速度 |
| High Burn | 6hバーンレート > 6 AND 30mバーンレート > 6 | ページ | 5日でバジェット100%消費する速度 |
| Medium Burn | 1dバーンレート > 3 AND 2hバーンレート > 3 | チケット | 10日でバジェット100%消費する速度 |
| Low Burn | 3dバーンレート > 1 AND 6hバーンレート > 1 | 情報 | 月末までにバジェット枯渇の可能性 |
マルチウィンドウの重要性
なぜ2つのウィンドウを組み合わせるか:
長ウィンドウのみ:
6hバーンレート > 6
→ 6時間前に1回の短いスパイクがあっただけでも発報
→ スパイクが既に収束していてもアラートが継続
短ウィンドウを追加:
6hバーンレート > 6 AND 30mバーンレート > 6
→ 「過去6時間で高バーンレートがあり」かつ「直近30分でも継続中」
→ 既に収束した問題では発報しない
→ 精度(Precision)が大幅に向上
ノイズ削減の手法
手法1: アラートの階層化とグルーピング
| 手法 | 説明 | 効果 |
|---|
| サービスグルーピング | 同一サービスの複数アラートを1つに集約 | アラート数60-70%削減 |
| 依存関係フィルタ | 下流障害が原因の上流アラートを抑制 | 連鎖アラートの排除 |
| 集約ウィンドウ | 5分以内の同一アラートを1件に集約 | フラッピング対策 |
依存関係フィルタの例:
DB障害が発生した場合:
✗ 設計前:
アラート1: DB接続エラー
アラート2: Task Service 500エラー増加
アラート3: API Gateway エラーレート上昇
アラート4: ジャーニーSLO「タスク作成」違反
→ 4件のアラートがオンコールに飛ぶ
○ 設計後:
アラート1: DB接続エラー(根本原因)
アラート2-4: 「DB障害による派生影響」として抑制
→ 1件のアラート + コンテキスト情報
手法2: アラートの品質管理
| 指標 | 計算式 | 目標 | 現状(TaskFlow) |
|---|
| 偽陽性率 | ノイズアラート / 全アラート | < 20% | 94% |
| アクション率 | 対応が必要だったアラート / 全アラート | > 80% | 6% |
| ページ精度 | 真のページ / 全ページ | > 90% | 不明 |
| MTTA(応答時間) | アラート発報から確認までの時間 | < 5分 | 15分 |
| カバレッジ | アラートで検知したインシデント / 全インシデント | > 90% | 69%(31%は顧客報告) |
手法3: 動的閾値の導入
| 手法 | 適用対象 | 説明 |
|---|
| 時間帯別閾値 | トラフィック系 | 平日昼間と深夜で異なる閾値を設定 |
| 曜日別閾値 | ビジネスメトリクス | 平日と週末で基準を変更 |
| デプロイ後抑制 | デプロイ直後 | デプロイ後15分間は一部アラートの感度を下げる |
| メンテナンスウィンドウ | 計画メンテナンス | メンテナンス中はアラートをミュート |
アラートのランブック設計
ランブックの標準テンプレート
| セクション | 内容 |
|---|
| アラート概要 | このアラートが意味すること、ユーザーへの影響 |
| 確認手順 | 真の問題かノイズかを切り分ける手順 |
| 緩和手順 | 即座に影響を緩和する手順(スケールアウト、ロールバック等) |
| 根本対応 | 根本原因の調査と恒久対策の手順 |
| エスカレーション | いつ、誰にエスカレーションすべきかの基準 |
| 関連リンク | ダッシュボード、ログクエリ、アーキテクチャ図 |
ランブック例: Payment Service エラーレート上昇
アラート: Payment Service エラーレート上昇
重大度: ページ(Tier 1サービス)
SLO: 可用性 99.95%
バーンレート: Critical(> 14.4)
■ 確認手順:
1. Payment Service ダッシュボード確認
→ [リンク]
2. エラーの種類を確認
→ 外部ゲートウェイタイムアウト? → 手順A
→ DB接続エラー? → 手順B
→ アプリケーションエラー? → 手順C
■ 手順A: 外部ゲートウェイタイムアウト
1. 外部ゲートウェイのステータスページ確認
2. タイムアウト設定の一時的引き上げ(30s→60s)
3. サーキットブレーカーの状態確認
4. 改善しない場合: フォールバック処理の有効化
■ エスカレーション:
- 15分以内に改善しない場合: SREリードに連絡
- 30分以上継続する場合: VPoEに報告
組織レベルのアラート改善サイクル
アラートレビューの定期実施
| レビュー | 頻度 | 内容 |
|---|
| 週次ノイズレビュー | 毎週 | 先週のノイズアラートTOP5を特定し、チューニング |
| 月次アラート品質レポート | 月次 | 偽陽性率、アクション率、MTTA、カバレッジの測定 |
| 四半期アラート棚卸し | 四半期 | 全アラートの棚卸し。未使用・低品質アラートの削除 |
アラート改善の目標(TaskFlow社)
| 指標 | 現状 | 3ヶ月目標 | 6ヶ月目標 | 12ヶ月目標 |
|---|
| 月間アラート数 | 3,200 | 1,500 | 800 | 500 |
| 偽陽性率 | 94% | 50% | 25% | 15% |
| アクション率 | 6% | 50% | 75% | 85% |
| 顧客報告率 | 31% | 20% | 10% | 5% |
| MTTA | 15分 | 10分 | 5分 | 3分 |
「最高のアラートシステムとは、少ないアラートで高い検知率を実現するものだ。1日100件のアラートより、1日5件のアラートの方がはるかに価値がある — ただし、その5件で本当に重要な問題を漏れなく捉えている場合に限る」 — 田中VPoE
まとめ
| ポイント | 内容 |
|---|
| アラート3分類 | ページ(即時対応)、チケット(計画対応)、情報(認識のみ)を使い分ける |
| SLOベース | バーンレートアラートとマルチウィンドウで精度の高い検知を実現 |
| ノイズ削減 | グルーピング、依存関係フィルタ、動的閾値で偽陽性を大幅削減 |
| 継続的改善 | アラート品質指標を定期的に測定し、組織的に改善サイクルを回す |
チェックリスト
次のステップへ
次は「AIOpsの活用」を学びます。異常検知とアラート設計をさらに発展させ、AIと機械学習を活用した高度な運用自動化を組織レベルで実現する手法を身につけましょう。
推定読了時間: 30分