PCDBE 合格対策
🔬 SRE DEEP DIVE

SRE 運用 — Operations & Reliability

マネージド DB といえど SRE 実務は不可欠。SLO/SLI 設計、Error Budget、Runbook、On-call、変更管理、DR ドリル の実装パターン集。

📑 目次

  1. 1. SLO/SLI/Error Budget の設計
  2. 2. DB ごとの SLI 候補
  3. 3. Runbook テンプレート集
  4. 4. On-call 体制と通知設計
  5. 5. 変更管理 (Change Management)
  6. 6. DR ドリルの実施パターン
  7. 7. Chaos Engineering 入門
  8. 8. キャパシティプランニング
  9. 9. Postmortem 文化

1. SLO / SLI / Error Budget の設計

1-1. 概念の整理

用語意味誰が決めるか
SLA (Service Level Agreement) サービスとして契約上保証する稼働率 Google(クラウド事業者)
SLO (Service Level Objective) SLI に対する内部目標値 自社(SRE と PdM)
SLI (Service Level Indicator) 実際に測定する指標 自社(SRE)
Error Budget SLO に対する許容ダウンタイム SLO から自動算出
例: 「Cloud SQL のクエリ成功率 SLO = 99.9%」 の場合
Error Budget = 100% - 99.9% = 0.1%
月間 (30日 = 43,200分) → 許容ダウンタイム = 43.2 分/月

1-2. SLO 階層の設計

ユーザー視点の SLO (最重要) └─ クエリ p99 レイテンシ < 100 ms (99.9%) └─ クエリ成功率 > 99.95% サービス視点の SLO (構成要素) └─ DB CPU 利用率 < 80% (95%) └─ ストレージ利用率 < 80% (98%) └─ レプリ遅延 < 5 秒 (99.5%) インフラ視点の SLI (詳細メトリクス) └─ Cloud SQL 死活 └─ 接続成功率 └─ binlog の遅延
SLO 設計のコツ: ユーザー視点を最上位に置く。インフラメトリクスだけで SLO を作ると「DB は動いてるのにユーザーは困っている」事態に。エンドツーエンドの体験を必ず計測する。

2. DB ごとの SLI 候補

Cloud SQL

SLI計測方法典型 SLO
クエリ成功率アプリログのエラー率 / Cloud Logging99.95%
クエリ p99 レイテンシCloud Monitoring cloudsql.googleapis.com/database/postgresql/transactions< 100ms
接続失敗率カスタムメトリクス(アプリ側)< 0.1%
レプリ遅延 p99cloudsql.googleapis.com/database/replication/replica_lag< 5s
バックアップ成功率cloudsql.googleapis.com/backup_operations100%

Spanner

SLI計測方法典型 SLO
クエリ成功率spanner.googleapis.com/api/api_request_count でステータス別集計99.99%
高優先度 CPU 利用率spanner.googleapis.com/instance/cpu/utilization_by_priority< 65%
クエリ p99 レイテンシspanner.googleapis.com/api/request_latencies< 50ms
Lock conflictsQuery Stats から< 100/min

Bigtable

SLI計測方法典型 SLO
サーバーサイド レイテンシ p99bigtable.googleapis.com/server/latencies< 10ms
CPU 利用率クラスタ平均< 70%
Hot Tablet 数Key Visualizer + Custom Metric= 0
レプリ遅延bigtable.googleapis.com/replication/latency< 10s

3. Runbook テンプレート集

Runbook とは

Runbook = 「アラートが鳴ったら何をするか」のステップバイステップ手順書。深夜の On-call エンジニアが寝ぼけても作業できるレベルで書く。

テンプレート: Cloud SQL CPU 高騰

  1. 影響範囲確認 Cloud Monitoring で「DB に依存するサービスのエラー率」を確認。ユーザー影響がない場合は P3 として翌朝対応。
  2. 原因切り分け (15分以内) Query Insights で Top SQL 確認 → 特定 SQL が CPU を食っているか? → 急なバッチが走ったか?
  3. 緊急対応 - バッチが原因なら停止
    - スロークエリなら SELECT pg_cancel_backend(pid) でキャンセル
    - リソース不足ならマシンタイプアップ(要 ChatOps 承認)
  4. 事後対応 Incident チケット起票、Postmortem の予約、Query Insights のレポート保存

