セクション 3:
SRE プラクティス
Google が提唱した Site Reliability Engineering の実装。SLI / SLO / SLA / Error Budget の定量的信頼性管理、Four Golden Signals と Multi-burn-rate アラート、Cloud Service Mesh(旧 ASM)による SLO 計測、Quotas / Reservations / DWS による容量計画、MIG / Cloud Run / GKE HPA・VPA・CA のオートスケーリング、drain / redirect / capacity / rollback のインシデント緩和、Blameless Postmortem までを体系的に押さえます。
🎯 学習目標
※ チェック状態はこのブラウザに保存されます。
🏛️ SRE 哲学 — class SRE implements DevOps
SRE は Google が 2003 年から実践している、ソフトウェアエンジニアリングの手法で運用問題を解決するアプローチ。DevOps が「理念・WHAT」なら、SRE は「実装・HOW」。
SLI / SLO / SLA
ユーザに影響する指標を選び、定量的に信頼性を測る。
Error Budget
1 − SLO で算出される「失敗の予算」。リリース判断の基準。
Toil 削減
運用作業の 50% 未満をトイルに。自動化で減らす。超えたら開発へ返却。
Blameless Postmortem
失敗を責めず、システム改善の素材に。Five Whys + Action Items。
Four Golden Signals
Latency / Traffic / Errors / Saturation の 4 軸監視。最小監視セット。
DORA 4 Metrics
Deployment Freq / Lead Time / MTTR / Change Failure Rate。
DevOps と SRE の対応関係
| DevOps の理念 | SRE での具体的実装 |
|---|---|
| Reduce organizational silos | Dev と SRE が 共通の SLO を持つ |
| Accept failure as normal | Error Budget で「許される失敗量」を数値化 |
| Implement gradual change | Canary、Multi-burn-rate alert、Error Budget Policy |
| Leverage tooling and automation | Toil 50% 以下 を目標 |
| Measure everything | SLI / SLO、Four Golden Signals |
3.1 SLI / SLO / SLA / Error Budget
4 つの最重要用語
| 用語 | フルネーム | 内容 | 例 |
|---|---|---|---|
| SLI | Service Level Indicator | 信頼性の 測定値(実測) | 過去 28 日の HTTP 成功率 99.95% |
| SLO | Service Level Objective | 内部の 目標値 | 月次 99.9% を維持 |
| SLA | Service Level Agreement | 顧客との 契約値(罰則あり) | 99.9% を下回ったら 10% 返金 |
| Error Budget | エラーバジェット | 1 − SLO(許される失敗量) | 99.9% SLO → 月 43.2 分 |
SLI ≥ SLO ≥ SLA の関係
Error Budget の計算
Four Golden Signals
Latency(遅延)
リクエスト処理時間。p50 / p95 / p99。平均は外れ値で歪む。
成功と失敗で別計測すること(失敗の方が速く返ることが多い)
Traffic(需要)
システムへの需要。RPS / QPS / TPS。負荷予測の基礎。
Errors(エラー率)
失敗したリクエストの割合。5xx 率、4xx 率、明示的失敗。
Saturation(混雑度)
サービスの混雑度。CPU / Memory / Disk I/O / Queue 長。100% 到達前に対処(予測指標)。
SLI のタイプ
| タイプ | 定義 | 例 |
|---|---|---|
| Availability | リクエスト成功率 | HTTP 200 / 全リクエスト |
| Latency | 応答時間が閾値以下の割合 | p99 < 200ms の割合 |
| Throughput | 処理スループット | 1 秒あたりのリクエスト数 |
| Error rate | 失敗率 | 5xx エラーの割合 |
| Correctness | 結果の正しさ | 計算の正確性 |
| Freshness | データの鮮度 | バッチ処理の遅延が N 分以下 |
| Quality | 提供品質 | レコメンド精度 |
| Durability | データの保全性 | データロス率 |
🔧 Request-based vs Window-based SLI
| 観点 | Request-based | Window-based |
|---|---|---|
| 計算式 | Good Events / Total Events | Good Windows / Total Windows |
| 用途 | HTTP API、トランザクション系 | バッチ、定期処理、データパイプライン |
| 精度 | 各リクエスト粒度 | ウィンドウ粒度 |
| エラー突発 | 即座に SLI 低下 | ウィンドウ内で平均化 |
🔧 Burn Rate の計算式
🔧 Error Budget Policy(Step Function)
| Budget 残量 | アクション |
|---|---|
| 100% - 75% | 新規機能リリース自由、リスク変更可 |
| 75% - 50% | 通常リリース、Canary 小さく開始、監視強化 |
| 50% - 25% | 信頼性投資強化、新機能と 50:50 |
| 25% - 0% | 新機能凍結、信頼性タスク優先、Postmortem アクション最優先 |
| 枯渇(< 0%) | 完全フリーズ、全エンジニアが信頼性に集中、VP 承認のみ |
🔧 Cloud Service Mesh での SLO(旧 Anthos Service Mesh)
サイドカープロキシ(Envoy)が 全リクエストをインターセプトし、メトリクスを自動収集。アプリ未改修で SLO 計測可能。
🔧 信頼性の機会費用(Opportunity Cost)
🎯 SRE 用語 即答テンプレ
| 用語 | 内容 | 例 |
|---|---|---|
| SLI | 信頼性の実測値 | HTTP 成功率 99.97% |
| SLO | 内部目標 | 月次 99.95% |
| SLA | 顧客契約(罰則あり) | 99.9% を下回ったら 10% 返金 |
| Error Budget | 1 − SLO | 99.9% → 月 43 分 |
| Toil | 自動化可能な手作業(50% 以下目標) | 手動再起動、レポート作成 |
| Burn Rate | Error Budget の消費速度倍率 | 14.4x = 1 時間で月予算 2% |
🎯 Four Golden Signals 即答
- Latency: p50 / p95 / p99
- Traffic: RPS / QPS
- Errors: 5xx 率、明示的失敗
- Saturation: CPU / Memory / Queue 長
🎯 ひっかけパターン
| ひっかけ | 正解 |
|---|---|
| 「SLA を SLO より高く設定」 | ❌ SLO が SLA より高い(バッファ) |
| 「内部 CPU 使用率を SLI に」 | ❌ ユーザー影響を反映しない |
| 「平均レイテンシを SLI に」 | ❌ パーセンタイル(p95/p99)を使う |
| 「Error Budget 枯渇でリリース早める」 | ❌ 凍結して信頼性に集中 |
📊 桁ごとのダウンタイム表(必須暗記)
🔥 Multi-window Multi-burn-rate アラート(必須暗記)
1 つのウィンドウだけでは「短期スパイクで誤検知」または「長期で見落とし」が起きる。複数ウィンドウを AND で組み合わせる SRE Workbook 推奨パターン。
📋 Multi-burn-rate 設定表
| アラート | Burn Rate | Long Window | Short Window | 予算消費 | 通知先 |
|---|---|---|---|---|---|
| Fast burn | 14.4x | 1 時間 | 5 分 | 2% / 1h | PagerDuty(即対応) |
| Medium burn | 6x | 6 時間 | 30 分 | 5% / 6h | Slack(数時間以内) |
| Slow burn | 1x | 3 日 | 6 時間 | 10% / 3d | Ticket(後日) |
3.2 容量計画とオートスケーリング
容量計画の 4 つの仕組み
| 仕組み | 対象 | 目的 |
|---|---|---|
| Quotas(割当量) | プロジェクトごとの上限 | 課金事故防止、リソース枯渇予防(申請で引き上げ可) |
| Limits(制限) | サービスごとのハード上限 | 物理・アーキ的限界(変更不可) |
| Reservations(予約) | VM 容量を事前確保 | ピーク時に確実にリソース確保 |
| Dynamic Workload Scheduler (DWS) | GPU/TPU の柔軟な確保 | AI/ML ワークロード |
容量確保戦略の比較
| 戦略 | 即時利用 | コスト | 用途 |
|---|---|---|---|
| オンデマンド | ○ | 高 | 通常運用 |
| Reservations | ○ | 中(CUD 併用で割引) | 安定したワークロード |
| CUD(Committed Use Discount) | ○(予約と組合せ) | 低(最大 70% 割引) | 1〜3 年確約のワークロード |
| Spot VMs | △(中断あり) | 最低(最大 91% 割引) | 中断可能なバッチ |
| DWS | ○ / 予約後 | 中 | GPU/TPU AI ワークロード |
DWS の 2 モード
Flex-start mode
開始時刻を柔軟に、最大 7 日間実行
バッチ学習、ファインチューニング
Calendar mode
開始日時を指定して長期確保(最大 90 日)
大規模事前学習、定期実行
オートスケーリング 3 大プラットフォーム
MIG
Managed Instance Group。CPU / LB / Custom / Schedule / Predictive の 5 ポリシー。Cool-down 60 秒デフォルト。Stateful MIG で disk 保持可。
Cloud Run
リクエスト数で自動。concurrency 80(デフォルト)、min-instances で Cold Start 回避、CPU always allocated でバックグラウンド処理可。
GKE
HPA(Pod 水平)、VPA(Pod 垂直)、Cluster Autoscaler(Node)、NAP(Node Pool 自動作成)。HPA + VPA を同メトリクスで併用は NG。
HPA / VPA / Cluster Autoscaler の使い分け
| スケーラー | 対象 | 軸 |
|---|---|---|
| HPA(Horizontal Pod Autoscaler) | Pod 数 | 水平(CPU / Memory / Custom) |
| VPA(Vertical Pod Autoscaler) | Pod の CPU/Memory 要求量 | 垂直(Pod 再作成) |
| Cluster Autoscaler | Node 数 | クラスタ(Node Pool 単位) |
| Node Auto-Provisioning (NAP) | Node Pool 自体 | 自動生成 |
🔧 Reservations vs CUD vs Spot の使い分け
| ニーズ | 推奨 |
|---|---|
| 安定運用のベース負荷 | Reservations + CUD(最大 70% 割引) |
| 24/7 稼働の安定ワークロード | CUD(1 or 3 年) |
| 短期の変動負荷 | オンデマンド |
| ピーク容量を確実に | Reservations(即時消費可能) |
| 中断可能なバッチ | Spot VM(最大 91% 割引) |
| GPU/TPU 確実確保 | DWS calendar mode |
| GPU/TPU 柔軟確保 | DWS flex-start mode |
| AI 学習で物理ラック近接 | Block reservation |
🔧 MIG Autoscaling Policy 詳細
| ポリシー | 用途 |
|---|---|
| CPU utilization | 汎用(平均 CPU 使用率) |
| Load balancing utilization | Web サービス(LB のバックエンド使用率) |
| Custom metric | キュー長、RPS など Cloud Monitoring メトリクス |
| Schedule-based | 予測可能な負荷(営業時間) |
| Predictive | 過去パターンから予測(起動遅いアプリ) |
🔧 Cloud Run の concurrency / CPU 判断
🔧 Pod Disruption Budget(PDB)
🔧 Pause Pod パターン
クラスタに 「常に削除可能な低優先度 Pod」(pause pod)を配置し、空き容量を維持する手法。高優先度 Pod が来たら追い出される。バースト時の遅延削減に使う。
🎯 容量計画 即答
| 要件 | 答え |
|---|---|
| 「ML 学習で GPU を確実に確保」 | Dynamic Workload Scheduler |
| 「大規模 ML で 90 日確保」 | DWS calendar mode |
| 「待てる ML バッチ」 | DWS flex-start mode |
| 「中断可能で最安」 | Spot VM(最大 91% 割引) |
| 「ピーク容量を事前予約」 | Reservations + CUD |
| 「Quotas は変えられる?」 | ○ 申請で引き上げ可(Limits は不可) |
🎯 スケール選定 即答
| 場面 | 答え |
|---|---|
| 「Cloud Run cold start 解消」 | min-instances ≥ 1 |
| 「Cloud Run バックグラウンド処理」 | CPU always allocated |
| 「GKE で Pod 数自動増減」 | HPA(Horizontal Pod Autoscaler) |
| 「GKE で Pod の CPU/Memory 自動調整」 | VPA |
| 「GKE でノード自動増減」 | Cluster Autoscaler |
| 「Node Pool 自動作成」 | Node Auto-Provisioning(NAP) |
| 「HPA と VPA を同じメトリクス」 | ❌ NG(衝突) |
| 「計画的中断時の Pod 保証」 | PDB(Pod Disruption Budget) |
| 「バースト即応のスペース確保」 | Pause Pod + Cluster Autoscaler |
🎯 重要な数値
| 項目 | 値 |
|---|---|
| CUD 割引 | 1 年 25-37%、3 年 52-70% |
| Spot VM 割引 | 最大 91% |
| DWS flex-start | 最大 7 日 |
| DWS calendar | 最大 90 日 |
| Cloud Run concurrency デフォルト | 80 |
| Cloud Run 最大タイムアウト | 60 分 |
| GKE 標準モード Pod 数上限 | 110 / ノード |
| GLB connection draining timeout | 最大 3600 秒 |
| Toil 目標 | 50% 以下 |
3.3 インシデント緩和とロールバック
インシデント対応の優先順位(必須暗記)
4 つの緩和手段
1. Drain(ドレイン)
問題インスタンスへの新規トラフィック停止、既存接続は完了させる。
- GLB バックエンド:
Connection draining timeout(最大 3600 秒) - GKE Pod:
kubectl drain <node>(PDB 尊重) - MIG:
abandon-instances
2. Redirect(トラフィック切替)
- Cloud DNS weighted / failover / geo routing
- Multi-cluster Ingress でクラスタ切替
- Global LB backend service 差し替え
- Cloud Run traffic split で旧 revision へ
3. Add Capacity(容量追加)
- MIG の min-replicas を引き上げ
- GKE の HPA / Cluster Autoscaler max を引き上げ
- Cloud Run の max-instances を引き上げ
- Reservations を投入
4. Rollback(ロールバック)
- Cloud Deploy:
gcloud deploy targets rollback - Cloud Run: revision の traffic 100% を旧版に
- GKE:
kubectl rollout undo - Helm:
helm rollback - Feature Flag: 無効化(コードは触らない・秒単位で停止)
🔧 緩和手法の選定
| 状況 | 最初に試す |
|---|---|
| 新機能が問題 | Feature Flag OFF(即時) |
| デプロイ直後の障害 | Rollback |
| トラフィック急増 | Scale Out |
| リージョン障害 | Cloud DNS で別リージョン / Multi-cluster Ingress |
| 特定インスタンス問題 | Drain & Replace |
🔧 ICS(Incident Command System)の役割分担
| 役割 | 責任 |
|---|---|
| Incident Commander (IC) | 全体統率、決断、優先度決定(修復はしない) |
| Communications Lead | Status Page、社内通知、顧客連絡 |
| Operations Lead | 実際の修復作業 |
| Planning Lead | 長時間障害の戦略 |
| Scribe | タイムライン記録 |
| SME | 技術専門家(DB、NW、Security 等) |
🔧 インシデントレスポンスの基本フロー
🔧 Five Whys(なぜなぜ分析)
🔧 Blameless Postmortem 必須項目
- ✅ Blameless(人を責めない)
- ✅ Five Whys(なぜを 5 回)
- ✅ Timeline(検知→対応→復旧)
- ✅ Impact(影響ユーザー数、SLO 消費)
- ✅ Root Cause(根本原因)
- ✅ What went well / wrong / lucky
- ✅ Action Items(担当者・期限付き)
- ✅ Lessons learned
- ✅ 社内公開
🎯 ロールバック早見表
| 場面 | 手段 |
|---|---|
| 最速の影響停止 | Feature Flag OFF(秒単位) |
| Cloud Deploy 経由デプロイ | gcloud deploy targets rollback |
| Cloud Run | revision の traffic 100% を旧版に |
| GKE Deployment | kubectl rollout undo deployment/<name> |
| Helm | helm rollback <release> <revision> |
| MIG | rolling update を逆方向(古い template) |
🎯 リダイレクト手段
| 手段 | 用途 |
|---|---|
| Cloud DNS weighted routing | 重み付け切替(90:10 等) |
| Cloud DNS failover routing | プライマリ障害時 |
| Cloud DNS geo routing | 地域別ルーティング |
| Multi-cluster Ingress | GKE マルチクラスタ切替 |
| Global LB backend service | バックエンド差し替え |
| Cloud Run traffic split | revision 間切替 |
🎯 サービスライフサイクル
- Planning: SLO 設計、容量計画、オンコール体制、Runbook
- Deployment: Canary、Verify、Approval、Initial SLO 監視
- Maintenance: SLO レビュー、Toil 削減、Postmortem、Game Day
- Retirement: 顧客告知(6 ヶ月以上前)、移行支援、データ削除
👥 ICS と Postmortem 文化
ICS の役割(即答)
- IC(Incident Commander): 決断・統率(修復しない)
- Comms: Status Page、社内通知、顧客連絡
- Ops: 実際の修復作業
- Planning: 長時間障害の戦略
- Scribe: タイムライン記録
- SME: 技術専門家
障害訓練と文化
- Game Day: 障害想定訓練(月次推奨)
- Wheel of Misfortune: ロールプレイ訓練
- Blameless Postmortem: 人を責めない事後分析
- Five Whys: 根本原因分析
- Action Items: 担当者・期限付き再発防止策
- Status Page: 公開(Statuspage.io 等)/ 内部
🎯 要点と暗記 — 一問一答
Q1. SLI / SLO / SLA の大小関係は?
A. SLI ≥ SLO ≥ SLA(数値が大きい順)。実測(SLI)が一番高く、SLO は SLA を絶対下回らないバッファ、SLA は契約上の最低保証。
Q2. 99.9% / 99.99% / 99.999% の月次許容ダウンタイムは?
A. 99.9% = 43 分 12 秒、99.99% = 4 分 19 秒、99.999% = 25.9 秒(月単位)。
Q3. Multi-burn-rate の Fast / Medium / Slow の数値は?
A. Fast burn = 14.4x(1h/5m)、Medium burn = 6x(6h/30m)、Slow burn = 1x(3d/6h)。SRE Workbook の標準。
Q4. Four Golden Signals は?
A. Latency / Traffic / Errors / Saturation。ユーザー向けサービスの最小監視セット。覚え方「L T E S」。
Q5. アプリ未改修でマイクロサービスごとに SLO を計測したい
A. Cloud Service Mesh(旧 Anthos Service Mesh)+ istio_requests_total。サイドカープロキシ(Envoy)が自動収集。
Q6. ML 学習で GPU を 90 日確保したい
A. Dynamic Workload Scheduler calendar mode。flex-start mode は最大 7 日。
Q7. Cloud Run で cold start を回避したい
A. min-instances ≥ 1。常時最小 1 インスタンスを温存。Java/.NET など起動が重い言語では特に重要。
Q8. Cloud Run でバックグラウンドタスクを実行したい
A. CPU always allocated。request 時のみ CPU 割当だと、リクエスト処理後に停止してしまう。WebSocket、gRPC ストリーミングも同様。
Q9. HPA と VPA を同じメトリクス(CPU)で併用したい
A. NG(衝突)。HPA を CPU/Memory 以外(Custom metric)にする、または VPA をメモリだけ・HPA を CPU だけに分ける。
Q10. 障害発生時に最初にすべきことは?
A. Mitigate first(影響緩和)。drain → redirect → capacity → rollback の順。原因究明は後。最速の影響停止は Feature Flag OFF。
Q11. IC(Incident Commander)の役割は?
A. 決断と統率のみ、修復はしない。修復は Operations Lead、連絡は Communications Lead が担当。
Q12. Postmortem で最も重要な原則は?
A. Blameless(非難なき)。「誰が」ではなく「何が」を問い、プロセス改善に集中。Five Whys + Action Items(担当者・期限付き)。
💡 必殺フレーズ集(試験当日用)
| 状況 | 即答 |
|---|---|
| 「DevOps を実装する具体的手法」 | SRE(class SRE implements DevOps) |
| 「ユーザー影響の最小監視セット」 | Four Golden Signals |
| 「信頼性の数値目標」 | SLI / SLO / Error Budget |
| 「顧客との契約(罰則あり)」 | SLA |
| 「ノイズ少ない SLO アラート」 | Multi-window Multi-burn-rate |
| 「Error Budget 枯渇時」 | 新機能リリース停止 |
| 「マイクロサービス間で SLO 計測」 | Cloud Service Mesh + istio_requests_total |
| 「アプリ未改修で SLO」 | Cloud Service Mesh |
| 「GPU/TPU 確実確保」 | Dynamic Workload Scheduler |
| 「大規模 ML で 90 日確保」 | DWS calendar mode |
| 「待てる ML バッチ」 | DWS flex-start mode |
| 「中断可能で最安」 | Spot VM(最大 91% 割引) |
| 「ピーク容量を事前予約」 | Reservations + CUD |
| 「Cloud Run cold start 解消」 | min-instances ≥ 1 |
| 「Cloud Run バックグラウンド処理」 | CPU always allocated |
| 「GKE で Pod 数自動増減」 | HPA |
| 「GKE で Pod の CPU/Memory 自動調整」 | VPA |
| 「GKE でノード自動増減」 | Cluster Autoscaler |
| 「Node Pool 自動作成」 | Node Auto-Provisioning(NAP) |
| 「HPA と VPA を同じメトリクス」 | ❌ NG(衝突) |
| 「計画的中断時の Pod 保証」 | PDB(Pod Disruption Budget) |
| 「バースト即応のスペース確保」 | Pause Pod + Cluster Autoscaler |
| 「障害時最初のアクション」 | Mitigate first(drain / redirect / capacity / rollback) |
| 「最速の影響停止」 | Feature Flag OFF |
| 「Cloud Run 旧版に戻す」 | revision traffic 100% |
| 「GKE ロールバック」 | kubectl rollout undo |
| 「Cloud Deploy ロールバック」 | gcloud deploy rollouts rollback |
| 「GLB バックエンド安全削除」 | capacity-scaler 0 + connection draining |
| 「リージョン切替」 | Cloud DNS weighted / Multi-cluster Ingress |
| 「障害時の役割分担」 | ICS(IC / Comms / Ops / Planning) |
| 「IC の役割」 | 決断と統率のみ、修復はしない |
| 「障害訓練」 | Game Day、Wheel of Misfortune |
| 「事後分析の文化」 | Blameless Postmortem |
| 「Toil 上限」 | 50%(超えたら開発へ返却) |
| 「サービス廃止告知の目安」 | 6 ヶ月以上前 |
- SRE = DevOps の実装(class SRE implements DevOps)
- SLI(実測)/ SLO(内部目標)/ SLA(契約)/ Error Budget(1 − SLO)
- ダウンタイム: 99.9%=43 分、99.99%=4 分、99.999%=26 秒(月)
- Four Golden Signals: Latency / Traffic / Errors / Saturation
- Multi-burn-rate: Fast (1h/14.4x)、Medium (6h/6x)、Slow (3d/1x)
- Error Budget 枯渇 → リリース全停止、信頼性集中
- Cloud Monitoring SLO → Service Monitoring
- Cloud Service Mesh → アプリ未改修で SLO(
istio_requests_total) - 容量: Quotas(増やせる)/ Limits(不可)/ Reservations / DWS(GPU/TPU)
- DWS: flex-start(7 日)/ calendar(90 日)
- MIG オートスケール: CPU / LB / Custom / Schedule / Predictive
- Cloud Run: concurrency、min-instances、CPU always allocated
- GKE: HPA(水平)/ VPA(垂直)/ Cluster Autoscaler(Node)/ NAP(Pool 自動)
- HPA + VPA 同メトリクス NG
- PDB で計画的中断時の Pod 保証
- インシデント緩和優先: Mitigate → Capacity → Rollback → RCA
- 最速の影響停止: Feature Flag OFF
- ICS: IC(決断)/ Comms / Ops / Planning
- Blameless Postmortem + Five Whys + Action Items
- Toil 50% 以下、超えたら開発へ返却