Runbookを2層に分ける理由

Runbookは障害の正解集ではありません。予期しないDependency、配布変更、データ状態、Trafficが重なり、同じ症状でも原因は違います。固定すべきは原因より対応方法です。誰がIncidentを判断し、何でSeverityを決め、誰が指揮し、どう被害を減らし、いつ復旧を宣言し、何を記録・通知・引き継ぐかを合意します。

NISTの最新指針も、全状況の詳細手順を事前作成するのは非現実的としています。[6] 役割と権限を定め、反復的・重要・時間に敏感な活動へ実行可能な手順を用意します。Runbookは障害を予言するのでなく、障害中も同じ運用規則を使うためのものです。

全Commandと障害種類を一文書へ入れるとすぐ古くなります。共通のDetection、Triage、Severity、指揮、Communication、Handoff、Closure、ReviewはCoordination Runbookへ置きます。DB Failover、Queue処理、外部API迂回、Cache停止、Service再起動、配布Rollbackなどは、システム別Technical Runbookへ分けます。

一Incidentで複数のTechnical Runbookを使えても、誰がどの状態で何を実行し、どう結果を確認するかは一つのCoordination Runbookが統制します。技術Stackが変わっても、対応管理全体の再設計を減らせます。

対応状態を先に合意する

一人は復旧済みと考え、別の人は原因調査中というように、現在状態の理解もずれます。次のモデルが共通言語になります。

Detected → Triaged → Declared → Mitigating → Recovering → Monitoring → Resolved → Reviewed

これは唯一の標準ではなく運用例です。名前より各状態の目標が重要です。Mitigatingは完璧な修正より被害拡大の停止、Recoveringは一時措置に頼らない意図した状態への復帰、Monitoringはユーザー結果とデータの確認です。悪化時には前段へ戻れる必要があります。

サービスの仕組み

監視から復旧・改善までつながる運用 — サービス指標とアラートを基準に対応し、変更履歴と事後報告を次の改善につなげます。

Detection:発見した事実を記録する

始まりは監視Alertだけではありません。ユーザーの報告、Supportの反復問い合わせ、Providerの障害通知、配布担当者の異常発見もあります。

原因の推測より初期事実を残します。検知時刻と経路、失敗する操作、影響しそうなユーザー・地域・機能、最初の症状、根拠のDashboard・Log・Trace・Request IDです。

Alert受信とIncident判断は別です。Page・Ticket・Dashboardへの振り分けは別問題で、この記事は観測した事象をIncident Responseへ移した後を扱います。

Triage:原因より影響範囲を先に把握する

直前の配布やDB CPU上昇から原因を早く断定するのは危険です。仮説は必要でも事実と混ぜません。初期目的はRoot Cause Analysisではなく、現在の運用状況の共通理解です。

実ユーザー影響、失敗する主要Journey、拡大またはRegion・Tenant・機能・Versionへの限定、直前変更、Dependency状態、書込み・整合性リスク、Security・Privacy事故の可能性、Workaroundを確認します。

Infrastructure Metricは原因の重要な信号ですが、それだけで影響を判定しません。復旧も同じ理由でユーザージャーニーの結果に結びます。

Severity:数字より判断根拠を残す

Severityは人員、意思決定参加者、連絡経路、中断する他作業を決めるためです。ただし10分ならSEV-1、30分ならSEV-2という全組織共通表は作れません。NISTもScope、Impact、Time-critical Nature、Recoverabilityなどで優先順位を評価します。[6] 少なくとも表の軸を確認します。

各組織でLabelと結び、初期宣言後も固定しません。影響拡大やデータリスク発見で上げ、範囲限定が確認されれば調整できます。何が変わり、なぜ変更したかをTimelineに残します。

判断軸
質問
ユーザー影響主要Journeyが止まったか。一部機能か全体か。
影響範囲一部ユーザー・Region・Tenantか、急拡大中か。
データ損失・重複・汚染・整合性破損の可能性はあるか。
Security・Safety侵害や個人情報露出の可能性はあるか。
時間敏感性時間とともに損害が累積し、復旧が難しくなるか。
迂回可能性安全なWorkaroundがあるか。
復旧可能性既知の緩和・復旧経路か、不確実か。
調整の複雑さ一チームか、複数チームやProviderが必要か。
不確実性原因だけでなく影響範囲自体も不明か。
Severity判断軸:NIST SP 800-61 Rev. 3のScope・Impact・Time-critical Nature・Recoverabilityを運用向けに展開

Incident Commanderが自分ですべて直さない理由

