監視の失敗はほとんどの場合、監視が足りないことではなく、アラートが多すぎて誰も見なくなることで起きます。本記事では「何をアラートにするか」を症状ベースで設計し、原因メトリクスはダッシュボードに逃がすという型を、CloudWatchの実装まで含めて整理します。夜間の呼び出しを減らしたい運用担当者向けの実務ガイドです。

01アラート疲れは「監視不足」ではなく「設計不足」

本番運用で一番よく見る失敗は、監視が入っていないことではありません。むしろ逆で、あらゆるメトリクスに閾値を張り、CPUが80%を超えた、ディスクI/Oが跳ねた、特定プロセスが再起動した――そのすべてがメールやチャットに流れ込み、数週間で誰も通知を開かなくなる、という状態です。これがいわゆるアラート疲れ(alert fatigue)です。

厄介なのは、アラートが多い監視は一見「しっかり見ている」ように見えることです。しかし実際には、本当に対応すべき1件が、対応不要な99件に埋もれます。深夜に叩き起こされたのがオートスケールで自然回復する一時的なCPUスパイクだった、という経験を数回すれば、人はその通知チャンネル全体をミュートします。監視の目的は「気づくこと」なのに、通知が多すぎて「気づけなくなる」という倒錯が起きるわけです。

現場のコツ:新しいアラートを追加するときは、必ず「これが鳴ったら、人は今すぐ何をするのか」を1文で言えるか確認してください。答えが「様子を見る」なら、それはアラートではなくダッシュボードで追うべき指標です。

02症状ベース ― ユーザー影響が出た事象だけをアラートにする

設計の芯になる考え方が「症状ベース(symptom-based)のアラート」です。人を呼び出すアラートは、原因(cause)ではなく症状、つまりユーザーやビジネスに実害が出ている事象に限定します。GoogleのSite Reliability Engineeringで広く知られるようになった原則で、実務でも極めて効きます。

具体例で言うと、アラートにすべきなのは次のような症状です。

一方、CPU使用率・メモリ・コネクション数・キュー長といった原因メトリクスは、それ単体では「ユーザーが困っているか」を語りません。CPUが90%でもレイテンシが正常なら、ユーザーは何も困っていないのです。だからこれらはアラートにせず、ダッシュボードで追う。障害の当事者は症状アラートで呼び出され、原因の切り分けはダッシュボードの原因メトリクスを見て行う。この役割分担が、通知量を一気に減らします。

症状はアラート・原因はダッシュボードに層別する アラート層(人を呼ぶ=症状) エラー率超過 (ユーザーが失敗) p95レイテンシ超過 (体感で遅い) ジョブ期限超過 (締めに間に合わない) 切り分けは下の層で ダッシュボード層(人を呼ばない=原因) CPU / メモリ コネクション数 キュー長 ディスクI/O
図:症状はアラートで人を呼び、原因メトリクスはダッシュボードに逃がす。切り分けはダッシュボードで行う。

症状ベースを徹底すると、アラートの本数は驚くほど減ります。監視を初めて整える段階の考え方はCloudWatch監視の最初の一歩でも触れていますが、本記事はその次の「増えすぎたアラートをどう削るか」に踏み込みます。

03SLO/エラーバジェットで「閾値の根拠」を作る

症状ベースにすると、次に必ず「では閾値をいくつにするのか」という問いが来ます。ここで役立つのがSLO(Service Level Objective)とエラーバジェットの発想です。厳密なSREを全面導入しなくても、考え方だけ借りると閾値の議論が一気に楽になります。

たとえば「直近30日で成功率99.9%」をSLOと置くと、許容される失敗(エラーバジェット)は0.1%です。この予算を基準に、「バジェットの消費が速すぎるとき」にアラートを鳴らす、という設計にできます。単純に「エラーが1件出たら鳴らす」のではなく、「このペースで失敗が続くと今月のSLOを割る」という燃焼率(burn rate)で判断するわけです。こうすると、一時的なスパイクでは鳴らず、本当にまずい傾向のときだけ鳴る、というメリハリが付きます。

現場のコツ:最初から厳密なSLOを定義しようとすると議論が止まります。まずは「主要導線のエラー率」「主要APIのp95」の2〜3本だけSLO的な目標値を仮置きし、運用しながら調整するのが現実的です。目標値は事業側と合意しておくと、後で「なぜこの閾値か」を説明できます。

04アラートを3分類する ― 即時対応 / 翌営業日 / 情報

症状ベースで絞り込んでも、すべての症状が「今すぐ叩き起こす」わけではありません。ここでアラートを緊急度で3分類し、通知経路を分けます。この分類こそが、夜間の呼び出しを減らす実務上の肝です。

重要なのは、通知経路(電話 / チャット / 記録のみ)を分類ごとに物理的に分けることです。P1だけが鳴る電話は信頼されますが、P1もP3も同じチャンネルに混ざった瞬間、全部がノイズに戻ります。バッチ処理の異常検知と再実行を含む設計はバッチの監視と再実行設計でも扱っており、翌営業日対応(P2)の作り込みが効いてくる典型です。

