SLA / SLO / SLI
サービスの信頼性を定量的に管理するための 3 つの指標体系
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 より緩く設定し、バッファを持たせる。
より深く学ぶには関連書籍が役立つ。