運用設計では、アラートの閾値と自動実行の条件を同じものとして扱うと危険です。CPU 使用率が高い、エラー率が上がった、キューが伸びた、レイテンシが悪化した、といった状態は通知の理由にはなります。しかし、それだけで再起動、スケールアウト、ジョブ停止、デプロイ中断、切り戻しを自動実行してよいとは限りません。
通知する条件、抑制する条件、停止する条件、切り戻す条件、人間の承認を挟む条件は、それぞれ別の境界です。これらを分けずに一つの閾値へ押し込むと、必要な通知が遅れたり、逆に自動処理が過剰に動いたりします。運用を安定させるには、数値そのものよりも、その数値を見て何をしてよいのかを設計として残す必要があります。
通知する条件と実行する条件は違う
アラートは、人間や運用システムへ判断を渡すための境界です。たとえば、エラー率が 2% を超えたら通知する、p95 レイテンシが 1 秒を超えたら確認する、キューが一定時間以上伸び続けたら担当者へ知らせる、という設計は自然です。ここでの目的は、異常の可能性を見逃さないことです。
一方で、自動実行は環境へ変更を加えます。Pod を再起動する、ワーカー数を増やす、トラフィックを切り替える、バッチを止める、デプロイを中断する、切り戻す。これらは通知よりも強い操作です。したがって、実行条件には、影響範囲、戻し方、再実行の可否、抑制時間、監査記録、失敗時の扱いまで含める必要があります。
| 境界 | 目的 | 条件に含めるもの |
|---|---|---|
| 通知 | 異常の可能性を知らせる。 | 指標、継続時間、重要度、担当者、Runbook。 |
| 抑制 | 同じ通知や処理の連発を防ぐ。 | 抑制時間、同一事象の判定、解除条件。 |
| 停止 | 悪化や影響拡大を止める。 | エラー率、遅延、入力異常、依存先状態、停止後の扱い。 |
| 切り戻し | 変更前の安定状態へ戻す。 | 変更との因果、健康確認、戻し手順、戻した後の確認。 |
| 承認 | 責任や影響の大きい操作を人間へ渡す。 | 破壊的変更、データ変更、広い影響範囲、不可逆性。 |
アラートは人間に判断を渡す境界である
アラートは、単に閾値を超えた事実を知らせるものではありません。誰が、どの優先度で、何を確認し、どの判断へ進むのかを結び付ける必要があります。通知先だけが決まっていて、判断基準や Runbook がなければ、アラートは運用負荷を増やすだけになります。
重要なのは、アラートを発火させる指標と、対応判断に使う指標を分けておくことです。CPU 使用率の上昇で通知しても、対応判断ではレイテンシ、エラー率、キュー長、再試行回数、依存先の状態、直近の変更履歴を合わせて見ます。一つの指標だけで原因も対処も決めようとすると、再起動やスケールアウトのような分かりやすい操作へ寄り過ぎます。
また、アラートには重要度の設計が必要です。利用者影響があるもの、将来の障害につながるもの、調査だけでよいもの、定期レビューで見るものは分けるべきです。すべてを即時通知にすると、本当に起こすべき通知が埋もれます。
自動実行には戻せる範囲が必要である
自動実行してよい処理は、実行結果を確認でき、失敗しても戻せる範囲に限定するのが基本です。たとえば、一定条件で replica を増やす、詰まったワーカーを再起動する、異常ノードをロードバランサーから外す、カナリアリリースを止める、といった処理は自動化の対象になり得ます。
ただし、自動化する場合でも、連続実行を防ぐ仕組みが必要です。再起動が失敗しているのに何度も再起動する、負荷が高いからスケールアウトし続ける、依存先が詰まっているのにリトライを増やす、という設計では障害を広げます。自動実行には、クールダウン、最大回数、対象範囲、事後確認、失敗時の停止条件を持たせるべきです。
| 自動化しやすい処理 | 必要な制約 |
|---|---|
| スケールアウト | 最大台数、依存先の上限、起動後の健康確認。 |
| プロセス再起動 | 対象範囲、連続再起動の抑制、再起動後のエラー確認。 |
| ノード切り離し | 残存容量、戻し条件、トラフィック偏りの確認。 |
| デプロイ停止 | 失敗判定、停止後のバージョン、通知先。 |
| カナリア切り戻し | 比較指標、戻し手順、戻した後の安定化確認。 |
止める条件を先に決める
運用では、何を実行するかよりも、どこで止めるかの方が重要になる場面があります。デプロイ、データ投入、バッチ、同期処理、移行作業、設定変更は、開始条件だけでなく停止条件を持つべきです。停止条件がない作業は、異常が見え始めても継続され、影響範囲を広げます。
停止条件は、作業者の違和感だけに依存させない方がよいです。エラー率、処理失敗件数、レイテンシ、キュー長、対象件数、外部 API の応答、DB 負荷、監視アラート、問い合わせ件数など、どの状態になったら作業を止めるのかを事前に決めます。停止は失敗ではなく、影響範囲を限定するための制御です。
特に変更作業では、止める判断が遅れるほど切り戻しが難しくなります。変更量が増え、関係するデータが増え、依存する処理が進み、原因の切り分けも複雑になります。自動化や CI/CD を使う場合でも、停止条件をパイプラインや承認フローへ組み込む必要があります。
切り戻し条件は感覚で決めない
切り戻しは、原因が完全に分かった後で行うものとは限りません。変更後に利用者影響が発生し、変更との関連が十分に疑われ、切り戻しによって影響を小さくできるなら、原因調査より先に戻す判断が必要になることがあります。
そのため、切り戻し条件は感覚ではなく、変更前に決めておくべきです。たとえば、カナリア対象のエラー率が比較対象より一定以上高い、p95 レイテンシが一定時間悪化する、主要機能の成功率が閾値を下回る、業務指標が落ちる、監視の健康確認に失敗する、といった条件です。
ここでも、単一の数値だけで判断しないことが重要です。たまたま一瞬だけ閾値を超えたのか、変更後から継続して悪化しているのか。全体で悪いのか、特定の地域、ユーザー、機能だけなのか。外部依存の障害なのか、今回の変更が原因なのか。切り戻し条件には、指標、時間幅、比較対象、確認手順を含めます。
人間の承認を挟む条件
自動化を進めても、人間の承認を残すべき領域があります。データを削除する、権限を変更する、広範囲の通信を遮断する、セキュリティポリシーを緩める、複数システムにまたがる切り替えを行う、不可逆な変換を実行する、といった操作です。
承認を挟む目的は、単に責任を人間へ戻すことではありません。自動化が持っていない文脈、事業影響、関係者調整、例外事情、リスク許容度を確認するためです。逆に言えば、人間の承認が必要な操作ほど、判断材料を機械的に集めておく価値があります。
| 承認が必要になりやすい条件 | 確認すること |
|---|---|
| 不可逆なデータ変更 | バックアップ、検証環境での結果、ロールバック不能時の扱い。 |
| 広範囲の通信遮断 | 影響するサービス、代替経路、解除条件。 |
| 権限や認可の変更 | 対象範囲、監査記録、緊急時の戻し方。 |
| 本番構成の大きな変更 | 変更計画、依存関係、作業時間帯、切り戻し条件。 |
| 顧客影響のある縮退運転 | 通知、優先する機能、復旧見込み。 |
境界を設計として残す
アラート閾値や自動実行条件は、ツールの設定値としてだけ残すべきではありません。なぜその条件なのか、どの指標を見ているのか、どの操作を許可しているのか、誰が責任を持つのか、失敗したらどうするのかを設計情報として残す必要があります。
特に、通知、抑制、停止、切り戻し、承認を同じ一覧で管理すると、運用上の判断が整理しやすくなります。単なるアラート一覧ではなく、状態変化に対して許可される行動の一覧として持つ方が実務に合います。
| 項目 | 設計として残す内容 |
|---|---|
| 観測する指標 | エラー率、レイテンシ、キュー長、成功率、依存先状態など。 |
| 時間幅 | 瞬間値か、一定時間の継続か、移動平均か。 |
| 許可する行動 | 通知、抑制、停止、切り戻し、承認要求、自動実行。 |
| 対象範囲 | サービス、クラスタ、リージョン、ジョブ、ユーザー影響。 |
| 失敗時の扱い | 再試行、停止、エスカレーション、手動対応。 |
| 記録 | 実行履歴、判断理由、結果、次に見直す条件。 |
まとめ
アラート閾値は、運用判断の入口にすぎません。同じ数値を見ていても、通知するのか、抑制するのか、処理を止めるのか、切り戻すのか、人間へ承認を求めるのかによって、必要な条件は変わります。
自動化を安全に使うには、実行可能な処理を増やすだけでは不十分です。戻せる範囲、連続実行の抑制、停止条件、切り戻し条件、承認が必要な条件を分ける必要があります。これらを分けておけば、アラートは単なる通知ではなく、運用判断を始めるための構造になります。
閾値は数字ですが、運用上の意味は数字だけでは決まりません。その数字を超えたときに何をしてよいのか、何をしてはいけないのか。そこまで決めて初めて、アラートと自動化は設計として機能します。
参考書籍
書籍
参考資料
- Google SRE Book: Monitoring Distributed Systems
- Google SRE Book: Automation at Google
- Google SRE Book: Release Engineering


