SLA / SLO / SLI

サービスの信頼性を定量的に管理するための 3 つの指標体系

SRE運用

SLA / SLO / SLI とは

SRE (Site Reliability Engineering) の中核概念で、サービスの信頼性を定量的に管理するための 3 層の指標体系である。Google の SRE チームが体系化し、2016 年の「Site Reliability Engineering」で広く知られるようになった。

指標 正式名称 定義
SLI Service Level Indicator 信頼性を測定する具体的なメトリクス リクエスト成功率、レイテンシ P99
SLO Service Level Objective SLI の目標値 (内部目標) 成功率 99.9%、P99 < 200ms
SLA Service Level Agreement 顧客との契約上の保証 稼働率 99.95%、違反時は返金

3 つの関係

SLI (何を測るか) → SLO (どこまで目指すか) → SLA (何を約束するか)
  リクエスト成功率     99.9%                    99.95% (違反時10%返金)

SLO は SLA より厳しく設定する。SLO を守れていれば SLA 違反は起きない。SLO と SLA の差がバッファ (安全マージン) になる。SLA なしで SLO だけを運用する組織も多い。社内サービスや初期段階のプロダクトでは、SLO のみで十分だ。

SLI の選び方

SLI は「ユーザーが体感する品質」を測定するメトリクスを選ぶ。サーバーの CPU 使用率やメモリ使用量は SLI に適さない。ユーザーにとって重要なのは「リクエストが成功したか」「応答が速かったか」だ。

サービス種別 推奨 SLI 測定方法
API サーバー リクエスト成功率 2xx レスポンス / 全リクエスト
API サーバー レイテンシ P50, P99 のレスポンスタイム
バッチ処理 完了率 成功ジョブ / 全ジョブ
データパイプライン 鮮度 データの最終更新からの経過時間
ストレージ 耐久性 データ損失率

エラーバジェット

SLO が 99.9% なら、30 日間で 0.1% (約 43 分) のダウンタイムが許容される。この「許容される失敗の量」がエラーバジェットだ。

月間エラーバジェット = 30日 × 24時間 × 60分 × (1 - SLO)

SLO 99.9%43.2 分/月
SLO 99.95%21.6 分/月
SLO 99.99%4.3 分/月

エラーバジェットの運用ルールは明確にする。

  • バジェットが残っている → 新機能のリリースを積極的に行う
  • バジェットが枯渇 → リリースを凍結し、信頼性改善に集中する
  • バジェットの消費速度が急上昇 → アラートを発火し、原因を調査する

この仕組みにより、「信頼性 vs 機能開発」のトレードオフが定量的に管理できる。開発チームと SRE チームの間で「もっと安定させろ」「もっと速くリリースしろ」という感情的な対立が解消される。

9 の数と実際のダウンタイム

「ナイン」の数が 1 つ増えるごとに、許容ダウンタイムは 10 分の 1 になる。

SLO 月間ダウンタイム 年間ダウンタイム 難易度
99% (ツーナイン) 7.3 時間 3.65 日 単一サーバーでも達成可能
99.9% (スリーナイン) 43 分 8.76 時間 冗長化が必要
99.95% 21.6 分 4.38 時間 マルチ AZ が必要
99.99% (フォーナイン) 4.3 分 52.6 分 自動フェイルオーバー必須
99.999% (ファイブナイン) 26 秒 5.26 分 マルチリージョン必須

99.99% と 99.999% の差は月間 4 分だが、達成に必要なアーキテクチャの複雑さとコストは桁違いに増える。ほとんどのサービスでは 99.9%〜99.95% が現実的な目標だ。

AWS サービスの SLA

AWS の主要サービスの SLA は以下のとおり。自サービスの SLO を設定する際の参考になる。依存する AWS サービスの SLA より高い SLO を自サービスに設定しても達成できない。

  • S3: 99.9% の可用性 (Standard)
  • Lambda: 99.95% の可用性
  • DynamoDB: 99.99% の可用性 (Standard)、99.999% (グローバルテーブル)
  • CloudFront: 99.9% の可用性
  • API Gateway: 99.95% の可用性

よくある誤解

「SLO は高ければ高いほどよい」

SLO を 99.999% に設定すると、月間 26 秒しかダウンタイムが許されない。デプロイのたびにエラーバジェットが枯渇し、事実上リリースできなくなる。SLO はユーザーの期待に合わせて設定する。社内ツールに 99.999% は過剰だ。

「SLA = SLO」

SLA は契約であり、違反すると金銭的なペナルティが発生する。SLO は内部目標であり、違反してもペナルティはない (エラーバジェットの消費として扱う)。SLA は SLO より緩く設定し、バッファを持たせる。

より深く学ぶには関連書籍が役立つ。

関連用語