アラート分類フロー:緊急度で通知経路を分ける 症状アラート発火 今すぐユーザー影響が出ているか? はい 影響ありだが待てる 影響なし P1 即時対応 電話 / オンコール 深夜でも起こす P2 翌営業日 チャットに残す 営業時間に対応 P3 情報 記録のみ / 低優先 人は呼ばない P1が鳴る経路を絞るほど、オンコールは信頼される
図:症状アラートを緊急度で3分類し、通知経路を物理的に分ける。P1を絞ることがアラート疲れ防止の要。

05ランブック紐付けとノイズ削減

分類ができたら、次はP1・P2の各アラートにランブック(runbook)を紐付けます。ランブックとは「このアラートが鳴ったら、まず何を確認し、何をするか」を書いた手順書です。アラート本文やSNSの通知に、対応するランブックのURLを含めておくのが実務の定石です。

ランブックが書けないアラートは、そもそも設計を疑うべきサインです。「鳴ったが、何をすればいいか誰も分からない」アラートは、対応されずに放置され、結局ミュートされます。逆に、ランブックを書こうとすると「これは自動復旧するから鳴らす必要がない」「これはダッシュボードで十分」という気づきが生まれ、アラートの棚卸しが進みます。

ノイズ削減の実務では、次のような手を組み合わせます。

現場のコツ:「一度も対応につながっていないアラート」は、価値がゼロではなくマイナスです。ノイズとしてほかのアラートの信頼性まで下げます。消すのが怖ければ、まずP3(記録のみ)に降格させてから様子を見てください。

06CloudWatch Alarm / Composite Alarm の実務

ここまでの設計をAWSに落とすと、中心になるのがAmazon CloudWatch AlarmとComposite Alarmです。要点だけ実務目線で整理します。

メトリクスアラームでは、閾値だけでなく評価期間(Period)、評価データポイント数(Evaluation Periods)、そしてM out of Nを表すDatapoints to Alarmを組み合わせます。ここを丁寧に設定するだけで、瞬間スパイクによる誤報がかなり減ります。また、データ欠損時の挙動(Treat missing data)を「notBreaching(欠損は正常扱い)」にするか「breaching」にするかは、監視対象の性質で必ず意識してください。バッチのように稼働時間が限られる対象では、欠損の扱いを誤ると常時アラートになります。

Composite Alarm(複合アラーム)は、複数のアラームをAND/OR/NOTの論理式で束ねる仕組みです。「ロードバランサの5xxが高いかつターゲットの正常数が閾値割れ」のように、複数条件が揃ったときだけ人を呼ぶ、といった設計ができます。個別アラームは静かにさせ、Composite Alarmだけを通知に紐付けることで、1つの障害から10個の通知が飛ぶ状況を1つにまとめられます。

さらに、Composite Alarmにはアクション抑制(action suppression)があります。計画メンテナンスや、上流の依存先がダウンしているときに、抑制用(suppressor)アラームを指定して通知を止められます。抑制の状態遷移に伴う取りこぼしを防ぐため、WaitPeriodとExtensionPeriodというパラメータで待ち時間を調整します。メンテナンス時間帯に大量のアラートが飛んで結局ミュートされる、という事故を防ぐのに有効です。数値上限やパラメータの詳細は変わり得るため、実装前にCloudWatchの公式ドキュメントで最新仕様を確認してください。

複数アカウント環境では、アラームやダッシュボードをどのアカウントに集約するかも設計事項になります。監視の集約先を含むアカウント構成の考え方はマルチアカウント統制、設計全体の指針はクラウド設計ガイドラインもあわせてご覧ください。

まとめ

監視設計の失敗は、監視が足りないことより、アラートが多すぎて無視されることで起きます。立て直しの型はシンプルです。人を呼ぶアラートは症状ベースでユーザー影響が出た事象に絞り、原因メトリクスはダッシュボードに逃がす。閾値の根拠はSLO/エラーバジェットで持ち、アラートは即時対応 / 翌営業日 / 情報の3分類で通知経路を分ける。各アラートにはランブックを紐付け、対応につながらないアラートは棚卸しで削る。AWS上ではM out of NやTreat missing dataを丁寧に設定し、Composite Alarmで重複を束ね、アクション抑制でメンテ時のノイズを止める。

この型は一度作って終わりではなく、運用しながらアラートを減らし続ける営みです。まず「一度も対応につながっていないアラート」を1本消すところから始めれば、通知チャンネルは少しずつ信頼を取り戻します。移行直後の性能監視は移行後の性能問題、料金感の全体像は料金もあわせてどうぞ。

アラート疲れの立て直しや監視設計のレビューは、EMWが数多くの本番運用で手を動かしてきた領域です。現状の監視棚卸しからでも、お問い合わせからお気軽にご相談ください。

相談する
← ブログ一覧へ戻る