ストーリー
高橋アーキテクトの問いに、あなたは言葉に詰まった。
SLI / SLO / SLA の関係
SLA(Service Level Agreement) ← 契約(外部への約束)
│
└── SLO(Service Level Objective) ← 目標(内部の目標値)
│
└── SLI(Service Level Indicator) ← 指標(実測データ)
SLI(Service Level Indicator)
SLIは、サービスの品質を測る指標です。
// 代表的なSLI
interface SLIDefinitions {
// 可用性: 成功したリクエストの割合
availability: {
formula: 'successful_requests / total_requests';
example: '99,700 / 100,000 = 99.7%';
};
// レイテンシ: リクエストの応答時間
latency: {
formula: 'requests_below_threshold / total_requests';
example: 'P99 < 300ms のリクエストが全体の 99.5%';
};
// エラー率: エラーレスポンスの割合
errorRate: {
formula: 'error_requests / total_requests';
example: '300 / 100,000 = 0.3%';
};
// スループット: 単位時間あたりの処理量
throughput: {
formula: 'requests_per_second';
example: '1,000 req/s';
};
}
SLO(Service Level Objective)
SLOは、SLIに対する目標値です。
// SLOの定義例
interface SLODefinition {
name: string;
sli: string;
target: number; // 目標値(%)
window: string; // 計測期間
errorBudget: number; // エラーバジェット
}
const sloExamples: SLODefinition[] = [
{
name: 'API可用性',
sli: 'successful_requests / total_requests',
target: 99.9, // 99.9%
window: '30日間ローリング',
errorBudget: 0.1, // 0.1% = 約43分/月のダウンタイム許容
},
{
name: 'APIレイテンシ',
sli: 'requests_under_300ms / total_requests',
target: 99.5,
window: '30日間ローリング',
errorBudget: 0.5,
},
];
エラーバジェット
エラーバジェットは「SLO目標を達成しながら許容できるエラーの量」です。
| SLO目標 | 月間ダウンタイム許容 | エラーバジェット |
|---|---|---|
| 99.0% | 約7時間12分 | 1.0% |
| 99.9% | 約43分 | 0.1% |
| 99.95% | 約22分 | 0.05% |
| 99.99% | 約4.3分 | 0.01% |
SLA(Service Level Agreement)
SLAは、顧客との契約で約束するサービスレベルです。SLOより低い値に設定し、違反時にはペナルティが発生します。
SLI(実測値): 99.95%
SLO(内部目標): 99.9% ← SLIがこれを下回ったら対策を開始
SLA(外部約束): 99.5% ← SLIがこれを下回ったら契約違反
まとめ
| 概念 | 役割 | 例 |
|---|---|---|
| SLI | 測定する指標 | 成功率、レイテンシP99 |
| SLO | 内部の目標値 | 可用性 99.9%/月 |
| SLA | 外部との契約 | 可用性 99.5%/月(違反時は返金) |
チェックリスト
- SLI、SLO、SLAの違いを説明できる
- エラーバジェットの考え方を理解した
- SLOをSLAより高く設定する理由を理解した
次のステップへ
Step 1の理解度チェッククイズに挑戦しましょう。
推定読了時間: 15分