テンプレート: ストレージ枯渇間近

  1. 残量確認 gcloud sql instances describe で残ストレージサイズ確認
  2. 増加要因確認 テーブル毎の容量 (information_schema.tables) を抽出、binlog/WAL のサイズも確認
  3. 緊急対応 - Auto Storage Increase 無効なら有効化
    - 不要な過去データ削除(PITR 内のテーブルは別途検討)
  4. 恒久対応 容量増加トレンドの分析、アーカイブ戦略策定

テンプレート: レプリ遅延拡大

  1. 遅延継続時間確認 Cloud Monitoring グラフで遅延の急増ポイントを特定
  2. 原因切り分け - Primary 側: 大量書き込みバッチが走っていないか?
    - Replica 側: CPU/メモリ不足になっていないか?
    - 大規模 DDL (ALTER TABLE) が走っていないか?
  3. 対応 バッチを分割実行、レプリのマシンタイプアップ、不要なクエリを Primary に逃がす

4. On-call 体制と通知設計

4-1. アラート優先度の設計

優先度通知先応答 SLA典型例
P1 (Critical) PagerDuty + 電話 5分以内 DB ダウン、書き込み 100% 失敗、ストレージ枯渇
P2 (High) PagerDuty 15分以内 CPU 90%超、レプリ遅延 5分超
P3 (Warning) Slack 翌営業日 CPU 70%超、ストレージ 70%超
P4 (Info) Slack/Email 定期レビュー Query Insights 推奨、Cost 増加
アラート疲労 (Alert Fatigue): 鳴りすぎるアラートは無視される。
対策: アラートあたり「アクション可能か?」を常に問う。アクション不要なものは削除。

4-2. ロテーション設計

推奨パターン:

5. 変更管理 (Change Management)

5-1. 変更影響度の分類

変更タイプ影響度必要なプロセス
マイナーパッチ自動適用事前通知のみ
マシンタイプ変更変更承認 + メンテウィンドウ
スキーマ変更(軽量)レビュー + ステージング検証
スキーマ変更(重い ALTER)変更承認 + ドライラン + メンテウィンドウ
メジャーアップグレード致命的Blue-Green + 全機能テスト + ロールバック計画
リージョン移行致命的プロジェクト体制 + 数ヶ月計画

5-2. 変更時のチェックリスト

変更実施前:
  1. 影響範囲ドキュメント化
  2. テスト環境で実施
  3. ロールバック手順を文書化
  4. 変更承認(必要に応じて CAB)
  5. 関係者への通知
  6. 監視強化体制
変更実施中:
  1. 変更ログをリアルタイム記録
  2. 監視メトリクスを表示
  3. Go/No-Go チェックポイント
変更完了後:
  1. 動作確認(事前定義のテスト)
  2. 監視メトリクスの正常性確認
  3. 関係者への完了通知
  4. 記録(変更履歴 DB)

6. DR ドリルの実施パターン

6-1. DR ドリルの目的

マネージド DB でも、実際にフェイルオーバーしてみないとアプリが正しく動くかわからない。Runbook の通り動けるか、人と手順の検証が目的。

6-2. ドリルパターン

パターン A: Cloud SQL 手動フェイルオーバー

事前準備 ├ DR チーム招集(運用 + アプリ + ビジネス) ├ 影響時間の合意(ユーザー通知) └ ロールバック計画確認 実施 (本番のメンテ時間) ├ gcloud sql instances failover ├ アプリログで再接続状況を確認 ├ クエリレイテンシの監視 └ フェイルオーバー所要時間記録 事後 ├ Postmortem 形式で振り返り └ Runbook 更新

パターン B: クロスリージョン Replica Promote

ステージング環境で実施 (本番は影響大すぎ) ├ DR リードレプリカを別環境に作成 ├ アプリのステージング接続先を切り替え ├ Promote 実行 ├ 整合性検証 └ 元構成への戻し

