🐙SRE Workbookから学んだこと:SLO・エラーバジェット・オンコール設計

subaru · ·

Google SRE Workbook を読んで、特に実務に直結すると感じた概念とルールをまとめた。


SLI / SLO / SLA

用語意味
SLI (Service Level Indicator)測定可能なサービス品質の指標成功リクエスト率、P99レイテンシ
SLO (Service Level Objective)SLIに対する内部目標値「99.9%のリクエストを300ms以内に返す」
SLA (Service Level Agreement)顧客との契約上の合意。違反時にペナルティが発生する「月間99.5%の可用性を保証する」

SLOはSLAより厳しく設定するのが原則。SLAを下回る前にチームが行動できる余裕を持たせる。

「信頼性が十分か否か」を主観的に議論するのではなく、数値で合意することで、PM・開発・SREの3者が同じ基準で話せるようになる。そして100%の可用性を目標にしてはならない。それは開発を完全に止めることを意味する。


エラーバジェット

エラーバジェット = 1 - SLO

SLOが99.9%(月間)であれば、エラーバジェットは0.1%。30日 × 24時間 × 60分 × 0.1% ≈ 43.2分が許容できる停止時間になる。

この「バジェット」をどのように使うかは開発チームが決める。新機能リリース、インフラ変更、実験はすべてバジェットを消費する。

消費状況アクション
0〜50%通常どおり開発・リリース
50〜75%リリースの影響分析を強化
75〜100%リリース凍結、信頼性改善にスプリントを割く
100%超SLAへの影響を検討

SREと開発が対立するのではなく、同じバジェットを共有するパートナーになれるのが最大の価値。


ルール: エラーバジェットで優先度を決める

「信頼性か速度か」の議論は、ステークホルダーが変わるたびに繰り返される。この議論に毎回リソースを使うのは非効率だ。

エラーバジェットポリシーを事前合意することで解決する:

  • バジェット残あり → 新機能開発・実験を積極的に進める
  • バジェット75%消費 → リリース前の影響分析を強化する
  • バジェット枯渇 → 新機能リリースを凍結し、信頼性改善を最優先にする

この判断を感情・政治・個人の意見で覆さないことが肝心。

例外はある——セキュリティパッチや法的要件はバジェット関係なく対応する。ただし例外は文書化する。


オンコール設計

設計なしのオンコールは、夜中の頻繁なページング・特定エンジニアへの集中・燃え尽きへとつながる。オンコールは「当番」ではなくシステムとして設計する必要がある。

適切なオンコール負荷の基準(Googleの目安)

  • 1シフト(12時間)あたりのインシデント:2件以下
  • 週のオンコール比率:25%以下(週4日中1日相当)
  • 2人ペア制:プライマリ + バックアップで単一障害を防ぐ

シフト設計のポイント

  • 12時間シフト(24時間連続は避ける)
  • グローバルチームでは「Follow the Sun」方式
  • 週次でローテーション

シフト交代時には「現在進行中の問題・未解決アラート・直近の変更」を引き継ぐ。ランブック(操作手順書)をインシデントチケットにリンクしておく。

対応が遅かった・判断が間違っていたを責めない。ポストモーテムで学習に変える。


ルール: オンコール当番中も戦略的作業時間を確保する

オンコールが「反応的対応だけ」になると:

  • エンジニアの燃え尽きと離職が増加
  • Toilが削減されず、翌シフトも同じ状況が続く

オンコール当番のシフト中であっても、少なくとも50%の時間をプロジェクト作業(自動化・改善・ドキュメント整備)に充てる。

実践として:

  • 週のオンコール負荷を記録し(インシデント件数・対応時間)、月次でチームに共有
  • 負荷が高かった週は翌週のスプリントで「Toil削減タスク」を優先的に割り当てる
  • オンコールシフトのレトロスペクティブを月次で実施

SEV1の大規模インシデントが発生した週は50%を超えることは許容する。ただし翌シフト以降に必ず改善タスクを組み込む。


出典

  • Google SRE Workbook(Betsy Beyer他)第2章「Implementing SLOs」
  • Google SRE Workbook(Betsy Beyer他)第8章「On-Call」