サービスレベル目標(SLO)

英語名 Service Level Objectives
読み方 サービス レベル オブジェクティブズ
難易度
所要時間 30分〜1時間
提唱者 Google SRE Book
テンプレート あり ↓
目次

ひとことで言うと
#

SLI(計測指標)→SLO(目標値)→SLA(契約)の3段階でサービス品質を定義し、エラーバジェットの考え方で信頼性と開発速度のバランスを取るフレームワーク。

押さえておきたい用語
#

押さえておきたい用語
SLI(Service Level Indicator)
サービス品質を数値化する具体的な計測指標のこと。可用性、レイテンシ、エラー率などが代表的。
SLO(Service Level Objective)
SLIに対して設定する内部的な品質目標を指す。「可用性99.9%」「p99レイテンシ200ms以下」など。
SLA(Service Level Agreement)
顧客との間で交わす品質保証の契約。SLOより緩く設定し、違反時にはペナルティが発生する。
Error Budget(エラーバジェット)
SLO目標から逆算した許容される障害の総量。100% - SLO = エラーバジェットで計算する。
Burn Rate(バーンレート)
エラーバジェットが消費される速度。急速に消費されている場合はアラートを発報する指標である。

SLOの全体像
#

SLI → SLO → SLA の3段階とエラーバジェット
SLI(何を測るか)可用性レイテンシ p99エラー率計測可能な指標SLO(目標値)可用性 99.9%p99 < 200msエラー率 < 0.1%チーム内部の目標SLA(契約)可用性 99.5%SLOより緩い値違反時はペナルティ顧客との契約Error Budget = 100% - SLOSLO 99.9%の場合= 月間43分の障害を許容バジェット残り多い → 攻めバジェット残り少ない → 守り100%を目指さない。適切な目標を設定してバランスを取るSLOは定期的に見直し、ユーザーの期待値に合わせて調整する
SLO設計の進め方フロー
1
SLI選定
ユーザー体験に直結する指標を選ぶ
2
SLO設定
現状値とユーザー期待から目標を決める
3
エラーバジェット運用
バジェット残量でリリース判断を行う
四半期レビュー
SLO達成率を確認し目標を再調整する

こんな悩みに効く
#

  • 「可用性100%を目指す」方針のせいでリリースが遅くなっている
  • 信頼性エンジニアリングに投資すべきタイミングがわからない
  • SLAを設定しているがSLOとの関係が整理されていない

基本の使い方
#

ユーザー体験に直結するSLIを選定する
可用性(成功リクエスト / 全リクエスト)、レイテンシ(p99応答時間)、正確性(正しいレスポンス / 全レスポンス)から、サービスの特性に合ったSLIを2〜4つ選ぶ。内部メトリクス(CPU使用率等)はSLIに向かない。
現状の計測値とユーザー期待からSLOを設定する
過去3ヶ月の実績値を確認し、ユーザーが「許容できるライン」をSLOにする。最初は現状値の少し上に設定し、達成できたら段階的に厳しくする。100%は設定しない(コストが無限になる)。
エラーバジェットでリリース判断を行う
SLO 99.9%なら月間43分のダウンタイムがエラーバジェット。バジェットが十分残っていればリスクの高いリリースも実行可能。バジェットが枯渇に近づいたら信頼性改善にシフトする。

具体例
#

例1:SaaS企業がSLOで信頼性と開発速度のバランスを取る

エンジニア80名のBtoB SaaS。「障害をゼロにする」方針で、リリース前のテスト期間が 2週間 に設定されていた。結果、リリース頻度は月1回に低下。

SLO 99.9%(月間43分のエラーバジェット)を設定。バジェット残量でリリース判断を行うルールに変更。

状態行動
バジェット残り > 70%積極的にリリース
バジェット残り 30-70%通常リリース
バジェット残り < 30%リリース凍結、信頼性改善に集中

リリース頻度が 月1回 → 週2回 に改善。エラーバジェットの枯渇は四半期で 1回 のみで、その際は信頼性改善にリソースを集中投下し、次の四半期はバジェットに余裕を持てた。

例2:EC企業がSLAとSLOを適切に分離する

月間売上30億円のEC。顧客向けSLAで「可用性99.99%」を約束していたが、実態のSLOも同じ99.99%に設定していたためバッファがなく、SLA違反が年 3回 発生。違反ペナルティの支払い総額は年間 1,200万円

SLO 99.95%(SLAより厳しい)に再設定し、SLA 99.9%(SLOより緩い)にバッファを設けた。

指標
SLO99.99%99.95%
SLA99.99%99.9%
バッファ0%0.05%

SLOを現実的な値にしたことで、SLO違反時にSLA違反前に対策を打てるようになった。SLA違反は年 3回 → 0回 に。ペナルティ支払いもゼロに。

例3:動画配信サービスがレイテンシSLOで品質を管理する

月間500万ユーザーの動画配信サービス。「再生開始まで3秒以内」をユーザーが期待しているが、計測していなかったため実態が不明だった。

レイテンシSLIとして「再生開始時間のp95」を定義し、SLO 3秒以下を設定。計測を開始すると、p95が 4.8秒 でSLO未達が判明。

CDN配置の最適化とプリフェッチの導入で、3ヶ月後にp95が 4.8秒 → 2.3秒 に改善。SLO達成率は 72% → 97% に向上し、ユーザーの「バッファリングが長い」というNPS低評価コメントが 60%減 になった。

やりがちな失敗パターン
#

  1. SLOを100%に設定する — 100%は数学的にゼロダウンタイムを意味し、コストが無限に。ビジネス要件に見合った目標を設定する
  2. SLAとSLOを同じ値にする — バッファがないとSLO違反=即SLA違反になる。SLOをSLAより厳しく設定してバッファを確保する
  3. 内部メトリクスをSLIにする — CPU使用率80%でもユーザーに影響がなければ問題ない。SLIはユーザー体験に直結する指標を選ぶ
  4. SLOを一度決めて見直さない — ユーザーの期待値は変化する。四半期ごとにSLO達成率をレビューし、必要に応じて調整する

まとめ
#

SLOはSLI(計測指標)→SLO(目標値)→SLA(契約)の3段階でサービス品質を定義し、エラーバジェットで信頼性と開発速度のバランスを取るフレームワーク。100%を目指すのではなく、ユーザーの期待に見合った適切な目標を設定する。エラーバジェットの残量に応じてリリース判断を行い、四半期ごとにSLO達成率をレビューして目標を調整するサイクルが運用の鍵になる。

サービスレベル目標(SLO)のフレームワークテンプレート

このフレームワークを実際に使ってみましょう。