🎯 SRE プラクティス徹底深掘り
Google SRE Book / Workbook の原則を Cloud Monitoring / Cloud Service Mesh / GKE / Cloud Run で実装する具体的手法、SLO 計算式・Multi-burn-rate 設計・インシデント対応まで深掘り。試験対策の最終仕上げと、本番 SRE 業務のリファレンスを兼ねた一枚教材です。
istio_requests_total でアプリ無改修 SLO。Autoscaling は MIG(CPU/LB/Custom/Schedule/Predictive)/ Cloud Run(concurrency/min-max/CPU always)/ GKE(HPA + VPA + CA + NAP)、HPA と VPA を同一メトリクスで併用は NG。インシデント対応の鉄則は 影響緩和 → 容量追加 → ロールバック → 原因究明。最速の止血は Feature Flag OFF。最大の事故源は 「99.99% SLO を盲目的に目指してチーム疲弊」、「Burn rate 5 分ウィンドウだけで flapping」、「HPA + VPA 同一メトリクスで Pod 振動」、「PDB 未設定で CA がノード落とせず詰まる」、「リージョン障害で DNS TTL 600s が長すぎて切替遅延」の 5 つです。
📚 参照する公式ドキュメント
本資料は以下の Google SRE Book / Workbook / Google Cloud 公式ドキュメント(2026 年時点)から技術詳細・計算式・SLA・ベストプラクティスを抽出しています。各章で都度引用と URL を併記します。
1SRE の哲学と DevOps
SRE(Site Reliability Engineering)は Ben Treynor(Google VP)が 2003 年に提唱した、ソフトウェアエンジニアリングの手法で運用問題を解く規律です。DevOps が「WHAT(理念)」なら、SRE は「HOW(具体的実装)」。試験では「SRE と DevOps の関係」「Toil 50% ルール」「Four Golden Signals」「Postmortem の Blameless 原則」「DORA 4 metrics」が頻出です。
「SRE is what happens when you ask a software engineer to design an operations team.」 — Ben Treynor Sloss, Google VP of Engineering
1.1 「class SRE implements DevOps」の正確な意味
DevOps の 5 つの原則に対し、SRE は 具体的な実装手段を提供します。「class」「implements」というプログラミング用語の比喩は、DevOps を interface、SRE を concrete class として捉えるという意味です。
| DevOps 原則(WHAT) | SRE 実装(HOW) | 具体例 |
|---|---|---|
| 組織サイロを壊す | Dev と SRE が 共通 SLO を持つ | Error Budget Policy を両者で合意 |
| 失敗を normal として受容 | Error Budget で 許される失敗量を数値化 | SLO 99.9% → 月 43 分まで OK |
| 段階的変更(gradual) | Canary + Multi-burn-rate alert | Cloud Deploy canary 25/50/100% |
| ツール・自動化を活用 | Toil ≤ 50%、自動化に残り時間投資 | Runbook → Cloud Workflows へ昇格 |
| すべてを計測 | SLI / Four Golden Signals | Latency p99 / Errors / Traffic / Saturation |
- DevOps は文化・哲学(What)/ SRE は実装・職務(How)
- SRE は specific prescriptive practice of DevOps(DevOps の具体的・規範的実装)
- 両者は対立しない。SRE は DevOps を含み、さらに数値目標と組織構造を加える
1.2 Google SRE Book と SRE Workbook の違い
📕 Site Reliability Engineering(SRE Book, 2016)
「What」を語る本。Google の SRE の原理・思想・組織構造を解説。「なぜ SRE が必要か」「Error Budget とは何か」「Toil とは何か」「Four Golden Signals」などの基本概念を提示。Ch.4 「Service Level Objectives」が SLO のバイブル。
📗 Site Reliability Workbook(2018)
「How」を語る本。SRE Book で示した思想を実際にどう実装するかのハンズオン。Ch.2 「Implementing SLOs」、Ch.5 「Alerting on SLOs」(Multi-burn-rate のバイブル)、Ch.9 「Incident Response」など、実務で即使える計算式・コードが充実。
1.3 Toil(労苦)の定義と 50% ルール
Toil = SRE が削減すべき「無価値で反復的な手作業」。SRE Book Ch.5 が定義する 5 つの特徴のすべてを満たすものが Toil。1 つでも欠ければ Toil ではない(例:「自動化困難な調査作業」は反復的だが automatable ではないので Toil ではなく Overhead)。
| # | Toil の必須条件 | 反例(Toil でない) |
|---|---|---|
| 1 | Manual(手作業) | すでに自動化済みのスクリプト実行 |
| 2 | Repetitive(反復的) | 新規アーキテクチャの設計(一度きり) |
| 3 | Automatable(自動化可能) | 本質的に人間判断が必要な複雑な障害調査 |
| 4 | Tactical(戦術的、価値を生まない) | 新機能の設計レビュー |
| 5 | No enduring value(永続的価値なし) | 恒久的な信頼性改善コード |
| 6 | O(n) with service growth(サービス成長に比例) | 規模に関係なく一定回数の作業 |
SRE 1 人あたり Toil ≤ 50% × 1 週間の労働時間
= 50% × 40h = 20h / 週
残り 50% (= 20h / 週) は engineering work
├ 信頼性改善コード
├ 自動化(runbook → script → workflow)
├ Postmortem の Action Items 実装
└ アーキテクチャ改善
→ Toil > 50% が継続したら:
1. オンコール rotation 拡大、
2. プロジェクトを開発チームに pushback、
3. SRE 増員、
4. Toil 削減プロジェクト起票
1.4 Postmortem 文化 — Blameless が大前提
「The cost of failure is education.」 — SRE Book Ch.15 Postmortem Culture
Blameless Postmortem = 「誰が」ではなく「何が」「なぜ」を問う事後分析。個人攻撃を排除することで、本当の事実が表に出る。Postmortem が punitive(懲罰的)になると、エンジニアはミスを隠し、根本原因が永遠に見つからない。
✅ Blameless の原則
「何が」起きたかを問う/プロセス改善に集中/教訓を組織で共有/振り返りを公開(社内 Wiki)/Action Items に必ず担当者と期限を割り当てる/Five Whys でシステム要因を掘り下げる。
❌ Blameful のアンチパターン
「誰が」ボタンを押したかを問う/個人攻撃/犯人探し/隠蔽の温床/Action Items が抽象的(「気をつける」「研修を実施」など)/Root Cause が「Operator error」で止まる(その人がミスするシステムが悪い)。
Postmortem の Trigger(いつ書くか)
| Trigger | 例 |
|---|---|
| ユーザー影響あり(SLO 違反 / Error Budget 大量消費) | Checkout API が 15 分ダウン、月予算の 30% 消費 |
| データ損失 / 破損 | 顧客データの 1 件でも消失・改竄 |
| オンコール介入 | 夜間アラートでエンジニアが起こされた |
| 解決に予想以上の時間 | 1h 想定 → 実際 6h |
| 監視ギャップ | 顧客から先に報告された(アラートが鳴らなかった) |
| ステークホルダーからの要請 | VP / 顧客から「Postmortem 共有して」と要望 |
Five Whys の例
障害: 決済 API が 23 分間 503 を返した Why 1: Pod が OOM Killed され続けた Why 2: メモリ要求 (256Mi) に対し実使用が 2Gi に達した Why 3: 新リリースで請求書 PDF を全件 in-memory ロードに変更された Why 4: コードレビューでメモリ影響が見落とされた Why 5: メモリ profiling が CI に組み込まれていなかった → Action Item: - [P0] Cloud Profiler を本番常時有効化(担当: SRE A, 期限: 2 週間) - [P1] PR テンプレートに「メモリ影響」項目追加(担当: Dev Lead, 期限: 1 週間) - [P1] VPA recommender を有効化して memory request の自動調整(担当: SRE B, 期限: 1 ヶ月)
1.5 The Four Golden Signals — 最小監視セット
Google SRE Book Ch.6 が示す、ユーザー向けシステムを監視する最小 4 シグナル。「これだけは必ず計測しろ」というベースライン。試験で「ユーザー影響を反映する最小監視セット」と問われたら即答 = Four Golden Signals。
(成功と失敗を分離)
(RPS / QPS)
(明示 / 暗黙 / 仕様)
(リソース利用 + 待ち)
| シグナル | 定義 | 代表メトリクス | 落とし穴 |
|---|---|---|---|
| Latency | リクエスト処理時間 | p50 / p95 / p99 / p99.9 | 成功と失敗を分離(5xx は早く返ることが多く平均が歪む)/平均ではなく percentile を使う |
| Traffic | システムへの需要 | HTTP RPS、PubSub messages/s、DB QPS | サービスごとに「Traffic」の単位を明示(webhooks か、user clicks か) |
| Errors | 失敗リクエスト率 | 5xx ratio、4xx ratio、明示的失敗 | 「正しい応答だが内容が誤り」(policy 失敗、ML 推論誤り)も Errors としてカウント |
| Saturation | 混雑度(最も制約のあるリソース) | CPU / Memory / Disk I/O / Queue length / Goroutines | 100% に達する前に対処(予測指標)/「最も詰まる箇所」をサービスごとに特定 |
| フレームワーク | 提唱 | 対象 | 軸 |
|---|---|---|---|
| Four Golden Signals | Google SRE | ユーザー向けサービス | Latency / Traffic / Errors / Saturation |
| USE Method | Brendan Gregg | リソース(CPU/メモリ/ディスク等) | Utilization / Saturation / Errors |
| RED Method | Tom Wilkie | マイクロサービス / リクエスト | Rate / Errors / Duration |
使い分け:ユーザー視点 → Golden Signals/リソース視点 → USE/リクエスト視点(特に分散トレーシング)→ RED。SRE 試験は Four Golden Signals がデフォ正解。
1.6 DORA 4 metrics — 高成果チームのベンチマーク
Google Cloud 配下の DORA(DevOps Research and Assessment)が毎年公開する State of DevOps Report の中核指標。試験では「DORA」というキーワード単体でも問われる。CI/CD と SRE の橋渡し指標。
| メトリクス | 定義 | Elite | High | Medium | Low |
|---|---|---|---|---|---|
| Deployment Frequency(DF) | 本番デプロイ頻度 | 1 日複数回 | 1 日〜1 週 | 1 週〜1 ヶ月 | 1 ヶ月以上 |
| Lead Time for Changes(LT) | commit → 本番までの時間 | 1 時間未満 | 1 日〜1 週 | 1 週〜1 ヶ月 | 1 ヶ月以上 |
| Change Failure Rate(CFR) | 本番デプロイの失敗率 | 0-15% | 16-30% | 16-30% | 16-30% |
| MTTR / Failed Deployment Recovery Time | 障害から復旧までの時間 | 1 時間未満 | 1 日未満 | 1 日〜1 週 | 1 ヶ月以上 |
2023 年版から、5 つ目の指標として「Reliability」(SLO 達成率、または運用上の信頼性)が追加された。これにより DORA は「速度(DF/LT)」「品質(CFR/MTTR)」「信頼性(SLO)」の 3 軸を測る完全体に。
1.7 SVG ダイアグラム — SRE 組織モデル
2SLI / SLO / SLA 数学的定義
「SLI / SLO / SLA を 1 分で説明せよ」は SRE 試験のスタート地点。正しい数式と桁ごとのダウンタイム数値を暗記すれば、応用問題は機械的に解ける。逆にここがブレるとすべての問題で迷う。
2.1 正確な定義式
SLI (Service Level Indicator) = good_events / valid_events ← リクエストベース または = good_windows / total_windows ← ウィンドウベース SLO (Service Level Objective) = SLI に対する内部目標値(target) 例:SLI ≥ 99.9% を 30 日間 rolling で維持 SLA (Service Level Agreement) = 顧客との契約値 + 違反時のペナルティ(返金 etc) 通常: SLA < SLO(バッファを取る) Error Budget = 1 − SLO 例:SLO 99.9% → Error Budget = 0.1% = 月 43.2 分 Burn Rate = 実際のエラー率 / (1 − SLO) 例:実エラー率 1.44% / 0.1% = 14.4x(= Fast burn)
2.2 SLI / SLO / SLA の数値関係(覚え方)
「文字並びは SLI < SLO < SLA だが、数値の大小は SLA < SLO < SLI」 という逆転関係を必ず把握する。
SLA 99.9% ← 顧客契約(最も低い保証) 下回ったら返金 SLO 99.95% ← 内部目標(バッファあり) 下回ったら信頼性投資 SLI 99.98% ← 実測値(実際の運用) 現状 [なぜこの順?] - SLA は契約 → 絶対下回ってはいけない → 余裕を持って低く - SLO は SLA を絶対下回らないための内部ライン → SLA より高く - SLI は理想的にはずっと SLO 以上 → 実測が一番高くなるよう運用
2.3 リクエストベース SLI vs ウィンドウベース SLI
📦 Request-based SLI
SLI = good_requests / valid_requests 例:直近 28 日の HTTP 成功率 good = HTTP 2xx + 3xx + 4xx(client error は除外可) valid = 全 HTTP requests → SLI = good / valid
用途:HTTP API、トランザクション系、ほとんどのオンライン serving。ユーザー視点に近い。
長所:直感的、Burn Rate 計算が自然、SRE Workbook の Multi-burn-rate がそのまま使える。
🪟 Window-based SLI
SLI = good_windows / total_windows 例:1 分ウィンドウで「成功率 99% 以上」が good ウィンドウサイズ = 1 分 good = 「1 分内の成功率 ≥ 99%」のウィンドウ数 → SLI = good / 全ウィンドウ数
用途:バッチ処理、データパイプライン、定期実行ジョブ、stream processing。
落とし穴:1 リクエストでも失敗 = ウィンドウ全体が bad になる定義だと、SLI が極端に厳しくなる。閾値の取り方で SLI が乱高下する。
2.4 良い SLI の 4 条件(SRE Workbook Ch.2)
| 条件 | 意味 | 実例 |
|---|---|---|
| 1. ユーザーに影響する | SLI 低下がユーザー体験低下と一致する | HTTP 成功率 ○/CPU 使用率 × |
| 2. 集計可能(aggregatable) | サブセットを足し合わせて全体 SLI を計算できる | request counter ○/平均レイテンシ ×(平均の平均は誤り) |
| 3. シンプル | 少数精鋭、複雑な合成は避ける | 5xx ratio ○/「ML スコア × クリック率 × ...」× |
| 4. 直近の状態を反映 | 古すぎず、リアルタイムに近い | 5 分集計 ○/日次集計 △(即時 alert 不可) |
2.5 SLI 設計のアンチパターン
❌ Uptime check だけ
「/healthz が 200 を返す」だけで SLO を組む → 主要 API が 500 を返してもアラートが鳴らない。Uptime check は 補助、ユーザー体験を表す real traffic ベースの SLI が主軸。
❌ CPU 使用率を SLI に
CPU 高 = ユーザー影響、とは限らない。CPU 100% でもレスポンスが早ければユーザーは満足。CPU は Saturation 監視には使えるが SLI ではない。
❌ 平均レイテンシ
平均は外れ値で大きく歪む。100 req のうち 1 件が 30 秒、99 件が 100ms → 平均 400ms(しかし p99 = 30 秒、ユーザー体験は崩壊)。必ず percentile(p95/p99/p99.9)を使う。
❌ 100% SLO
「100% 信頼性」は不可能。100% SLO = リリース完全凍結。SLO を 99.999% より高くするとコストが指数的に増え、ROI がマイナスになる。「ユーザーが気づく程度の信頼性」を目指す。
❌ ノード数 / Pod 数を SLI に
「Pod が 10 個いる」≠「サービスが正常」。リソース数はサービス品質ではない。リクエスト成功率と latency を見るべき。
❌ サーバー側だけ計測
クライアントは LB に到達できず failed しているのに、サーバー側 SLI は 100%。クライアント側 SLI(synthetic monitoring、real user monitoring)を併用する。
2.6 桁ごとのダウンタイム数値表(必須暗記)
SRE 試験で最も頻出のテーブル。「SLO 99.9% で月どれだけ落ちて良いか」を即答できないと話にならない。
| SLO | 通称 | Error Budget | 1 週間 | 1 ヶ月(30 日) | 1 四半期(90 日) | 1 年(365 日) |
|---|---|---|---|---|---|---|
| 99% | two nines | 1% | 1.68 時間 | 7.2 時間 | 21.6 時間 | 87.6 時間(3.65 日) |
| 99.5% | — | 0.5% | 50.4 分 | 3.6 時間 | 10.8 時間 | 43.8 時間(1.83 日) |
| 99.9% | three nines | 0.1% | 10.1 分 | 43.2 分 | 2.16 時間 | 8.76 時間 |
| 99.95% | — | 0.05% | 5.04 分 | 21.6 分 | 64.8 分 | 4.38 時間 |
| 99.99% | four nines | 0.01% | 1.01 分 | 4.32 分 | 12.96 分 | 52.6 分 |
| 99.999% | five nines | 0.001% | 6.05 秒 | 25.9 秒 | 1.30 分 | 5.26 分 |
| 99.9999% | six nines | 0.0001% | 0.6 秒 | 2.59 秒 | 7.78 秒 | 31.5 秒 |
- 99% → 月 7.2h/年 87.6h("two nines"。月 1 日近く落ちて OK、SaaS としては論外)
- 99.9% → 月 43m/年 8.76h("three nines"。月 1 ライブ配信分の余裕、一般 SaaS の標準)
- 99.99% → 月 4.3m/年 52.6m("four nines"。月 4 分 = 1 デプロイ失敗で半分消費)
- 99.999% → 月 26s/年 5.26m("five nines"。電話・決済・救急レベル。multi-region 必須)
- 「nines を 1 つ追加するごとに 許容時間は 1/10」← この比例関係だけ覚えれば全部導出可
2.7 SLO 達成のコスト関数(指数的に増加)
「ユーザーが気づかない高信頼性は過剰投資」。たとえば社内管理ツールに 99.999% は無駄。逆に決済 / 医療 / 通信は 99.99% でも足りない。「ユーザーが本当に求める信頼性」を調査して決める。
2.8 SLO の Compliance Period(カレンダー vs ローリング)
📅 Calendar-aligned Window
暦月・暦週・暦四半期で評価。SLA / 契約に紐づく。「月初リセット」型。月初に予算満タンでスタートし、月末で評価。
- 長所:請求・契約レポートと自然に整合
- 短所:月末に大障害 → 翌月リセットで何もしない、という抜け道
- 用途:SLA reporting、CFO 向けレポート
🔄 Rolling Window
「直近 N 日」で常時評価(例:rolling 28 days)。連続的に SLO を計測。任意時点で「過去 28 日の SLI」を確認できる。
- 長所:「月末リセットで甘くなる」を防ぐ
- 短所:人間の暦感覚(月次レポート)とズレる
- 用途:内部運用、Cloud Monitoring デフォ(最大 30 日)
「Cloud Monitoring supports compliance periods of calendar week, calendar month, or rolling 1〜30 days.」 — Cloud Monitoring create SLO
2.9 事故ケース集(SLI / SLO 設計)
| 状況 | 新規 SaaS のため "とりあえず four nines" と決めた。実際の SLI は 99.8% 程度。 |
|---|---|
| 結果 | 毎月 Error Budget が 5 倍超過、リリース凍結が常態化、開発速度ゼロ、エンジニア離職。 |
| 原因 | ユーザー要求の調査なし、現状 SLI とのギャップ無視。「nines を多くすれば偉い」という誤解。 |
| 対処 | SLO を 99.5% に再設定。3 ヶ月の SLI 観測 → 段階的に引き上げ(99.5 → 99.7 → 99.9)。Error Budget Policy を再合意。 |
| 状況 | 「1 分ウィンドウ内の成功率 100%」を good と定義 → 1 件でも 5xx あればウィンドウ全体が bad。 |
|---|---|
| 結果 | SLI が 80% 程度に低迷(実エラー率は 0.5% に過ぎないのに)。Burn rate 常時発火、誤検知でオンコール疲弊。 |
| 原因 | ウィンドウ閾値設計ミス(100% は厳しすぎる)。 |
| 対処 | 「1 分内成功率 ≥ 99%」を good に変更。またはリクエストベース SLI に切替(推奨)。 |
| 状況 | SLA = SLO = 99.9% に設定。実 SLI が 99.85% で SLA も自動違反。 |
|---|---|
| 結果 | 毎月返金発生、顧客の信頼失墜。 |
| 原因 | SLA にバッファ無し。本来は SLA < SLO < SLI の階層を作るべき。 |
| 対処 | SLA 99% / SLO 99.9% / SLI 99.95% の 3 階層に再設計。SLI で SLO を守り、SLO で SLA を守る。 |
| 状況 | 「CPU < 80% を good」と定義した SLI 99.9%。ダッシュボードは全てグリーン。 |
|---|---|
| 結果 | 下流の DB がボトルネックで HTTP 95% が timeout、しかし SLI は 100%(CPU は余裕)。顧客から「サイトが遅い / 落ちている」苦情多数。 |
| 原因 | SLI がユーザー体験を反映していない。CPU は Saturation の指標であって SLI ではない。 |
| 対処 | SLI を HTTP 成功率 + レイテンシ p99 に変更。CPU は Monitoring の補助指標として残す。 |
| 状況 | 「平均レイテンシ < 200ms」を SLI に。ダッシュボードでは 150ms で常時 OK。 |
|---|---|
| 結果 | p99 は 5 秒を超え、ヘビーユーザー(VIP 顧客)が大量解約。平均は OK でも、上位 1% は崩壊していた。 |
| 原因 | 平均は外れ値で歪む。SRE の鉄則 = 必ず percentile を使う。 |
| 対処 | SLI を「p99 < 500ms の割合」に変更。p50 / p95 / p99 / p99.9 を分けてダッシュボード化。 |
| 状況 | 「全マイクロサービスに SLO」と決めて 100+ サービス × 4 SLI = 400 SLO を作成。 |
|---|---|
| 結果 | 誰も全体把握できず、本当に重要な SLO が埋もれる。Burn rate alert が常時何かしら発火、慢性疲労。 |
| 原因 | 「Less is more」の SRE 原則違反。サービス数ではなく Critical User Journey ベースで SLO を絞るべき。 |
| 対処 | 主要 CUJ(カート→決済、検索→閲覧、ログイン)× 3 つに集約。サブサービスは内部 SLI(観測のみ、alert なし)に降格。 |
| 状況 | SLI を「nginx access log の 2xx ratio」で計測。サーバ側 SLI は 100%。 |
|---|---|
| 結果 | 実は GLB の SSL 証明書失効でクライアントが TLS handshake 失敗 → サーバまで到達せず、サーバ側ログには記録なし。 |
| 原因 | 「fail したリクエストはログに残らない」盲点。サーバ側 SLI だけだと 到達前障害が見えない。 |
| 対処 | クライアント側(synthetic、RUM、LB ログ)の SLI を併用。LB の HTTP(S) log を Cloud Logging に転送し、SLI 計算に使う。 |
- 「ユーザー影響を最小監視」 → Four Golden Signals
- 「アプリ無改修で SLO 計測」 → Cloud Service Mesh の
istio_requests_total - 「SLO 99.9% の月予算」 → 43 分
- 「99.99% の年予算」 → 52.6 分
- 「平均レイテンシで監視」→「percentile を使え」
- 「100% SLO は不可能」「コスト指数増」
- 「サーバ側だけでなくクライアント側 SLI も」
3Error Budget 完全理解
Error Budget は SRE の最重要発明。「リリース速度」と「信頼性」のトレードオフを数値で議論可能にする。試験では Burn Rate の計算式、Multi-window Multi-burn-rate の 3 段、Error Budget Policy の発動条件がほぼ必ず問われる。
3.1 Error Budget の数式と意味
Error Budget = 1 − SLO
例:SLO 99.9% (rolling 30 days)
Error Budget = 0.1%
= 30 days × 24h × 60min × 0.001
= 43.2 分(時間ベース)
または
= total_requests × 0.001(リクエストベース)
例:SLO 99.99%、月 100 万 req
許容 bad req = 1,000,000 × 0.0001 = 100 req / 月
意味:
「43 分(または 100 req)までは failure してよい」
→ リリース・実験のリスクテイク予算
→ ゼロ消費を目指すのではなく、計画的に使う
Error Budget は「消費を悪と考えない」のが鉄則。Error Budget が余っているのにリリースしないのは機会損失。新機能リリースには必ず信頼性リスクがあるため、Error Budget の範囲内ならリスクを取って早く出すべき。
3.2 Burn Rate の計算式
Burn Rate = 観測期間の実エラー率 / (1 − SLO) 例:SLO 99.9% (Error Budget = 0.1%) 観測期間 1 時間で実エラー率 1.44% Burn Rate = 1.44% / 0.1% = 14.4x 意味: Burn Rate 1x = SLO 期間全体(30 日)で予算をちょうど使い切るペース Burn Rate 2x = 15 日で使い切る Burn Rate 14.4x = 約 50 時間で使い切る(30d / 14.4) Burn Rate 6x = 5 日で使い切る Burn Rate 60x = 12 時間で使い切る
Burn Rate ↔ 予算消費率 ↔ 残時間の早見表(SLO 30 日)
| Burn Rate | 1 期間(30 日)で消費 | 1 時間で消費 | 残予算を使い切る時間 | 推奨アクション |
|---|---|---|---|---|
| 1x | 100% | 0.14% | 30 日 | 正常運用 |
| 2x | 200% | 0.28% | 15 日 | 注意観察 |
| 6x | 600% | 0.83% | 5 日 | Page(Medium burn) |
| 14.4x | 1,440% | 2.0% | 50 時間 | Page(Fast burn) |
| 60x | 6,000% | 8.3% | 12 時間 | P0 incident、即時 mitigation |
| 720x | 72,000% | 100% | 1 時間 | 完全 outage、緊急 escalation |
3.3 Multi-window Multi-burn-rate Alerting(SRE Workbook Ch.5)
SRE Workbook Ch.5 の推奨アラート設計。1 つのウィンドウだけだと「短期スパイクで誤検知(false positive)」または「長期で見落とし(false negative)」が起きるため、複数ウィンドウを AND で組み合わせる。
「For example, an alert configured for a 1-hour window with a 14.4 burn rate fires when 2% of the budget is consumed in 1 hour.」 — SRE Workbook Ch.5 Table 5-8
SRE Workbook 推奨:99.9% SLO の 3 段アラート
| 重要度 | Long Window | Short Window | Burn Rate | 予算消費 | 通知先 | SLA |
|---|---|---|---|---|---|---|
| Page(Fast) | 1 時間 | 5 分 | 14.4x | 2% / 1h | PagerDuty | 15 分以内応答 |
| Page(Medium) | 6 時間 | 30 分 | 6x | 5% / 6h | PagerDuty | 1 時間以内応答 |
| Ticket(Slow) | 3 日 | 6 時間 | 1x | 10% / 3d | Jira / Slack | 営業時間内応答 |
SRE Workbook の推奨:short window = long window × 1/12。これにより「問題が継続している」確認になり、一時的スパイクで発火しない。1h → 5min (1/12)、6h → 30min (1/12)、3d → 6h (1/12) の関係を覚える。
判定ロジック(疑似コード)
def should_alert_fast_burn(slo, errors, window_long='1h', window_short='5m'):
burn_long = error_rate(window_long) / (1 - slo)
burn_short = error_rate(window_short) / (1 - slo)
# AND 条件:両方 14.4x を超えた時のみ発火
return burn_long > 14.4 and burn_short > 14.4
# 効果:
# - long のみだと 5 分で復旧した spike も 1 時間後まで発火継続
# - short のみだと 30 秒の一時 burst でも発火 → false positive
# - AND にすることで「長期傾向 AND 現在も継続」のみ通知
Burn Rate Alert の SVG ロジック図
3.4 数値計算例:実際にアラートが発火するか
| ケース | SLO | 観測(直近 1h) | burn_long | 観測(直近 5m) | burn_short | Fast burn 発火? |
|---|---|---|---|---|---|---|
| A | 99.9% | 10,000 req / 144 err (1.44%) | 14.4x | 1,000 req / 15 err (1.5%) | 15x | ✅ 発火(両方 ≥ 14.4) |
| B | 99.9% | 10,000 req / 200 err (2%) | 20x | 1,000 req / 5 err (0.5%) | 5x | ❌ 不発火(short 不足) |
| C | 99.9% | 10,000 req / 50 err (0.5%) | 5x | 1,000 req / 20 err (2%) | 20x | ❌ 不発火(long 不足) |
| D | 99.95% | 20,000 req / 144 err (0.72%) | 14.4x | 2,000 req / 15 err (0.75%) | 15x | ✅ 発火 |
| E | 99.99% | 50,000 req / 72 err (0.144%) | 14.4x | 5,000 req / 8 err (0.16%) | 16x | ✅ 発火 |
ケース B・C が重要。「片方だけ高くても発火しない」のが Multi-window の本質。B はかつての大障害が収束したケース(過去 1h に蓄積したが現在は OK)、C は瞬間 burst(5m だけ悪化、1h で見ると無視できる)。
3.5 Error Budget Policy(消費レベル別対応)
Error Budget Policy = 「予算残量に応じた事前合意ルール」。障害時に「リリースして良いか」を感情で議論しないために、平時に合意しておく。Dev / SRE / プロダクトオーナー が署名する。
| 残予算 | 状態 | 新機能リリース | リスクある変更 | 信頼性投資 | エスカレーション |
|---|---|---|---|---|---|
| 100% – 75% | Healthy | 自由 | 許容 | 通常 | 不要 |
| 75% – 50% | Caution | 慎重に | Canary % を小さく | 軽度強化 | SRE Lead に共有 |
| 50% – 25% | Warning | 機能と信頼性 50:50 | 事前レビュー必須 | 優先度上げ | Engineering Manager |
| 25% – 0% | Critical | 新機能凍結 | 禁止 | 100% 集中 | Director |
| 0% 以下 | Burned | 完全凍結 | 禁止 | 全リソース投入 | VP / CTO 承認 |
- セキュリティパッチ:予算枯渇でも適用可(リスク評価のうえ)
- 規制対応 / 法的対応:適用可
- 「VP 承認」のリリース:例外承認パス(濫用防止のため明確な書面承認)
- 顧客個別緊急対応:feature flag 限定で展開可
3.6 Cloud Monitoring SLO の作成手順
Cloud Monitoring の Service Monitoring 機能で、コンソール / API / IaC で SLO を作成。Burn Rate Alert は自動生成可能。
Service Monitoring API 定義例
# SLO 定義(Cloud Monitoring API)
displayName: "Checkout API availability"
serviceLevelIndicator:
requestBased:
goodTotalRatio:
goodServiceFilter: |
metric.type="loadbalancing.googleapis.com/https/request_count"
AND metric.label.response_code_class="2xx"
AND resource.label.url_map_name="checkout-lb"
totalServiceFilter: |
metric.type="loadbalancing.googleapis.com/https/request_count"
AND resource.label.url_map_name="checkout-lb"
goal: 0.999 # SLO 99.9%
rollingPeriod: 2419200s # 28 日 (rolling)
# またはカレンダーアライン
# calendarPeriod: MONTH
---
# Burn Rate Alert(Fast Burn)
displayName: "Checkout SLO Fast Burn"
conditions:
- displayName: "Fast burn over 1h AND 5min"
conditionThreshold:
filter: |
select_slo_burn_rate("projects/PRJ/services/checkout/serviceLevelObjectives/avail", "3600s")
comparison: COMPARISON_GT
thresholdValue: 14.4
duration: 300s # 5min 継続でトリガ
notificationChannels:
- "projects/PRJ/notificationChannels/pagerduty-prod"
3.7 事故ケース集(Error Budget / Burn rate)
| 状況 | 5 分ウィンドウ単独で「burn rate > 14.4 で発火」と設定。 |
|---|---|
| 結果 | 1 件失敗 → 5 分間 alert → 復旧 → 5 分後 alert 解除 → 再失敗 → 再 alert ... を 1 時間に 10 回繰り返し、PagerDuty が深夜に 10 回鳴る。 |
| 原因 | 短期ウィンドウ単独は低トラフィック時にノイズが激しい(1 件で大きな % 変動)。 |
| 対処 | Multi-window 化(1h AND 5min)。両方の AND 条件で発火するようにロジック修正。 |
| 状況 | Slow burn alert (1x / 3 日) が ticket で起票されたが、開発チームが「軽微」と判断し放置。 |
|---|---|
| 結果 | 1 ヶ月で予算 110% 消費。SLA 違反で返金、Director エスカレーション。 |
| 原因 | Slow burn は「重大ではない」が「持続的」。1x のペースが 3 週間続けば確実に予算枯渇。 |
| 対処 | Error Budget Policy を厳格化:Slow burn ticket は 48h 以内対応 SLA、未対応で自動エスカレーション。 |
| 状況 | Availability、Latency、Freshness の 3 SLI 各々で Fast burn alert を設定。 |
|---|---|
| 結果 | DB 障害時に 3 つの SLI が同時悪化 → PagerDuty が 3 件発火 → 3 人別々に起こされ、調整に時間を浪費。 |
| 原因 | SLI 間の相関を考慮せずに alert を作った。同一インシデントに複数アラート。 |
| 対処 | SLI ごとに alert を分けず、「Service レベルで集約」。Alert grouping(PagerDuty deduplication)有効化。Critical SLI(Availability)のみ Fast burn、他は Slow burn に降格。 |
| 状況 | 夜間 3:00-5:00 のトラフィック 1/100 に低下。1 件失敗で SLI が 50% に低下、burn rate 500x。 |
|---|---|
| 結果 | 毎日深夜に false positive alert、SRE が夜中起こされる。 |
| 原因 | 低トラフィックでは分母が小さく、1 件で SLI が暴れる。Burn rate 計算が無意味。 |
| 対処 | 「最低リクエスト数閾値」を導入(例:1h 内 1000 req 未満ならアラート無効)。または時間帯別 SLO(夜間は 99% に緩和)。 |
| 状況 | Calendar-aligned 月次 SLO。月末 28 日目に大障害 → 残予算 5% を使い切り。 |
|---|---|
| 結果 | 月初リセットを期待して「次月のために何もしない」3 日間。SLA 違反は確定したが、改善努力ゼロ。 |
| 原因 | Calendar 型の抜け道。月末障害が「次月に持ち越されない」ため、改善インセンティブが消える。 |
| 対処 | Rolling 28-day SLO に変更。常に「直近 28 日」で評価されるため、月末障害は次月も予算消費にカウントされる。 |
4Cloud Service Mesh の SRE 機能
Cloud Service Mesh(旧 Anthos Service Mesh / ASM)は、Istio をベースにした Google Cloud マネージドサービスメッシュ。アプリ無改修で SLO 計測・mTLS・トラフィック制御を実現。試験では「アプリに手を入れずに SLI 収集」「マイクロサービス間の相互認証」が問われたら、ほぼ Cloud Service Mesh が正解。
「Cloud Service Mesh supports two SLI types: latency and availability, set and monitored on the Health page using service telemetry.」 — Cloud Service Mesh SLO Overview
4.1 アーキテクチャ(Istio Control Plane + Envoy Sidecar)
4.2 主要メトリクスと SLO 定義(PromQL)
| メトリクス | 型 | 主要 label | 用途 |
|---|---|---|---|
istio_requests_total | counter | destination_service / response_code / reporter | Availability SLI |
istio_request_duration_milliseconds | histogram | destination_service / le | Latency SLI(p99 計算) |
istio_request_bytes | histogram | 同上 | リクエストサイズ分布 |
istio_response_bytes | histogram | 同上 | レスポンスサイズ分布 |
istio_tcp_sent_bytes_total | counter | destination_service | TCP 通信量 |
Availability SLI(PromQL)
# 成功リクエスト / 全リクエスト(destination 側から見た)
sum(rate(istio_requests_total{
destination_service="checkout.prod.svc.cluster.local",
response_code!~"5..",
reporter="destination"
}[5m]))
/
sum(rate(istio_requests_total{
destination_service="checkout.prod.svc.cluster.local",
reporter="destination"
}[5m]))
Latency SLI(PromQL)
# p99 レイテンシ
histogram_quantile(0.99,
sum(rate(istio_request_duration_milliseconds_bucket{
destination_service="checkout.prod.svc.cluster.local"
}[5m])) by (le)
)
# あるいは「p99 ≤ 500ms の割合」を SLI に
sum(rate(istio_request_duration_milliseconds_bucket{
destination_service="checkout.prod.svc.cluster.local",
le="500"
}[5m]))
/
sum(rate(istio_request_duration_milliseconds_count{
destination_service="checkout.prod.svc.cluster.local"
}[5m]))
4.3 SLO 定義例(Cloud Service Mesh コンソール / API)
# Cloud Console → Cloud Service Mesh → Services → SLO 作成
displayName: "Checkout latency p99 ≤ 500ms"
serviceLevelIndicator:
basicSli:
latency:
threshold: 0.5s
method: ["GET", "POST"]
location: ["asia-northeast1"]
goal: 0.999
rollingPeriod: 2419200s
# Availability SLO
displayName: "Checkout availability"
serviceLevelIndicator:
basicSli:
availability: {} # 自動で 2xx-3xx を good 扱い
goal: 0.9995
calendarPeriod: MONTH
4.4 mTLS / 認可ポリシー / トラフィック制御
| 機能 | YAML 例 | 用途 |
|---|---|---|
| mTLS(PeerAuthentication) | mode: STRICT / PERMISSIVE / DISABLE | サービス間相互 TLS 認証 |
| AuthorizationPolicy | allow / deny rule(principal / source / path) | L7 認可(誰がどの URL を呼べるか) |
| VirtualService | route / weight / match | トラフィック分割(canary / A-B) |
| DestinationRule | subset / circuitBreaker / loadBalancer | サービスレベル設定(subset、CB) |
| Gateway | port / host / TLS | 外部公開(North-South ingress) |
mTLS STRICT 設定例
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: production
spec:
mtls:
mode: STRICT # mesh 内通信は必ず mTLS、平文拒否
---
# 段階移行は PERMISSIVE → STRICT(legacy app を含む場合)
spec:
mtls:
mode: PERMISSIVE # mTLS と平文の両方を受け付け
Canary トラフィック分割(VirtualService)
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: checkout
spec:
hosts: [checkout.prod.svc.cluster.local]
http:
- route:
- destination:
host: checkout
subset: v1 # 安定版
weight: 90 # 90%
- destination:
host: checkout
subset: v2 # 新版(canary)
weight: 10 # 10%
4.5 Managed Cloud Service Mesh vs OSS Istio(インクラスタ)
| 観点 | Managed Cloud Service Mesh | OSS Istio(自前運用) |
|---|---|---|
| Control plane 管理 | Google が管理(istiod は managed) | 自前で istiod デプロイ・運用 |
| アップグレード | 自動(チャンネル:rapid / regular / stable) | 手動、互換性検証必須 |
| SLA | Google から SLA 提供 | なし(自前運用) |
| Cloud Monitoring 統合 | 自動(SLO UI、burn rate alert) | 手動(Prometheus → GMP) |
| mTLS CA | Google マネージド CA | 自前 CA 運用(cert-manager 等) |
| コスト | 追加課金あり(per-pod) | 無料(OSS)だが運用コスト大 |
| マルチクラスタ | Fleet ベースで簡単 | 複雑(root CA 共有、network 設定) |
4.6 事故ケース集(Cloud Service Mesh)
| 状況 | Envoy sidecar のメモリ要求 64Mi、実使用が 200Mi に達する大トラフィック時。 |
|---|---|
| 結果 | Sidecar が OOM Kill → Pod が再起動ループ → Service 単位で 503 多発。 |
| 原因 | Sidecar resource limits の見積もり不足。Istio config が大きい(多数の VirtualService)と Envoy メモリも増える。 |
| 対処 | Sidecar の memory request/limit を 256Mi / 512Mi に増加。Sidecar リソースで namespace スコープを絞り、Envoy が読む config を最小化。Cloud Profiler で sidecar の usage を継続監視。 |
| 状況 | 新規アプリは mTLS 対応だが、レガシー HTTP only サービスがある状態で、いきなり mtls.mode: STRICT 適用。 |
|---|---|
| 結果 | レガシーサービスからの inbound が全て拒否。本番障害 30 分。 |
| 原因 | 段階移行を経ずに STRICT を全 mesh に適用。 |
| 対処 | PERMISSIVE → STRICT の段階移行。① PERMISSIVE で mTLS と平文両受け、② レガシーを sidecar 注入し mTLS 化、③ kiali で 100% mTLS 確認、④ STRICT に切替。 |
| 状況 | namespace 指定を忘れ、root namespace (istio-system) に deny ポリシーを作成。 |
|---|---|
| 結果 | mesh 全体に deny が適用、全マイクロサービス通信不可。 |
| 原因 | istio-system namespace のポリシーはmesh 全体に適用される仕様の見落とし。 |
| 対処 | ポリシーを正しい namespace に移動。CI で「root namespace への AuthorizationPolicy 作成は禁止」の policy gate(OPA)を導入。 |
5オートスケール完全攻略
Google Cloud のオートスケーリングは MIG(VM)/ Cloud Run(サーバーレス)/ GKE(HPA + VPA + CA + NAP)の 3 プロダクトファミリ。試験では「適切な autoscaling 方式の選択」「HPA と VPA の併用禁止」「PDB 設定漏れ」「min-instances の使い分け」が頻出。
5.1 Managed Instance Group(MIG)— VM の自動スケール
MIG Autoscaling Policy の 5 種類
| ポリシー | シグナル | 用途 | 注意 |
|---|---|---|---|
| CPU utilization | VM 平均 CPU | 汎用、CPU バウンドアプリ | デフォルト 60%(推奨) |
| Load balancing utilization | HTTP(S) LB のバックエンド使用率 | Web サーバ、API | BackendService の maxUtilization と連動 |
| Custom metric | Cloud Monitoring の任意メトリクス | キュー長、RPS、業務メトリクス | per-instance / per-group / per-target を選択 |
| Schedule-based | cron 的時間ベース | 予測可能な負荷ピーク(平日 9:00-18:00 等) | min を時間帯で引き上げ |
| Predictive autoscaling | 過去 7-21 日のパターン予測 | 起動が遅い VM、規則的な日次パターン | 事前 warm up、予測誤差は再現 |
MIG 設定例(CPU + Custom metric)
gcloud compute instance-groups managed set-autoscaling app-mig \ --zone=asia-northeast1-a \ --min-num-replicas=3 \ --max-num-replicas=50 \ --target-cpu-utilization=0.6 \ --custom-metric-utilization=metric=custom.googleapis.com/queue_length,utilization-target=100,utilization-target-type=GAUGE \ --cool-down-period=90 \ --mode=ON # OFF / ONLY_SCALE_OUT で逆 scale 防止可
Predictive Autoscaling
過去 7-21 日のメトリクスパターンから「今後 N 分後の負荷」を予測し、事前にスケールアップする。起動時間が長い VM(Java / .NET / 大きな AMI)に有効。reactive scaling より遅延なくピークに対応できる。
--cpu-utilization-predictive-method=OPTIMIZE_AVAILABILITY # またはコンソールで「Predictive autoscaling」ON
Stateful MIG
通常 MIG はステートレス(VM 置換自由)。Stateful MIG は VM 単位で disk・metadata を保持。自己ホスト DB(Cassandra、Elasticsearch)、stateful レガシーアプリで使う。
5.2 Cloud Run — サーバーレスの自動スケール
主要パラメータと推奨値
| パラメータ | 意味 | デフォルト | 推奨 |
|---|---|---|---|
--concurrency | 1 インスタンスあたりの並行リクエスト数 | 80 | 軽量 API: 80-1000 / CPU 重い: 1-10 |
--min-instances | 最小常駐インスタンス | 0 | レイテンシ重視: ≥ 1(cold start 回避) |
--max-instances | 最大スケール | 100 | 下流 DB 容量から逆算(コネクション数) |
--cpu-throttling | リクエスト時のみ CPU 割当 | true | バックグラウンド処理あり → false(CPU always) |
--startup-cpu-boost | 起動時 CPU 倍増(gen2) | false | JVM・大型 init → true |
--cpu / --memory | per-instance リソース | 1 vCPU / 512Mi | 負荷テストで決定 |
--no-cpu-boost | boost 無効化 | — | コスト抑制で OFF も |
Cold Start を潰す 5 つのテクニック
- min-instances ≥ 1:最も即効。常時 1 インスタンス温存(cold start 発生回数を激減)
- Startup CPU Boost:gen2 で起動時 CPU を一時的に最大化(Java / Spring Boot で 30-50% 短縮)
- 軽量ランタイム選択:Go / Python / Node.js は起動 100-500ms、Java は 5-15s
- Lazy initialization:起動時の重い処理を最初のリクエスト後に delay(ただし最初のリクエストは遅い)
- Container size 最小化:マルチステージビルド、distroless image、layer cache 最適化
min-instances = 1 で 24/7 常駐 → 月 720h × (1 vCPU + 512Mi) = 月 $35-50 程度 → cold start 回避できる代わりに、ピーク外でも常時課金 min-instances = 0 → リクエストゼロ時は完全停止、コスト最小 → cold start で p99 が +2-10 秒 判断軸: - ユーザー対面で latency SLO 厳しい → min-instances ≥ 1 - 内部 API、バッチ起動 → min-instances = 0 で OK
CPU always allocated の判断軸
| シナリオ | 推奨 | 理由 |
|---|---|---|
| HTTP リクエスト処理のみ | request 時のみ(default) | コスト最小 |
| バックグラウンド処理(response 後も処理継続) | CPU always allocated | request 時のみだと CPU が切られて処理中断 |
| WebSocket / SSE / ロングポーリング | CPU always allocated | 接続維持に常時 CPU 必要 |
| gRPC streaming | CPU always allocated | streaming RPC の CPU 維持 |
| 初期化重く後続で活用 | CPU always allocated | warm な state を保持 |
5.3 GKE Horizontal Pod Autoscaler(HPA)
HPA の Metric Types
| type | 例 | 用途 |
|---|---|---|
Resource | CPU / Memory | 標準。kubelet が cAdvisor から取得 |
Pods | Pod 単位の custom(例:rps_per_pod) | Pod 平均で集計 |
Object | 外部リソースの metric(Ingress の rps 等) | cluster 外部の数値 |
External | Pub/Sub queue depth、Cloud SQL connections | クラウド外部 metric(Stackdriver Adapter 経由) |
ContainerResource | multi-container Pod で特定コンテナの CPU | sidecar あり Pod での精度向上(v1.27+) |
HPA v2 の高度な behavior 設定
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata: { name: app }
spec:
scaleTargetRef: { kind: Deployment, name: app }
minReplicas: 3
maxReplicas: 100
metrics:
- type: Resource
resource: { name: cpu, target: { type: Utilization, averageUtilization: 70 } }
behavior:
scaleDown:
stabilizationWindowSeconds: 300 # 5 分待って収まりを確認してから縮小
policies:
- type: Percent
value: 10
periodSeconds: 60 # 1 分で 10% ずつ縮小
scaleUp:
stabilizationWindowSeconds: 0 # 即座に拡大
policies:
- type: Percent
value: 100
periodSeconds: 30 # 30s で倍増
- type: Pods
value: 4
periodSeconds: 30 # または 30s で 4 Pod 増
selectPolicy: Max # 両 policy の最大を選択
5.4 GKE Vertical Pod Autoscaler(VPA)
VPA はPod の CPU / Memory の requestを実使用量に基づき自動調整。Pod を再作成する。
VPA の Update Mode
| mode | 挙動 | 用途 |
|---|---|---|
Off | 推奨値を計算するのみ(適用しない) | 初期観測、手動チューニングの参考 |
Initial | Pod 起動時のみ recommendation を適用 | 新規 Pod だけ最適化、既存はそのまま |
Auto / Recreate | 稼働中 Pod も再作成して適用 | 本番の自動最適化(注意:再起動連発リスク) |
In-Place(α) | Pod 再作成なしで request 更新 | 1.27+ α 機能、本番投入は要検証 |
Pod recreation が頻発すると、レイテンシ spike や接続断が発生。本番では Off で recommendation を観測してから手動 / quarterly で適用、または memory only Auto(CPU は HPA、Memory は VPA)の役割分担が安全。
5.5 GKE Cluster Autoscaler(CA)
CA の profile(GKE 特有)
| profile | 挙動 | 用途 |
|---|---|---|
balanced(default) | 標準的な scale-down 判断(10 分 underutilized) | 汎用ワークロード |
optimize-utilization | 積極的に scale-down、Pod packing 重視 | コスト最重視、stateless ワークロード |
CA の scale-down 判定条件
- ノードのリソース使用率が 50% 以下(profile で変動)
- そのノードの全 Pod が他ノードに移動可能
- 10 分間 underutilized 継続(連続観測)
- PDB(Pod Disruption Budget)を尊重できる
- 削除禁止 annotation(
cluster-autoscaler.kubernetes.io/safe-to-evict=false)がない kube-systemPod に制約がない(CoreDNS、metrics-server 等)- local storage を使う Pod がない
Node Auto-Provisioning(NAP)
CA を超えて、Node Pool 自体を自動生成。Pending Pod の要求(CPU/Memory/GPU/特殊ハード)を読み、最適な machine type の Node Pool を新規作成。不要になれば削除。
gcloud container clusters update my-cluster \ --enable-autoprovisioning \ --min-cpu=10 --max-cpu=1000 \ --min-memory=40 --max-memory=4000 \ --autoprovisioning-scopes=https://www.googleapis.com/auth/cloud-platform \ --autoprovisioning-service-account=nap-sa@PRJ.iam.gserviceaccount.com
5.6 HPA + VPA + CA + NAP 同時利用のベストプラクティス
✅ 推奨パターン
HPA = カスタムメトリクス(RPS / queue length)、VPA = Memory only Auto、CA = balanced profile、NAP = GPU / 特殊ハードのみ。役割を分離することで衝突なし。
❌ NG パターン
HPA = CPU、VPA = CPU (Auto):CPU が上がる → HPA が Pod 増やそうとする一方、VPA は per-Pod CPU を増やそうとする → 矛盾、Pod 再作成が連鎖。同一メトリクス(特に CPU/Memory)での併用は公式に非推奨。
5.7 PDB(Pod Disruption Budget)— CA を機能させる鍵
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata: { name: app-pdb, namespace: production }
spec:
minAvailable: 2 # 最低 2 Pod を常時保つ
# または: maxUnavailable: 1
selector:
matchLabels: { app: my-app }
PDB は「voluntary disruption」(CA scale-down、ノードアップグレード、kubectl drain)に対する保証。involuntary(ノード障害、OOM)には効かない。CA が PDB を満たせない場合、scale-down は停止する → ノードが減らず、コスト増。
5.8 Pause Pod パターン(バースト対応)
低優先度の pause Pod を意図的に配置 → クラスタに「空き容量を持つように見せる」 → 本物の Pod が来たら pause Pod を退避、CA が即時に新ノード追加。cold start を回避する高度なパターン。
5.9 事故ケース集(オートスケール)
| 状況 | 3 replica Deployment に PDB minAvailable: 3 設定。rolling update で 1 Pod 停止しようとしても PDB 違反で停止不可。 |
|---|---|
| 結果 | Rolling update が無限停滞、新版がデプロイされない。GKE node upgrade も止まる。 |
| 原因 | PDB の minAvailable が replica 数と同じ。1 つも落とせない設定。 |
| 対処 | PDB minAvailable: 2 または maxUnavailable: 1 に修正。replica 数 - 1 を最低保証する。 |
| 状況 | VPA を Auto で稼働。負荷変動に応じて毎時 Pod recreation。 |
|---|---|
| 結果 | 1 時間に 10+ 回 Pod 再起動。長期接続クライアントは毎回再接続、p99 latency が 10 倍に。 |
| 原因 | VPA の updaterPolicy(recommendation 変動の閾値)がデフォルトで敏感すぎ。 |
| 対処 | ① updateMode: Off で recommendation のみ取得 → 週次バッチで手動適用、② または --in-place α 機能で再起動なし更新、③ minReplicas 引き上げで PDB と組み合わせ。 |
| 状況 | Cold start 対策で 50 サービス全てに min-instances=10 を一斉設定。 |
|---|---|
| 結果 | 月コスト $2,000 → $5,000 に。空きインスタンスで 24/7 課金。 |
| 原因 | 「全部に min-instances」が雑。トラフィック特性無視。 |
| 対処 | SLO 厳しい主要 3 サービスだけ min-instances=2、他は 0。または時間帯別(昼間だけ ≥ 1)の schedule。 |
| 状況 | HPA cpu averageUtilization: 70、VPA Auto mode で CPU 自動調整。 |
|---|---|
| 結果 | VPA が CPU request を上げる → CPU 使用率(%)が下がる → HPA が Pod 減 → 残 Pod で CPU 上がる → VPA がさらに request 上げ ... の振動ループ。レイテンシが激しく変動。 |
| 原因 | 同じシグナル(CPU)を 2 つの autoscaler が制御。古典的な制御工学のオシレーション。 |
| 対処 | 役割分担:HPA は RPS / queue length のような外部メトリクス、VPA は Memory only Auto。HPA と VPA を同じメトリクスで併用しない。 |
| 状況 | 季節キャンペーン後にトラフィック平常化したが、Predictive が「来週も同じ」と予測。 |
|---|---|
| 結果 | 不要に 5 倍のインスタンスを保持、コスト超過。 |
| 原因 | Predictive は過去パターンを将来に投影。一時的イベントを「常態」と誤学習。 |
| 対処 | キャンペーン後は Predictive を一時停止、reactive scaling に戻す。Predictive は周期性のある安定パターンでのみ使う。 |
6キャパシティプランニング
容量計画 = 「必要なリソース量を予測し、適切なタイミングで確保する」工学。試験では Quotas vs Limits の違い、Reservations の種類、Dynamic Workload Scheduler(DWS)、Little's Law と Erlang C の基礎が問われる。
6.1 Quotas vs Limits の違い
📊 Quotas(割当量)
プロジェクト / リージョン単位の「ソフト上限」。引き上げ申請可能。Cloud Console / gcloud / API で増額リクエスト → 数日〜数週間で承認。
- Rate quota:QPS(1 分間の API 呼び出し数等)
- Allocation quota:同時保持数(vCPU 数、IP 数、ディスク容量)
- 監視:Cloud Monitoring の Quota dashboard、Forecast Alert(90% 到達予測)
🚧 Limits(制限)
サービスごとの「ハード上限」。増やせない技術的限界。アーキテクチャで回避するしかない。
- GCS 単一オブジェクト:5 TiB
- Cloud Run リクエスト timeout:60 分
- GKE Pod/Node:110(標準モード)
- Cloud Build:24 時間 / 300 ステップ / 700 イメージ
- Cloud Function gen1:540 秒 / 8GB
Quota 引き上げ申請のタイミング
| 利用率 | 状態 | アクション |
|---|---|---|
| ~50% | 余裕 | 放置 OK、月次レビュー |
| 50% – 70% | 監視 | Forecast Alert で「90% 到達 30 日前」を予告通知 |
| 70% – 90% | 申請開始 | 引き上げリクエスト送信(承認 1-2 週間想定) |
| 90%~ | 緊急 | 緊急申請 + サポートチケット、影響評価開始 |
6.2 Reservations(容量予約)
Compute Engine の VM 容量を事前に確保。起動時に「Stockout(在庫不足)」エラーを防ぐ。CUD(Committed Use Discount)と組み合わせて割引も可能。
| タイプ | 挙動 | 用途 |
|---|---|---|
| Specific reservation | VM 起動時に reservation 名を明示指定したものだけ消費 | 競合せず確実、複数チーム環境 |
| Any reservation | マッチする全 VM が自動消費 | シンプル、単一チーム |
| Auto-consume | 起動時に「reservation あり / なし」を自動選択 | デフォルトで効率化 |
| Block reservation | 同一物理ラック・低レイテンシ(InfiniBand / NVLink) | HPC、AI 学習(GPU/TPU クラスタ) |
| Future reservation | 未来の特定日時から容量確保 | キャンペーン、Black Friday 等の計画 |
CUD(Committed Use Discount)との組み合わせ
| 種類 | コミット | 割引 |
|---|---|---|
| Resource-based CUD | 特定 machine type × region × 1 or 3 年 | 1 年: 25-37% / 3 年: 52-70% |
| Spend-based CUD(Flexible) | 金額コミットのみ(任意 region/machine type 可) | 1 年: 17% / 3 年: 41% |
6.3 Dynamic Workload Scheduler(DWS)— GPU/TPU 専用
AI/ML ワークロードのための柔軟な容量確保サービス。希少な GPU(A100/H100)/ TPU を効率的に確保。
| mode | 挙動 | 期間 | 用途 |
|---|---|---|---|
| Flex-start | キャパシティ空き次第即時開始(即時〜7 日待機) | 最大 7 日 | ファインチューニング、実験、中断耐性あるバッチ |
| Calendar | 指定日時から確実に確保 | 7/14/30/90 日 | 大規模 LLM pretraining、月次バッチ、研究プロジェクト |
- 「待てる ML バッチ、最安で GPU 確保」 → DWS flex-start
- 「来週から 30 日 H100 を確実に確保」 → DWS calendar mode
- 「通常 VM、安定運用」 → Reservations + CUD
- 「中断 OK、最安バッチ」 → Spot VM(最大 91% off)
- 「同一ラック・GPU クラスタ」 → Block reservation
6.4 容量計画の数学(待ち行列理論の基礎)
Little's Law(リトルの法則)
L = λ × W L : システム内の平均リクエスト数 (concurrent requests) λ : リクエスト到着率 (RPS) W : 平均応答時間 (秒) 例: RPS = 1000、平均レイテンシ 200ms (0.2s) L = 1000 × 0.2 = 200 concurrent requests → Cloud Run concurrency = 80 の場合、必要 instances = 200/80 = 3 (最低) → Pod 数 = 200 (concurrency=1 のとき)
Little's Law は「Cloud Run の min-instances」「Pod 数」「DB connection pool」を計算するときの基礎。p99 レイテンシを使えば「99% のリクエストを捌くのに必要な容量」も導ける。
Erlang C — トラフィック理論ベースの容量計算
コールセンター / 待ち行列での 「N 個のサーバで、Q% 以内に応答するのに必要な台数」を計算。Webサーバの容量計算にも応用可。GKE / MIG の min replica 計算に内部的に使われる。詳細は試験では不要、「Erlang C は容量計算の理論」程度で OK。
6.5 季節性のあるトラフィック予測
| 周期 | 例 | 対応 |
|---|---|---|
| 日次 | 朝 9 時ピーク、深夜低 | Schedule-based autoscaling、Predictive |
| 週次 | 平日 vs 週末 | Schedule-based、Predictive (1 週パターン学習) |
| 月次 | 月末締め、給料日 | 月次バッチで Reservations 一時追加 |
| 季節(年次) | Black Friday、年末 | Future Reservations、CUD で先行確保 |
| イベント駆動 | セール、ニュース掲載 | Cloud Armor rate limit + 容量緊急追加 |
6.6 RTO / RPO と DR スケナリオ
「RTO is the maximum acceptable length of time that your application can be offline. RPO is the maximum acceptable length of time during which data might be lost.」 — DR Planning Guide
| シナリオ | RTO | RPO | 構成 | コスト |
|---|---|---|---|---|
| Cold(バックアップ復元) | 数時間〜日 | 数時間〜日 | GCS バックアップ、復旧時に新環境構築 | 最低 |
| Warm(pilot light) | 数十分〜時間 | 数分〜時間 | 最小構成を別 region に常駐、スケール可能 | 中 |
| Hot(active-passive) | 数分以内 | 数秒〜分 | 本番と同等を別 region に常駐、replication 継続 | 高 |
| Active-Active(multi-region) | 0 秒(自動) | 0 秒(同期 replication) | 全 region で本番稼働、global LB で負荷分散 | 最大 |
7インシデント対応の体系
SRE Workbook Ch.9 が体系化した Incident Command System(ICS)と、Mitigate first 原則がインシデント対応の核心。試験では「障害時に最初にやること」「IC の責務」「最速の止血手段」が頻出。
7.1 鉄則:影響緩和 → 容量追加 → ロールバック → 原因究明
優先順位(必ずこの順で考える): 1. Mitigate(影響緩和) ← 最優先・最速 - Feature Flag OFF(秒単位で復旧) - Cloud DNS で別 region へ traffic 切替 - LB connection draining 2. Add Capacity(容量追加) - HPA / max-instances 引き上げ - Reservations 投入 3. Rollback(ロールバック) - Cloud Deploy rollout rollback - Cloud Run revision traffic 100% 旧版 4. Root Cause Analysis(原因究明) ← 後でよい - Postmortem で詳細分析 → 「先に原因を突き止めよう」とすると、その間ユーザー影響継続 → まず止血、診断は復旧後
7.2 Incident Command System(ICS)
米国の災害対応で使われる ICS を SRE に転用。役割を明確に分離することで、混乱の中でも判断を継続できる。大規模障害では役割分離が必須、小規模は兼任 OK。
役割の責務(試験頻出)
| 役割 | 責務 | NG 行為 |
|---|---|---|
| Incident Commander (IC) | 全体統率、優先順位決定、エスカレーション、Status Page 承認 | 自分で技術作業をする(手を動かしてはいけない) |
| Operations Lead | 実際の mitigation 作業、rollback、コマンド実行 | IC の判断を待たずに勝手に大きな変更 |
| Communications Lead | Status Page、顧客連絡、社内 Slack、経営報告 | 不確実な情報を顧客に公開 |
| Planning Lead | 長期障害の戦略、リソース調整、シフト計画 | —(大規模障害のみ) |
| Scribe | タイムライン記録、決定事項の記録、Postmortem の素材 | 記録漏れ(Postmortem の質が下がる) |
| SME | 専門領域の技術判断(DB、Network 等) | — |
7.3 インシデントレベル(Severity)
| Sev | 定義 | 例 | 応答 SLA | 通知 |
|---|---|---|---|---|
| Sev 1 | 全社的影響、サービス完全停止、データ損失 | 全 region 障害、決済 100% 失敗 | 5 分以内 | PagerDuty、CTO、CEO、Status Page 即時更新 |
| Sev 2 | 重大な機能停止、多数のユーザー影響 | 1 region 障害、主要 API 50% 失敗 | 15 分以内 | PagerDuty、Engineering Manager |
| Sev 3 | 部分機能停止、限定的ユーザー影響 | 1 サービス障害、副次機能不具合 | 1 時間以内 | Slack、当番エンジニア |
| Sev 4 | 軽微、回避策あり | UI 表示崩れ、cosmetic bug | 営業時間内 | Jira |
| Sev 5 | 潜在的、ユーザー影響なし | 監視 gap、ドキュメント漏れ | 次 Sprint | Jira backlog |
7.4 影響緩和テクニック
GLB Connection Draining
HTTP(S) Load Balancer のバックエンドを安全に削除するための機能。新規 traffic を止めつつ既存接続を完了まで待つ。最大 3600 秒(60 分)。
# 1. capacity-scaler を 0 にして新規トラフィック停止 gcloud compute backend-services update-backend my-bs \ --instance-group=my-mig --instance-group-zone=asia-northeast1-a \ --capacity-scaler=0 # 2. connection draining timeout を設定(既存接続を待つ) gcloud compute backend-services update my-bs \ --connection-draining-timeout=600 # 10 分 # 3. drain 完了を待ってから backend 削除 gcloud compute backend-services remove-backend my-bs \ --instance-group=my-mig --instance-group-zone=asia-northeast1-a
Cloud DNS Weighted Routing / Failover Routing
DNS レベルで traffic を別 region に切替。weight を変更するだけ → TTL 内でクライアントに伝播。TTL を短く設定(60-300 秒)しておくのが運用の鍵。
# weighted routing(90/10 → 0/100 で即時切替) gcloud dns record-sets create api.example.com. \ --type=A --ttl=60 --zone=my-zone \ --routing-policy-type=WRR \ --routing-policy-data="90=1.1.1.1;10=2.2.2.2" # 障害時:weight を 0/100 に変更 gcloud dns record-sets update api.example.com. \ --routing-policy-data="0=1.1.1.1;100=2.2.2.2"
Multi-cluster Ingress(MCI)でリージョン切替
複数 GKE クラスタを 1 つの Anycast Global LB で公開。リージョン障害時に自動切替。Cloud DNS よりも切替が速い(DNS TTL 不要)。
Feature Flag による即時無効化
最速の止血手段。コードはデプロイしたまま、新機能だけを秒単位で無効化。試験で「最も早く影響を止める」と問われたらFeature Flag OFF。
🐌 通常 Rollback(パイプライン経由)
- 5〜15 分かかる
- 全機能が前バージョンに戻る
- 新機能を残せない(all-or-nothing)
⚡ Feature Flag OFF
- 秒単位で適用
- その機能だけ無効化、他機能は新版で動く
- 個別ユーザー / セグメント単位の切替可
- ツール:Firebase Remote Config、LaunchDarkly、Split
7.5 ロールバック戦略の選択肢
| 戦略 | 速度 | 粒度 | 使い分け |
|---|---|---|---|
| Feature Flag OFF | 秒 | 機能単位 | 新機能の問題、最速で止血 |
| Cloud Run revision traffic 100%→旧版 | 秒 | service 単位 | Cloud Run、即時 rollback |
| Cloud Deploy rollouts rollback | 数分 | release 単位 | GKE、検証付き rollback |
| kubectl rollout undo | 数分 | Deployment 単位 | GKE、即時 rollback(記録なし) |
| Helm rollback | 数分 | release 単位 | Helm 管理アプリ |
| DB マイグレーション rollback | 数十分〜 | schema 単位 | schema 変更を含む場合、forward-only 設計推奨 |
7.6 Postmortem テンプレート
# Postmortem: [障害タイトル] ## Status Draft / Review / Final ## Date 2026-03-15 ## Authors [Names] ## Executive Summary(経営層向け 3 行) - 何が起きたか - ユーザー影響 - 再発防止策 ## Impact - 影響ユーザー数: ~50,000 (全体の 12%) - 失敗 transactions: 8,400 ($120k 損失) - SLO 消費: 月予算の 65% - Sev: 2 ## Timeline (UTC) 2026-03-15 09:15 - Deploy 開始 (v2.4.1) 2026-03-15 09:23 - Cloud Monitoring alert 発火 (Fast burn 18x) 2026-03-15 09:25 - SRE Oncall がトリアージ開始 2026-03-15 09:31 - IC 指名、Operations Lead と Comms 着任 2026-03-15 09:33 - Feature Flag OFF(緩和開始) 2026-03-15 09:35 - 影響収束を確認、SLI 回復 2026-03-15 09:50 - Status Page 「Resolved」更新 ... ## Root Cause(Five Whys) [詳細] ## Trigger [何が引き金を引いたか] ## Detection - どう検知したか (alert / customer report) - 検知から対応までの時間 ## Resolution - 何で復旧したか - mitigation, rollback, fix の区別 ## What Went Well - Multi-burn-rate alert が 8 分で発火 - Feature Flag で即時止血できた - IC 指名がスムーズ ## What Went Wrong - Canary 段階で気づけなかった - Status Page 更新に 17 分かかった - Runbook が古かった ## Where We Got Lucky - 偶然にも障害が日中で人員確保できた ## Action Items | # | Action | Owner | Priority | Due | |---|--------|-------|----------|-----| | 1 | Canary verification を追加 | SRE A | P0 | 2 週間 | | 2 | Status Page 自動更新導入 | SRE B | P1 | 1 ヶ月 | | 3 | Runbook 四半期見直しプロセス | Eng Mgr | P2 | 3 ヶ月 | ## Lessons Learned [組織として何を学んだか] ## Supporting Information - Cloud Logging クエリ: ... - Grafana dashboard: ... - 関連 ticket: ...
7.7 Game Day / Wheel of Misfortune
🎮 Game Day(障害想定演習)
- シナリオ作成(例:asia-northeast1-a 完全停止)
- 影響予測ドキュメント作成
- 実施時刻決定(事前告知 or 抜き打ち)
- Chaos 注入(実際にゾーン切断 or シミュレート)
- 検知 → 対応 → 復旧の演習
- Debrief(学び、Runbook 改善)
🎡 Wheel of Misfortune
オンコール訓練ゲーム。実コードを触らず、口頭での対応訓練。
- シナリオを乱数 / ホイールで選択
- 担当者が「何をするか」を口頭で説明
- ファシリテーターが「次に何が起こる」を返す
- チームで対応のフィードバック
- Runbook の漏れを発見
- 新入 SRE のオンボーディングに最適
7.8 事故ケース集(インシデント対応)
| 状況 | asia-northeast1 が完全停止。Cloud DNS で us-central1 に切替。 |
|---|---|
| 結果 | TTL 600 秒のため、最大 10 分間古い DNS をキャッシュするクライアント残存。ユーザーの一部は 10 分後まで access できず。 |
| 原因 | DNS TTL が長すぎ(デフォルト 300-3600 秒)。 |
| 対処 | 本番 record の TTL を 60 秒に短縮。または Multi-cluster Ingress(Anycast Global LB)で DNS 切替自体を不要に。 |
| 状況 | IC が「自分の方が早く治せる」と kubectl を叩き始める。 |
|---|---|
| 結果 | 状況把握が止まり、Comms が情報を取れず、Status Page 更新停滞、顧客への報告遅延。新事象(DB 障害連鎖)の判断が遅れる。 |
| 原因 | IC は判断と統率に専念すべきという ICS 原則違反。 |
| 対処 | IC は手を動かさない。「触りたくなったら別の Ops を指名して引き継ぐ」。Postmortem で原則を再確認。 |
| 状況 | Comms Lead 不在、SRE Oncall が対応で手一杯。 |
|---|---|
| 結果 | Status Page が更新されないまま 60 分経過 → Twitter で顧客が大量に苦情、信頼失墜。 |
| 原因 | Status Page 更新の SLA 未定義。Comms Lead がトリアージから外れていた。 |
| 対処 | SLA 制定:「障害認識後 15 分以内に初回投稿、その後 30 分ごと」。Status Page 自動連動(PagerDuty incident → Statuspage API)。 |
| 状況 | Fast burn alert 発火 → エンジニアが「まず原因を」と Cloud Logging を 30 分探す。 |
|---|---|
| 結果 | その間ユーザー影響継続、SLO 月予算の 70% 消費、SLA 違反確定。 |
| 原因 | 「Mitigate first, fix later」原則違反。新版が原因と疑わしいなら即 rollback すべき。 |
| 対処 | Runbook 1 行目に「不明な場合は直近 deploy を即 rollback」を記載。Cloud Deploy の auto-rollback on failure を有効化。 |
| 状況 | Postmortem に「監視を強化する」「テストを書く」と抽象的 AI を 5 件起票。 |
|---|---|
| 結果 | 担当者・期限・優先度未定。1 年経過しても 1 件も完了せず、同類障害が再発。 |
| 原因 | AI が SMART でない(Specific / Measurable / Assigned / Realistic / Time-bound)。 |
| 対処 | Postmortem テンプレ強制:AI は必ず担当者・期限・優先度を明記。月次 Postmortem レビュー会で AI の完了状況追跡。 |
8事故ケース総集編 / 試験で問われる即答パターン
8.1 全章の事故ケース一覧(25 件)
| # | 領域 | 事故 | 根本原因 | 即対処 |
|---|---|---|---|---|
| 1 | SLO | 99.99% を盲目的に目指してチーム疲弊 | ユーザー要求調査なし | SLI 実績ベースで段階引き上げ |
| 2 | SLI | ウィンドウ 100% 要求で慢性違反 | 閾値設計ミス | 「99% を good」に緩和、リクエストベース化 |
| 3 | SLA | SLA = SLO で契約違反多発 | バッファなし | SLI < SLO < SLA の 3 階層化 |
| 4 | SLI | CPU を SLI にして顧客クレーム見逃し | ユーザー視点欠如 | HTTP 成功率 + p99 latency に変更 |
| 5 | SLI | 平均 latency で p99 災害見逃し | 平均は外れ値で歪む | 必ず percentile(p95/p99)を使う |
| 6 | SLO | 100 個の SLO で追えなくなる | Less is more 違反 | CUJ ベースで 3-5 個に集約 |
| 7 | SLI | サーバ側のみで LB 前障害見逃し | 到達前障害が見えない | クライアント側 SLI(synthetic / RUM)併用 |
| 8 | Burn rate | 5min ウィンドウだけで flapping | Multi-window 未適用 | 1h AND 5min の AND 条件化 |
| 9 | Burn rate | Slow burn を放置して予算枯渇 | ticket SLA 未定義 | 48h 以内対応 SLA、自動エスカレ |
| 10 | Alert | 複数 SLI alert 同時発火で混乱 | SLI 相関考慮なし | Service レベル集約、grouping 有効化 |
| 11 | Burn rate | 夜間低トラフィックで false positive | 分母が小さい | 最低リクエスト数閾値、時間帯別 SLO |
| 12 | SLO | Calendar SLO の月末抜け道 | 月初リセット狙い | Rolling 28-day に変更 |
| 13 | Service Mesh | Sidecar OOM でリクエスト全停止 | memory 見積もり不足 | memory 256/512Mi、Sidecar scope 縮小 |
| 14 | Service Mesh | mTLS STRICT で legacy 通信不可 | 段階移行欠如 | PERMISSIVE → STRICT の段階移行 |
| 15 | Service Mesh | AuthorizationPolicy 全 mesh 適用事故 | namespace 指定漏れ | root namespace 禁止の OPA policy |
| 16 | K8s | PDB minAvailable=replica で rolling 停止 | 余裕なし | maxUnavailable: 1 に修正 |
| 17 | VPA | Auto mode で Pod 再起動連発 | updaterPolicy 過敏 | Off + 週次手動 or in-place α 機能 |
| 18 | Cloud Run | min-instances 全 service で乱用、コスト 2 倍 | 雑な一斉設定 | SLO 厳しい 3 サービスだけ ≥ 1 |
| 19 | HPA | HPA+VPA 同 CPU で振動 | 同シグナル制御 | HPA=RPS、VPA=Memory only |
| 20 | MIG | Predictive 誤予測で過剰スケール | 一時イベント学習 | キャンペーン後は Predictive 一時停止 |
| 21 | DNS | TTL 600s で region 切替 10 分遅延 | TTL 長すぎ | TTL 60s、または MCI で DNS 不要に |
| 22 | ICS | IC が手を出し全体把握喪失 | 役割原則違反 | IC は判断専念、別 Ops に引き継ぎ |
| 23 | ICS | Status Page 1h 放置 → SNS 炎上 | 更新 SLA 未定義 | 15 分以内初回、自動連動 |
| 24 | Incident | 原因究明先行で 30 分影響継続 | Mitigate first 違反 | 不明なら直近 deploy 即 rollback |
| 25 | Postmortem | 抽象的 AI が 1 年放置、再発 | SMART でない | 担当・期限・優先度必須、月次レビュー |
8.2 試験で問われる即答パターン(30+ 行)
| 問題のキーワード | 正解(即答) |
|---|---|
| SRE と DevOps の関係 | class SRE implements DevOps(DevOps = 哲学、SRE = 具体実装) |
| SRE が運用に使う時間の上限 | 50%(Toil ≤ 50% ルール) |
| ユーザー影響を反映する最小監視セット | Four Golden Signals(Latency / Traffic / Errors / Saturation) |
| SLI / SLO / SLA の数値関係 | SLI > SLO > SLA(実測が一番高く、SLA が最も低い保証) |
| Error Budget の数式 | 1 − SLO |
| Burn Rate の数式 | エラー率 / (1 − SLO) |
| SLO 99.9% の月予算 | 43.2 分 |
| SLO 99.99% の月予算 | 4.32 分 |
| SLO 99.99% の年予算 | 52.6 分 |
| SLO 99.999% の月予算 | 25.9 秒 |
| Multi-burn-rate の Fast burn 推奨 | 1h + 5min / 14.4x / 2% 消費 |
| Multi-burn-rate の Medium burn | 6h + 30min / 6x / 5% 消費 |
| Multi-burn-rate の Slow burn (ticket) | 3d + 6h / 1x / 10% 消費 |
| ショートウィンドウとロングウィンドウの比 | 1/12(SRE Workbook 推奨) |
| アプリ無改修で SLO 計測 | Cloud Service Mesh + istio_requests_total |
| マイクロサービス間の mTLS / 認可 | Cloud Service Mesh(PeerAuthentication / AuthorizationPolicy) |
| カスタムメトリクスで Pod 数調整 | HPA(External metric / Stackdriver Adapter) |
| Pod の CPU / Memory request 自動調整 | VPA |
| Node 数を Pod 要求に応じて増減 | Cluster Autoscaler |
| Node Pool 自体を要求から自動生成 | Node Auto-Provisioning(NAP) |
| HPA と VPA を同じメトリクスで併用 | NG(公式非推奨、振動の原因) |
| 計画的中断時の Pod 保証 | Pod Disruption Budget(PDB) |
| Cloud Run の cold start 削減 | min-instances ≥ 1 + Startup CPU Boost |
| Cloud Run でバックグラウンド処理 | CPU always allocated(--no-cpu-throttling) |
| 確実にピーク容量を確保(汎用 VM) | Reservations + CUD |
| GPU/TPU を確実に確保(AI/ML) | Dynamic Workload Scheduler(DWS) |
| 大規模 LLM pretraining で 30 日確保 | DWS calendar mode |
| 待てる ML バッチで最安 GPU | DWS flex-start mode |
| 中断 OK バッチで最安 | Spot VM(最大 91% off) |
| 同一ラック高速接続(GPU クラスタ) | Block reservation |
| インシデント時の最優先アクション | Mitigate first(影響緩和 → 容量 → rollback → 究明) |
| 最速で影響を止める手段 | Feature Flag OFF(秒単位) |
| Cloud Run rollback の最速手段 | revision traffic 100% 旧版 |
| GKE rollback の最速手段 | kubectl rollout undo deployment/NAME |
| GLB backend 安全削除 | capacity-scaler 0 + connection draining(最大 3600s) |
| リージョン切替の手段 | Cloud DNS weighted / Multi-cluster Ingress |
| 障害時の役割分担 | Incident Command System(ICS) |
| IC(Incident Commander)の責務 | 全体統率・判断(技術作業はしない) |
| Postmortem の文化原則 | Blameless(個人を責めない、システムを問う) |
| 障害想定の訓練 | Game Day / Wheel of Misfortune |
| DORA 4 metrics | DF / LT / CFR / MTTR(+ Reliability で 5) |
8.3 ダウンタイム計算ドリル
問 1:SLO 99.95%、月(30日)の Error Budget は?
→ 0.05% × 30 × 24 × 60 = 21.6 分
問 2:SLO 99.9%、過去 1 時間で 10,000 req 中 200 件失敗。Burn rate は?
→ エラー率 = 2%、Burn rate = 2% / 0.1% = 20x(Fast burn 発火)
問 3:SLO 99.99% (rolling 28日)、過去 1 時間で 50,000 req 中 7 件失敗。Burn rate は?
→ エラー率 = 0.014%、Burn rate = 0.014% / 0.01% = 1.4x(Slow burn 範囲)
問 4:SLO 99.5%、月予算を使い切るのに 5 日かかったペース。Burn rate は?
→ 30 / 5 = 6x(Medium burn)
問 5:Cloud Run で RPS 800、平均レイテンシ 250ms、concurrency 80。必要な最小 instances は?
→ Little's Law: L = 800 × 0.25 = 200 concurrent → 200 / 80 = 2.5 → 3 instances 最低(ピーク余裕で 5+ 推奨)
問 6:HPA target CPU 70%、現在 Pod 5 個 / 平均 CPU 90%。期待 Pod 数は?
→ 5 × (90/70) = 6.43 → 7 Pod に scale up
8.4 トラブルシュート意思決定フロー
- SLI / Burn rate を確認:影響範囲(service / region / user segment)を特定。Fast / Medium / Slow のどれが発火か。
- 「Mitigate first」を発動:直近 deploy があるなら Feature Flag OFF または rollback。原因究明は後。
- IC 指名:Sev 2 以上なら ICS に従い役割分離。Comms は Status Page 即時更新(15 分以内)。
- 容量チェック:HPA / max-instances / Quota が上限に達していないか。緊急なら max を引き上げる。
- 依存サービスの確認:DB / Cache / 下流 API / GCP Status。依存先障害なら failover or graceful degradation。
- Cloud Logging / Trace を確認:Trace ID で分散追跡、エラーパターンの抽出。
- 復旧確認:SLI が回復、Burn rate が 1x 未満に戻ったらインシデント終了宣言。
- Postmortem 起票:Sev 3 以上は必須。Blameless で、Action Items に担当・期限・優先度を明記。