- ブラウザURL入力
- DNS名前→IP
- ルータ経路選択
- ロードバランサ振り分け今ここ
- Nginx受け口
- アプリ処理今ここ
- DB保存
壊れた後に打てる手は、壊れる前に用意しておいた分しかありません。今回は、原因が分かる前に打つ手と、その手が戻さないものを見ます。
まず結論
障害の最中に最初にやるのは、原因を解き明かすことではなく影響を止めること(緩和)です。SRE Workbook は、緩和に詳細の理解は要らず、原因の「場所」が分かればよいと書いています。
緩和は修正ではありません。本教材の実演でも、フラグを切ると新たな破壊は止まりましたが、すでに本文が空になった2行は空のままでした。壊れたときに打てる手は、壊れる前に用意した分しかありません。
タイトル編集の不具合で、2件のメモの本文が空になりました。原因を調べずに機能フラグを切ったあと、その2件はどうなっているでしょうか。
当てることが目的ではありません。外した予測ほど記憶に残るので、直感で選んでください。
止めることと、直すことの順番
障害の最中、原因が分かるまで触らないほうが安全に思えます。SRE Workbook 第9章の事例の振り返りは、順番をはっきり書いています。
With mitigation as top priority, an active incident should be addressed as follows:
- Assess the impact of the incident.
- Mitigate the impact.
- Perform a root-cause analysis of the incident.
- After the incident is over, fix what caused the incident and write a postmortem.
緩和(mitigate)と修正(fix)は別の項目で、修正はインシデントが終わった後に置かれています。では、原因が分からないまま何を根拠に緩和するのか。同じ振り返りはこう答えます。
To mitigate an incident, you don’t have to fully understand the details—you only need to know the location of the root cause.
要るのは場所です。「直前のリリースから壊れ始めた」「エラーはこの地域に偏っている」——どこにあるかが分かれば、その場所を通り道から外せます。なぜ壊れたかは、外した後で調べられます。
- ・Workbook 第9章の事例の振り返りにある4項目を並べたもの
- ・緩和は通り道を変えるだけで、すでに書かれたデータは戻さない(下の実演)
本教材の実演の出力(段5〜6、スクリプト非掲載)
Docker で nginx・Python のメモアプリ・PostgreSQL 18.6 を立てました。新版 v2 はタイトル機能を足していて、機能フラグ title_edit が On のときだけ効きます。アプリはリクエストごとにフラグファイルを読むので、ファイルを書き換えれば置き直さずに効き方が変わります。
v2 には不具合を1つ入れてあります。タイトルだけが送られてくると、本文を空文字で上書きしてしまいます。以下はフラグを On にしてから、原因を調べずに Off にするまでの出力です(2回通して、時刻以外は同じ出力)。
[09:42:02] ===== 5 フラグ On の直前の時刻を控える(戻す目標)→ フラグ On → 利用者がタイトルを付ける =====restore target: 2026-09-26 00:42:02.716457+00{"ok": true} [200]{"ok": true} [200]{"id": 4} [201][{"id": 1, "title": "買い物", "body": ""}, {"id": 2, "title": "会議", "body": ""}, {"id": 3, "title": null, "body": "設計の宿題: キャッシュの失効"}, {"id": 4, "title": null, "body": "新しいメモ(不具合の後に書かれた正しい行)"}] [200][09:42:03] ===== 6 検知(本文が空の行を数える)→ 緩和: 原因を調べる前にフラグを切る =====empty bodies: 2{"error": "title edit is off"} [404]empty bodies after mitigation (データは戻っていない): 2
id 1 と 2 はタイトルが付いた代わりに "body": "" になりました。検知で数えると empty bodies: 2。この時点で分かっているのは「フラグを On にした後から空の行が出た」ことだけで、どの SQL のどの引数が悪いかは誰も見ていません。それでも場所は分かっているので、フラグを切れます。
切った後、id 3 にタイトルを付けようとすると {"error": "title edit is off"} [404]。新たな破壊は止まりました。ところが最終行は empty bodies after mitigation (データは戻っていない): 2。緩和は通り道を変えただけで、すでに書かれた行は戻していません。 2行を戻すのは別の作業(ベースバックアップと WAL からの復元)で、原因の修正もまだです。
実演でフラグを切る判断をした時点で、分かっている必要があったのはどれですか。
壊れる前に用意する、鈍い道具
Workbook はこの種の手を generic mitigation(汎用の緩和策)と呼び、例を2つ挙げます。
For example, responders could roll back a recent release when an outage is correlated with the release cycle, or reconfigure load balancers to avoid a region when errors are localized.
同じ段落で、限界も認めています。
It’s important to note that generic mitigations are blunt instruments and may cause other disruptions to the service. However, while they may have broader impact than a precise solution, they can be put in place quickly to stop the bleeding while the team discovers and addresses the root cause.
鈍い道具で、別の混乱を起こしうる。「緩和すれば安全」ではありません。それでも使うのは、速く止められるからです。そして道具は、壊れてから作っても間に合いません。
The right time to create general-purpose mitigation tools is before an incident occurs, not when you are responding to an emergency.
実演でフラグを切れたのも、v2 を出す前にフラグの内側へ新機能を入れておいたからです。
ここで逆向きの誤りに注意します。「理解より先に手を打て」は「とにかく再起動しろ」ではありません。SRE Book 第14章の優先順位は Stop the bleeding, restore service, and preserve the evidence for root-causing. で、証拠の保全が同じ文に並びます。第4期で扱うとおり、壊れた後はまず影響がどこまで届いたかを確定させ、直してみる・再起動するはその確定の機会を先に潰します。本教材の整理として、緩和に選ぶのは戻せる・記録に残る・証拠を消さない手です。フラグを切る・経路から外すは、壊れたコードや台を消さずに残します。
アプリで止めるか、経路で止めるか
Workbook の2つの例は、止める段が違います。
アプリ層: 直前のリリースを戻す、フラグを切る。要る「場所」はどの変更かです。実演ではフラグを切りました。v1 へのロールバックによる緩和は実演していませんが、仕組みとしてはコードを入れ替えるだけで、DB の行を戻さない点は同じです。
経路層: ロードバランサの設定で、エラーの偏った地域や台へ要求を送らない。要る「場所」はどこで起きているかで、どの変更が悪いかは知らなくてかまいません。外した台は動いたまま残るので、調べる対象も消えません。本教材では実演していません。
Workbook は同じ節で、利用者の側から言い切ります。
Ultimately, customers do not care whether or not you fully understand what caused an outage. What they want is to stop receiving errors.
エラーが特定のリージョンに偏っているが、原因はまだ分からない。Workbook の generic mitigation の例に沿う手はどれですか。
アプリ層の緩和(フラグを切る・戻す)
必要な場所は、どの変更から壊れ始めたか。本教材の実演では、フラグを切ると同じ操作が 404 になり新たな破壊は止まったが、空になった2行は空のままだった。
経路層の緩和(ロードバランサから外す)
必要な場所は、エラーがどの地域や台に偏っているか。どの変更が原因かは知らなくてよい。外した台は動いたまま残り、後から調べられる。本教材では実演していない。
2つの緩和は、要る情報がそれぞれ違います。共通して「やっていないこと」は何でしょうか。
緩和の後に、まだ残っている作業を数えてみてください。
この章のまとめ
- Workbook の順番は 評価 → 緩和 → 原因分析 → 終わった後に修正と事後検証。緩和と修正は別の項目。
- 緩和に要るのは原因の詳細ではなく場所(
you only need to know the location of the root cause)。 - 汎用の緩和策は
blunt instruments。速く止血できるが、別の混乱を起こしうる。作るのは壊れる前。 - 「先に手を打つ」は「とにかく再起動」ではない。
preserve the evidenceと並ぶ。戻せる・記録に残る・証拠を消さない手を選ぶ。 - 実演ではフラグを切ると新たな破壊は止まったが、空になった2行は空のままだった。緩和はデータを戻さない。
- NIST SP 800-61 Rev.3 は Rev.2 を置き換えたが、循環モデルを否定はしていない。
自分の現場で確かめる
読んだだけでは身につきません。手元の環境で実際に見てみてください。
理解度チェック
読んだ直後は「分かった」と感じやすいものです。実際に解いて確かめてください。
SRE Workbook 第9章の事例の振り返りは、進行中のインシデントへの対処を4項目で並べます。4項目目はどれですか。
用語集(3語)
- 緩和 (mitigation)
- 原因を直す前に、利用者への影響を止めたり減らしたりする手。Workbook の箇条では影響の評価の次、原因分析の前に置かれる。
- 汎用の緩和策 (generic mitigation)
- 原因が十分に分かる前に初動の担当者が打てる手。Workbook の例は、リリースと相関するときのロールバックと、エラーが局所的なときにロードバランサでその地域を避けること。
- 修正 (fix)
- 原因そのものを直すこと。Workbook の箇条では、インシデントが終わった後に事後検証と一緒に置かれる。
出典(一次ソース)
- SRE Workbook — Chapter 9. Incident Response (Copyright © 2018 Google, Inc. / CC BY-NC-ND 4.0) ↗
- Site Reliability Engineering — Chapter 14. Managing Incidents (CC BY-NC-ND 4.0) ↗
- NIST SP 800-61 Rev. 3 — Incident Response Recommendations and Considerations for Cybersecurity Risk Management: A CSF 2.0 Community Profile (April 2025) ↗