大きな障害ほど技術以上にCoordinationが問題になります。多数が同じLogや設定を操作し、別Slack Threadで違う仮説を話すと、人数が増えるほど把握しにくくなります。

Google SREはIC、Communications Lead、Operations Leadを分けます。[1] ICは全体と優先順位、Operationsは実作業、Communicationは情報流を担います。小規模なら兼任できますが、最終調整責任者とProduction変更権限者は曖昧にしません。

ICは最優秀Debuggerでなくて構いません。全Commandを実行すると全体・優先順位・連絡を見失います。必要なのは全正解でなく、既知・未知と次の意思決定を維持する権限と責任です。

Mitigation:原因修正より被害を減らす

MitigationとRecoveryを同義にすると対応が揺れます。Mitigationは現在の影響と追加損害を抑えるもので、一時状態でも構いません。機能停止、Traffic迂回、書込み制限、過負荷要求の削減が原因調査より先になる場合があります。

配布が原因候補ならRollbackも選択肢ですが、可否はCodeだけでなく設定・Schema・データ・Feature Exposure・Trafficの互換性で決まります。仕組み自体は別のRollback設計です。

特定手段を正解に固定せず、各行動に表の記録を求めます。実行したことと効果があったことを区別します。

項目
記録内容
Action何を変更するか
Owner誰が実行するか
Objectiveどの影響を減らすか
Expected Signal有効ならどの信号が変わるか
Risk追加リスク
Safety Control失敗時の停止・復旧方法
Result実際の結果
Evidence判断根拠
Mitigation行動ごとの記録項目

Evidence:緩和中に何を残すか

緊急時は記録を後回しにしがちですが、再構成には変更前と対応過程が必要です。可能なら破壊的変更前に稼働Version、設定とFlag、Dashboard・Query基準時刻、Log・Trace・Request IDを残します。Queue・DB状態、Dependency、誰が何をなぜ変えたか、結果の変化も加えます。

NISTはデータとMetadataの整合性・由来を保つよう勧めますが、すべてに法的なChain of Custodyが必要とはしていません。[6] 通常障害の基本目標は後から再構成できる記録です。

侵害や個人情報流出の疑いならSecurity・Legal ProcedureとEvidence Handlingへ移ります。ただし証拠保存のため被害を放置しません。拡大中ならICがContainmentと保存の優先順位を明示します。

Recovery:一時状態から正常運用へ

緩和でError Rateが下がっても終わりではありません。重要機能を止めて利用可能にした状態はMitigatedでも、完全Recoveryではない場合があります。

合意したTarget Stateへ戻します。一時変更解除、正常Traffic、整合性処理、Backlog解消、Dependency正常化が含まれ、必要ならRollback・Roll-forward・Failover・Restoreを使います。復旧作業完了とService復旧確認を再び分けます。

復旧確認:Serverが緑なら終わりか

宣言は早まりがちです。CPU低下、Pod Running、Log減少は良い信号でも、正常利用を意味しません。

NIST Rev. 3も重要Serviceの実復元、整合性と正常動作の検証、その後の監視、終了基準に沿ったRecovery終了を求めます。[6] 最初に影響したユーザー結果へ戻って確認します。

失敗Journeyの再成功、残る遅延、欠損・重複・不整合、Queue蓄積、特定Region・Tenant・Segmentの失敗、Dependencyの正常経路、MonitoringとAlert、一時迂回の新リスクを確認します。

観察時間はTraffic、失敗周期、処理方式によります。15分正常なら完了という汎用基準でなく、Service別Acceptance CriteriaとObservation Conditionを定めます。

Communicationは独立したWorkstream

後で告知するだけではありません。Responder間の調整、経営・Support・営業などへの影響共有、ユーザーや外部機関への連絡が同時に存在し得ます。

NISTは調整、通知、公的連絡、情報共有を別活動とします。[6] Google SREも技術緩和と並び、現在の影響と対応状態の明確な伝達を重視します。[1]

更新にはIncident、現在状態・Severity、ユーザー影響、範囲、前回からの変化が必要です。進行中の緩和・復旧、Workaround、未知事項、次の判断点、次回更新も記します。

Next Updateは根拠のない復旧ETAではありません。復旧時刻が不明なら30分以内と推測せず、次の手順完了時や合意したCadenceで更新します。

Handoff:メッセージを残すだけでは終わらない

長期障害では一人の継続対応自体がリスクです。交代の要否より、状態が損失なく移るかが問題です。Google SREもIncoming ICへ説明した後、明示的に指揮権を引き受けさせます。[1]

