Home
Get Started
実践ガイド
外部仕様設計
バッチ処理仕様設計
UAC 仕様設計
データ仕様設計
インフラ設計
移行計画
テスト方針・計画
開発プロセス・規約
障害対応・性能の運用設計
システム稼働後の安定運用と迅速な障害復旧を実現するため、障害対応プロセス、バックアップ・リストア方式、性能・キャパシティ管理の方針を定義します。
🎯 概要
- 目的: システム稼働後の障害対応プロセス、バックアップ・リストア方式、性能・キャパシティ管理の方針を定義し、安定した運用と迅速な障害復旧を実現する
- スコープ: 障害検知・初動対応・エスカレーションフロー、バックアップ・リストア設計、インシデント管理、キャパシティ・性能管理をカバーする。日常的な運用作業の詳細手順は運用設計書で別途定義
- 推奨する実施タイミング: 通常、基本設計の後半、アーキテクチャ設計・非機能要件設計の後に実施する
- 関連するステークホルダー: 運用チーム、インフラチーム、開発チーム、プロジェクトマネージャー、セキュリティチーム
📥 重要な前提知識・インプット
- 前提知識: 障害管理プロセス、RPO/RTO、バックアップ方式、インシデント管理、キャパシティプランニング、監視システムの理解
- インプット: システムアーキテクチャ設計書、非機能要件(可用性・性能・拡張性)、運用要件、監視要件、SLA定義
📄 成果物の定義
- ドキュメントテンプレート: 📄
[テンプレ]障害対応・性能の運用設計書
- 必須要素: バックアップ・リストア設計書、インシデント管理フロー、障害検知・エスカレーション基準、キャパシティ管理計画、性能監視項目一覧、定期負荷試験計画
✅ 品質基準・レビュー観点
✅ 品質チェックリスト:
| チェック項目 | チェック内容 |
|---|---|
| RPO/RTO達成可能性 | バックアップ頻度とリストア手順でRPO/RTOを満たせる |
| 障害検知の網羅性 | 主要な障害パターンが監視で検知できる |
| エスカレーション経路 | エスカレーション基準と連絡先が明確である |
| キャパシティ予測 | リソース不足の予兆を事前に検知できる |
| 実施可能性 | 運用チームのスキルで対応可能な手順である |
👁️🗨️ レビュー観点:
- 要件との整合性: 非機能要件(可用性・性能・RTO/RPO)が運用設計に反映されているか
- 実施可能性: 運用チームが実際に実行できる現実的な手順か
- 完全性: 障害検知から復旧までのプロセスに漏れがないか
- 測定可能性: 監視項目と閾値が具体的で測定可能か
- 継続可能性: 定期的な負荷試験やバックアップテストが計画されているか
🧪成果物のサンプル
# 障害対応・性能の運用設計
## バックアップ・リストア設計
### バックアップ・リストア方針
**基本方針**
- システム方式設計「可用性設計」で定義した方針に基づき、データ保護を実現する
- RPO(Recovery Point Objective): 1時間以内
- RTO(Recovery Time Objective): 4時間以内
- バックアップデータは暗号化して保存
- 定期的なリストアテストを実施(月次)
**バックアップ対象**
| データ種別 | バックアップ方式 | 頻度 | 保存期間 | 保存先 |
|-----------|---------------|------|---------|-------|
| DBデータ(フル) | mysqldump / pg_dump | 日次 03:00 | 30日 | S3 |
| DBデータ(増分) | バイナリログ / WALログ | 1時間ごと | 7日 | S3 |
| ファイルストレージ | rsync | 日次 04:00 | 30日 | S3 |
| 構成ファイル | Git管理 + S3 | コミット時 | 無期限 | GitHub + S3 |
| ログファイル | Fluentd → S3 | リアルタイム | 90日 | S3 Glacier |
### バックアップ手順
**手順の概要**
1. バックアップスクリプトの実行(cron / Lambda)
2. データのダンプ・圧縮
3. クラウドストレージへのアップロード
4. バックアップ成功の確認・通知
5. 古いバックアップの自動削除
**バックアップ実行タイミング**
- フルバックアップ: 日次 03:00(システム負荷が低い時間帯)
- 増分バックアップ: 1時間ごと
- 手動バックアップ: リリース前、大規模データ変更前
### リストア手順
**リストア実行フロー**
```mermaid
graph TD
A[リストア要請] --> B[バックアップファイル選定]
B --> C[ステージング環境でリストアテスト]
C --> D{リストア成功?}
D -->|No| E[別バックアップで再試行]
E --> C
D -->|Yes| F[本番環境へのリストア承認取得]
F --> G[本番DBの現状バックアップ]
G --> H[リストア実行]
H --> I[データ整合性確認]
I --> J[アプリケーション動作確認]
J --> K[リストア完了報告]
```
**リストア時の注意事項**
- 本番環境へのリストアは必ず承認フローを経る
- リストア前に現在のDBのバックアップを取得
- まずステージング環境でリストアテストを実施
- リストア後はアプリケーションの動作確認を実施
- リストア作業のログを記録
---
## インシデント管理
### 障害検知方法
**検知経路**
```mermaid
graph TD
A[障害発生] --> B[監視システム検知]
A --> C[利用者報告]
B --> D[自動アラート PagerDuty/Slack]
C --> E[問い合わせ窓口 メール/電話]
D --> F[オンコール担当者]
E --> F
F --> G[初動対応開始]
```
**監視項目と検知基準**
| 監視項目 | 検知基準 | アラートレベル | 通知先 |
|---------|---------|--------------|-------|
| サーバーダウン | ヘルスチェック3回連続失敗 | Critical | PagerDuty |
| CPU使用率 | 90%以上が5分継続 | Warning | Slack |
| メモリ使用率 | 95%以上 | Critical | PagerDuty |
| ディスク使用率 | 85%以上 | Warning | Slack |
| API応答時間 | 3秒以上が10回連続 | Warning | Slack |
| エラー率 | 5%以上 | Critical | PagerDuty |
| DB接続エラー | 1件でも発生 | Critical | PagerDuty |
### 初動対応手順
**障害発生時の対応フロー**
```mermaid
graph TD
A[アラート受信] --> B[インシデント起票 JIRA/ServiceNow]
B --> C[影響範囲の確認]
C --> D{サービス影響あり?}
D -->|Yes| E[ユーザー通知 ステータスページ更新]
D -->|No| F[内部対応のみ]
E --> G[ログ採取]
F --> G
G --> H[切り分け作業]
H --> I{原因特定?}
I -->|Yes| J[対応実施]
I -->|No| K[エスカレーション]
K --> L[上位担当者/開発チーム参加]
L --> H
J --> M[復旧確認]
M --> N[ユーザー通知 復旧完了]
N --> O[事後報告書作成]
```
**初動対応チェックリスト**
- [ ] インシデントチケット起票(件名、発生時刻、検知方法)
- [ ] 影響範囲の確認(対象サービス、ユーザー数、データ影響)
- [ ] ユーザー通知(ステータスページ更新、問い合わせ対応準備)
- [ ] ログ採取(アプリログ、アクセスログ、エラーログ、DBログ)
- [ ] 監視ダッシュボード確認(CPU、メモリ、ネットワーク)
- [ ] 直近の変更履歴確認(デプロイ、設定変更、データ変更)
**採取するログ**
- アプリケーションログ(過去1時間分)
- アクセスログ(過去1時間分)
- エラーログ(過去1時間分)
- システムログ(/var/log/messages, syslog)
- ミドルウェアログ(Web Server, App Server, DB)
- クラウドサービスログ(CloudWatch Logs など)
**切り分けの観点**
- いつから発生しているか(開始時刻)
- どの機能・画面で発生しているか
- 特定ユーザーのみか、全体か
- 外部要因(ネットワーク、外部API)の影響は?
- 直近の変更(デプロイ、設定変更)との関連性
### エスカレーション手順
**エスカレーションフロー**
```mermaid
graph LR
A[Level 1 オンコール担当] -->|30分経過or判断不可| B[Level 2 運用リーダー]
B -->|1時間経過or技術判断必要| C[Level 3 開発チーム]
C -->|重大インシデント| D[経営層 広報担当]
```
**エスカレーション基準**
| レベル | 対応者 | 条件 | 通知方法 |
|-------|-------|------|---------|
| Level 1 | オンコール担当 | 全アラート | PagerDuty自動通知 |
| Level 2 | 運用リーダー | 30分以内に解決不可 / サービス影響大 | 電話 + Slack |
| Level 3 | 開発チーム | 技術的判断が必要 / コード修正必要 | 電話 + Slack + JIRA |
| Level 4 | 経営層・広報 | 重大インシデント / メディア対応必要 | 電話 + メール |
**エスカレーション時の情報共有**
- インシデントチケットURL
- 発生時刻・経過時間
- 影響範囲・ユーザー数
- 現在の対応状況
- 採取済みログの保存場所
### 障害区分(重大度分類)
| 重大度 | 定義 | 対応目標時間 | 例 |
|-------|------|------------|---|
| Critical | サービス全停止またはデータ損失 | 検知後15分以内に初動 | DBサーバーダウン、全ユーザーアクセス不可 |
| High | 主要機能が使用不可 | 検知後30分以内に初動 | 決済機能エラー、ログイン不可 |
| Medium | 一部機能の劣化 | 検知後2時間以内に初動 | レポート生成遅延、一部ページ表示遅延 |
| Low | 軽微な問題 | 営業時間内に対応 | UIの表示崩れ、ログ出力異常 |
**重大度判定のポイント**
- サービス停止の範囲(全体 / 一部)
- ユーザー影響の大きさ(全ユーザー / 特定ユーザー)
- ビジネスへの影響(売上損失、信用失墜)
- データ損失リスク
### 暫定対応から恒久対応の流れ
**対応フェーズ**
```mermaid
graph TD
A[障害検知] --> B[初動対応 ログ採取・切り分け]
B --> C[暫定対応 応急処置]
C --> D[サービス復旧]
D --> E[根本原因分析 RCA: Root Cause Analysis]
E --> F[恒久対応策の検討]
F --> G[恒久対応の実装 コード修正・設定変更]
G --> H[テスト ステージング環境]
H --> I[本番環境デプロイ]
I --> J[効果確認 再発防止確認]
J --> K[事後報告書作成 ポストモーテム]
```
**暫定対応の例**
- サーバー再起動
- 負荷の高いプロセスの停止
- 一時的な機能停止(機能フラグOFF)
- 手動でのデータ修正
- トラフィック制限
- キャッシュクリア
**恒久対応の例**
- コードのバグ修正
- インフラスペックの増強
- アーキテクチャの見直し
- 監視アラートの閾値調整
- 運用手順書の改善
- 自動化スクリプトの追加
**事後報告書(ポストモーテム)の記載内容**
- インシデント概要(発生日時、影響範囲、重大度)
- 発生原因(根本原因、直接原因)
- 対応経緯(タイムライン)
- 暫定対応内容
- 恒久対応内容
- 再発防止策
- 学んだ教訓
---
## キャパシティ・性能管理
### 基本方針
**参照先**
- システム方式設計「性能・拡張性設計」を参照
- 非機能要件「性能・拡張性」で定義した目標値を維持
**管理方針**
- リソース使用率を定期的に監視し、キャパシティ不足を予測
- トラフィック増加に対して事前にスケールアウト
- パフォーマンステストを定期実施し、劣化を早期検知
- キャパシティ計画を四半期ごとに見直し
### 予兆検知(潜在的ボトルネック)
**監視指標とアクション基準**
| 監視項目 | 警告閾値 | 対応アクション |
|---------|---------|--------------|
| CPU使用率 | 70%以上が1週間継続 | スケールアウト検討 |
| メモリ使用率 | 80%以上 | メモリリーク調査 / スケールアップ |
| ディスク使用率 | 70%以上 | 不要ファイル削除 / ストレージ拡張 |
| DB接続数 | 最大接続数の80%以上 | コネクションプール設定見直し |
| API応答時間 | 平均1.5秒以上 | スロークエリ調査 / キャッシュ導入 |
| ネットワーク帯域 | 80%以上 | CDN導入検討 / 帯域拡張 |
**予兆検知フロー**
```mermaid
graph TD
A[リソース監視] --> B{閾値超過?}
B -->|No| A
B -->|Yes| C[警告通知 Slack]
C --> D[トレンド分析 過去30日]
D --> E{増加傾向?}
E -->|Yes| F[キャパシティ拡張計画]
E -->|No| G[一時的な高負荷 経過観察]
F --> H[予算承認]
H --> I[インフラ拡張実施]
```
**トレンド分析の観点**
- 過去30日間の平均値・最大値の推移
- 曜日・時間帯ごとのパターン
- イベント・キャンペーンとの相関
- 季節変動の考慮
### 定期負荷試験の方針
**実施頻度**
- 通常負荷試験: 四半期ごと(年4回)
- ピーク負荷試験: 半期ごと(年2回)
- リグレッション試験: リリース前(随時)
**負荷試験シナリオ**
| シナリオ | 目的 | 負荷条件 | 成功基準 |
|---------|------|---------|---------|
| 通常負荷 | 日常運用での性能確認 | 想定同時接続数の100% | 応答時間 < 1秒 |
| ピーク負荷 | 繁忙期の性能確認 | 想定同時接続数の150% | 応答時間 < 2秒 |
| 耐久試験 | 長時間運用での安定性確認 | 通常負荷を24時間継続 | メモリリークなし |
| スパイク試験 | 急激なトラフィック増加への対応 | 5分間で10倍の負荷 | エラー率 < 1% |
**負荷試験ツール**
- JMeter: APIエンドポイントの負荷試験
- Gatling: シ 🔄 設計の進め方・プロセス
🏗️ プロセス1: バックアップ・リストア設計
設計対象:
システムで扱うデータのバックアップ方式、取得頻度、保存期間、リストア手順を決定する。
具体例:
- どのデータをバックアップ対象とするか(DB、ファイル、構成情報、ログなど)
- バックアップ方式(フル、増分、差分)と実行頻度をどう設定するか
- RPO/RTOを満たすバックアップ頻度とリストア手順は何か
- バックアップデータの保存先(クラウドストレージ、別リージョンなど)
- リストアテストの実施頻度と手順
設計原則:
- RPO/RTO要件の遵守: 非機能要件で定義されたRPO/RTOを満たすバックアップ頻度とリストア手順を設計する
- データ重要度に応じた設計: 業務への影響度に応じてバックアップ頻度と保存期間を適切に設定する
- 暗号化とセキュリティ: バックアップデータは暗号化して保存し、アクセス制御を適切に設定する
- 定期的なテスト: リストア手順の有効性を定期的にテストし、実際の障害時に確実に復旧できることを確認する
- 自動化の推進: バックアップ取得とテストを自動化し、人的ミスを排除する
文書化の推奨表現:
- バックアップ対象一覧: データ種別ごとにバックアップ方式、頻度、保存期間、保存先を表形式で整理する
- バックアップ・リストア手順: 具体的な実行手順をステップバイステップで記載する
- リストアフロー図: リストア判断から実行、確認までのフローを図示する
- テスト計画: リストアテストの実施頻度、対象、成功基準を明記する
🏗️ プロセス2: 障害検知・インシデント管理フロー
設計対象:
障害の検知方法、初動対応手順、エスカレーションルール、重大度分類を決定する。
具体例:
- どのような監視項目・閾値で障害を検知するか
- アラート発生時の初動対応チェックリストは何か
- どの基準でエスカレーションするか(時間経過、影響範囲、技術判断の必要性)
- 重大度(Critical/High/Medium/Low)をどう分類するか
- 暫定対応から恒久対応への移行プロセス
設計原則:
- 早期検知の実現: 障害を自動検知できる監視項目と閾値を設定し、通知を迅速に届ける
- 明確な責任範囲: レベル別のエスカレーション基準と対応者を明確にし、判断の迷いをなくす
- 影響範囲の最小化: 初動対応で影響範囲を確認し、必要に応じてユーザー通知を実施する
- 根本原因の追求: 暫定対応で復旧後も根本原因を分析し、恒久対応で再発を防止する
- 学習と改善: ポストモーテムで学んだ教訓を文書化し、プロセス改善につなげる
文書化の推奨表現:
- 障害検知フロー図: 検知経路(監視システム、ユーザー報告)から初動対応開始までの流れを図示する
- 監視項目・閾値一覧: 監視項目ごとに検知基準、アラートレベル、通知先を表形式で整理する
- エスカレーション基準表: レベル別の対応者、条件、通知方法を明確にする
- 重大度分類表: 各重大度の定義、対応目標時間、具体例を記載する
- 対応フローチャート: アラート受信から復旧、事後報告までのプロセスを図示する
🏗️ プロセス3: キャパシティ・性能管理
設計対象:
システムのリソース使用状況を監視し、キャパシティ不足を予測・対応する方針と定期負荷試験計画を決定する。
具体例:
- どのリソース(CPU、メモリ、ディスク、ネットワーク)を監視するか
- キャパシティ不足の予兆をどう検知するか(閾値、トレンド分析)
- 予兆検知時のアクション(スケールアウト、最適化など)
- 定期負荷試験の実施頻度とシナリオ(通常負荷、ピーク負荷、耐久試験など)
- キャパシティ計画の見直しサイクル
設計原則:
- 予防的な管理: リソース不足が発生する前に予兆を検知し、事前に対応する
- トレンド分析: 過去のデータから成長トレンドを分析し、将来のキャパシティニーズを予測する
- 定期的な検証: 負荷試験を定期的に実施し、性能劣化を早期に発見する
- 柔軟なスケーリング: トラフィック変動に応じて迅速にスケールできる仕組みを整備する
- 継続的な改善: 監視データと負荷試験結果をもとに、継続的にボトルネックを解消する
文書化の推奨表現:
- 監視指標・アクション基準表: リソースごとに警告閾値と対応アクションを表形式で整理する
- 予兆検知フロー図: リソース監視からトレンド分析、キャパシティ拡張までの流れを図示する
- 負荷試験計画: 実施頻度、シナリオ、負荷条件、成功基準を明記する
- キャパシティ計画: 現在のリソース使用状況、成長予測、拡張計画を記載する
🚨 よくある失敗と予防策
🚧 実例収集後、追記予定
📚 参考資料・関連リンク
- 参考文献: 『SRE サイトリライアビリティエンジニアリング』(Google)、『The DevOps ハンドブック』、『インシデント管理実践ガイド』
- 関連する他のガイド: システムアーキテクチャ設計ガイド、非機能要件設計ガイド、監視設計ガイド、運用設計ガイド
- ツール・テンプレート: Mermaid(フロー図作成)、draw.io、バックアップスクリプトテンプレート、インシデント報告書テンプレート
テンプレートサイト: 📄テンプレート集