パターン C: テーブル誤削除のリストア

  1. 本番テーブルを意図的に「削除」(ステージング)
  2. PITR で削除直前に巻き戻し
  3. 新しい復元先インスタンスから削除されたテーブルだけエクスポート
  4. 本番に再インポート
  5. 全プロセス所要時間と問題点を記録
DR ドリル頻度: 四半期に 1 回、ロール分担を変えながら全員が経験を持つ。「年 1 回だけ」ではいざという時に動けない。

7. Chaos Engineering 入門

7-1. 概念

計画的に小規模な障害を注入し、システムのレジリエンスを検証する手法。本番でなく検証環境で実施。

7-2. DB 領域での Chaos 実験

実験方法確認事項
レイテンシ注入 tc コマンド or Proxy で DB ネットワークに遅延付加 アプリのタイムアウト挙動、再試行ロジック
パケットロス注入 iptables で一定割合パケットドロップ 接続プールの回復性
強制フェイルオーバー gcloud sql instances failover RTO 計測、アプリ再接続
ストレージ満杯シミュ 大量データ書き込みで意図的に満杯 アラート発火、書き込みエラー処理
Chaos は必ず非本番環境で実施。本番で実施するには成熟した SRE 組織と組織合意が必要。

8. キャパシティプランニング

8-1. プランニングの考え方

現在のリソース利用率 ↓ 成長率 (月次トレンド) ↓ 予測モデル (例: 3ヶ月先まで) ↓ 発注リードタイム考慮 ↓ 早めにスケールアップ計画

8-2. メトリクスベース予測

メトリクス監視指標アクション閾値
CPU 利用率30日平均、ピーク値平均 60%超でアップグレード計画
ストレージ増加率 (GB/日)3ヶ月先で 80% 到達なら拡張
接続数ピーク値の月次推移max の 60% で警告
QPS毎時ピーク値キャパシティの 70% で対策

8-3. Spanner のキャパシティプランニング例

  1. 過去 3 ヶ月の CPU 利用率トレンドを抽出
  2. 線形 / 指数モデルでフィット
  3. 6 ヶ月先で CPU 65% を超える時期を予測
  4. 1 ヶ月前に PU 増加を計画
  5. 自動スケーリング (Spanner Autoscaler) は併用するが、急増には対応が遅れる

9. Postmortem 文化

9-1. Blameless Postmortem

「誰が悪いか」ではなく「システム / プロセス / ツールのどこに問題があったか」に焦点を当てる。これにより全員が事故を正直に報告でき、再発防止につながる。

9-2. テンプレート

# Incident YYYY-MM-DD: [タイトル]

## サマリー
- 発生時刻:
- 復旧時刻:
- 影響範囲: (どの機能・何人のユーザー・どれだけのトランザクション)
- 重要度: P1 / P2 / P3

## タイムライン
- HH:MM 監視アラート発生
- HH:MM On-call が応答
- HH:MM 原因特定
- HH:MM 対応開始
- HH:MM 復旧確認

## 根本原因 (Root Cause)
- 5 Whys 分析:
  - なぜ A?  → B
  - なぜ B?  → C
  - ...

## 効いた対応 / 効かなかった対応
- 効いた: [対応内容]
- 効かなかった: [対応内容と理由]

## 再発防止策 (アクションアイテム)
- [ ] AI-1: 担当=Alice, 期限=YYYY-MM-DD
- [ ] AI-2: 担当=Bob, 期限=YYYY-MM-DD

## 教訓
- 何を学んだか
- 他チームに共有すべきか

9-3. アクションアイテムのトラッキング

Postmortem のアクションアイテムが実装されないと、同じ事故が再発する。SRE チームは AI のクローズ率を 四半期毎に KPI として測定する。

📋 SRE 観点の試験ポイント

PCDBE 試験では、SRE 視点で次が問われる:
  1. 「自動化と再現性」 → Terraform + IaC が正解
  2. 「監視とアラート」 → Cloud Monitoring + Alert Policy + Notification Channel
  3. 「自動復旧」 → Cloud SQL HA で自動フェイルオーバー
  4. 「変更管理」 → メンテナンスウィンドウ + Near-Zero Downtime (Enterprise Plus)
  5. 「災害対策」 → クロスリージョン Replica + 手動 Promote 手順