現在の影響・Severityと根拠、ICと役割、確認事実と仮説、実行済み緩和と結果、進行中作業、失敗・再実行禁止の作業、次の判断点を渡します。内外の連絡状況、証拠場所、残るリスクも必要です。

Outgoingが文書を残すだけでは完了しません。Incomingが理解して責任を明示的に受けた時刻を記録します。

いつIncidentを終了するか

原因を完全に知るまで開き続ける必要はありませんが、Error Rateの一時低下で閉じてもいけません。Resolved条件を事前合意します。

被害停止、Journey基準達成、データ・Queue・非同期残問題の許容性、Dependency確認、監視正常、一時措置の記録と未解除措置のOwner、残存リスクの記録と認識、必要連絡の更新、Review Owner指定が条件です。

NISTも終了を技術作業完了だけでなく、復旧確認、終了基準、文書化を含む過程として扱います。[6]

振り返り:原因一行で終わらせない

原因は必要な問いですが、それだけでは同じ障害の再発をかろうじて防ぐ程度です。対応自体の改善には広い検討が必要です。

Detectionではユーザーより早く気付いたか、信号不足はないか。Triageでは範囲把握と誤仮説による浪費。Severityでは必要人員の早期参加。Coordinationでは指揮と変更権限。Mitigationでは被害削減の優先。Recoveryでは一時緩和との区別。Verificationではユーザー結果とデータ。Communicationでは必要な人への適時共有。HandoffではContext損失を確認します。

Google SREも原因分析だけでなく検出・緩和・調整・連絡を改善対象にします。[5] Actionは実Backlogへつなぎます。Blamelessは責任不要ではありません。個人を責めず、システムが行動を許容・要求した理由を調べ、修正にはOwnerを付けます。

Follow-up:文書を書けば改善したのか

Postmortemが文書庫で終わると次回の行動は変わりません。各Follow-upには表の最低情報が必要です。

緊急に入れたFlag、Firewall Rule、Traffic迂回、手動Cronは別Cleanup Itemにします。最後の段階は会議ではなく、発見したGapがBacklogのOwnershipを持つ瞬間です。

Field
内容
Gap発見した失敗可能性
Action具体的な変更
Owner完了まで責任を持つ人・チーム
Priority他運用作業との優先順位
Target合意した完了目標
Acceptance Evidence完了を判断する証拠
Tracking IDIssue・Ticketなど追跡先
Status現在状態
ReviewからBacklogへ移す最低情報

Runbook Templateに何を含めるか

これは特定原因のTechnical Runbookではありません。Service別Commandと復旧手順は別に結び、共通状態と責任を管理します。MetadataからImprovementまで17ブロックで、検知、分類、Severity、緩和、Evidence、復旧、連絡、引き継ぎ、終了、Reviewを追います。

Roles & Authorityでは6役割の担当者と責任を記します。兼任しても指揮権と変更権限は明示します。Severity変更は上書きせず、時刻、Previous、New、理由、決定者を追加します。

Status Updateは連絡項目を様式化します。HandoffはOutgoing説明、Incoming質問時間、進行中変更確認、次判断点の合意、明示的受入、他Responderへの指揮交代通知の6項目です。配布Rollbackの詳細は別Runbookを使います。

Incident Commander
全体状態・優先順位・Decisionを管理します。最優秀Debuggerである必要はありません。
Operations / Technical Lead
緩和と復旧を実行します。
Communications Owner
現在状態を内外へ伝えます。
Scribe / Timeline Owner
Timeline・判断・Evidenceを記録します。
SME
特定システムを分析する専門家です。
Production Change Authority
本番変更を承認・実行する権限を持ちます。
ブロック
記録フィールド
確認項目
Runbook Metadatarunbook_name · service · runbook_owner · last_reviewed_at · review_due_at · critical_user_journeys · related_alerts · technical_runbooks · recovery_procedures · rollback_guide · escalation_path · communication_channelsリンクを定期確認。
Detectionincident_id · detected_at · detected_by · detection_source(alert, user_report, support, operator, dependency, other) · observed_symptom · suspected_user_impact · affected_journey · affected_scope · initial_confidence · initial_evidence(dashboards, logs, traces, request_ids, external_status)推測より最初の事実を記録。
Triage & Incident Declarationdeclared(true, false) · declared_at · declaration_owner · current_state · initial_severity · severity_rationale · known_facts · hypotheses · unknowns実影響、主要Journey、Scopeと拡大、直前の配布・設定・Feature、Dependency、整合性リスク、Security/Privacy、Workaround、宣言の要否。
Roles & AuthorityIncident Commander · Operations / Technical Lead · Communications Owner · Scribe / Timeline Owner · SME · Production Change Authority:役割別の担当者と責任小チームは兼任可能。現在の指揮とProduction変更権限者を明記。
Severity Assessmentcurrent_severity · assessed_at · assessed_by · user_impact · scope · data_risk · security_or_safety_risk · time_criticality · workaround · recoverability · coordination_complexity · uncertainty · rationaleSeverity変更は上書きせず、時刻・Previous・New・理由・決定者を追加。
Current Incident Statestate(DETECTED, TRIAGED, DECLARED, MITIGATING, RECOVERING, MONITORING, RESOLVED) · current_objective · current_user_impact · current_scope · latest_decision · next_decision_point状態ごとに現在目標を一行で記録。
Mitigation LogAction · Owner · Objective · Expected Signal · Risk / Safety Control · Status · Result · Evidence一行動一行。実行と効果を区別。
Evidence Preservationevidence_location · retention_requirement · sensitive_data_present · security_or_legal_escalation配布・Artifact版、Configuration・Flag、Dashboard・Query基準時刻、Log・Trace・Request ID、Stateful SystemとDependency、実変更者・理由・結果。Security/Privacyは別Evidence手順。
Recovery Plantarget_state · recovery_owner · prerequisites · technical_runbooks · recovery_actions · temporary_controls_to_remove · known_residual_risk配布Rollbackの詳細は別Runbook。
Recovery Verificationverification_started_at · verification_owner · journey_evidence · data_evidence · dependency_evidence · monitoring_evidence · observation_condition · verification_resultJourney再成功、遅延許容、欠損・重複・整合性、Queue・非同期Backlog、Region・Tenant・Segment、Dependency正常経路、監視CoverageとAlert、一時措置の残存Risk、Service別観察条件。
CommunicationAudience(Incident Responders · Internal Stakeholders · Users / Customers · External Provider · Legal / Security / Regulatory) · Owner · 伝達内容 · Last Update · Next Update Trigger受信者ごとに一行。
Status Update TemplateIncident · Current State · Severity · User Impact · Affected Scope · Changes Since Previous Update · Mitigation / Recovery in Progress · Available Workaround · Known Unknowns · Next Decision Point · Next UpdateNext Updateは根拠のない復旧ETAではなく次の更新点。
Handoffhandoff_at · outgoing_owner · incoming_owner · current_user_impact · current_severity · severity_rationale · current_state · confirmed_facts · active_hypotheses · unknowns · completed_actions · actions_in_progress · failed_or_unsafe_actions · pending_actions · next_decision_point · communication_status · evidence_location · guardrails · incoming_owner_accepted_atOutgoing説明、Incoming質問時間、進行中本番変更確認、次判断点合意、明示的受入、他Responderへの指揮交代通知。
Closureresolved_at · resolved_by · closure_rationale · remaining_risks · temporary_controls · post_incident_owner被害停止、復旧検証合格、データ・Queue・Dependency・監視確認、一時変更全記録、未解除ControlのOwner、残Risk、連絡完了、Review Owner。
Post-incident Reviewreview_owner · review_date · incident_summary · timeline · user_impact · technical_factors · contributing_factors · detection_review · triage_review · severity_review · coordination_review · mitigation_review · recovery_review · verification_review · communication_review · handoff_review · what_worked · what_did_not_work · remaining_unknownsRoot Cause一行で終えない。
Follow-up OwnershipID · Gap · Action · Owner · Priority · Target · Acceptance Evidence · Tracking ID · Status一項目一行。緊急の一時措置は別Cleanup Item。
Runbook Improvementrunbook_gap_found · runbook_change_required · change_owner · technical_runbook_change_required · alerting_change_required · observability_change_required · deployment_change_required · next_review_or_drill実IncidentごとにRunbook自体を修正。
Incident Runbook Template:共通状態と責任を管理。Service別Commandと復旧手順は別Technical Runbookへ接続

Runbookの完成度はいつ分かるか

障害時に初めて読む文書にしてはいけません。平時にService・On-call担当者のSeverity理解、IC権限、連絡経路、技術リンク、引き継ぎ可能性を確認します。

実IncidentのたびにRunbook自体も更新します。NIST Rev. 3はLessons Learnedを復旧後の一回だけでなく、対応全体の改善へ還元します。[6]

よいRunbookでも障害はなくなりませんが、ばらばらな対応が生む二次障害を減らします。最初から原因を知らなくても、判断者、今守るもの、行った変更、復旧を示す証拠、次へ渡すものが分かれば、対応は反復可能な運用になります。