Короткий ответ
SLI (Service Level Indicator) — это измеримая метрика качества сервиса (например, доля успешных запросов); SLO (Service Level Objective) — целевое значение этой метрики (например, 99.9% успешных запросов за месяц); SLA (Service Level Agreement) — формальное, часто договорное обязательство перед клиентом, обычно с финансовыми последствиями при нарушении.
Как это работает подробнее
SLI измеряется напрямую из систем мониторинга, SLO — это внутренняя цель команды, обычно более строгая, чем SLA, чтобы оставался запас (error budget) прежде чем будет нарушено договорное SLA. SLA часто покрывает только часть того, что измеряет SLO, и формулируется проще для юридического/договорного языка.
Пример / кейс
Ожидаемое поведение: пока фактическое значение SLI держится между 99.9% и 99.95%, внутренний SLO уже нарушен (сигнал команде действовать), но внешнее SLA пока не нарушено — запас между ними и есть error budget для принятия рисков.
Пример кода
SLI: доля HTTP-запросов к /checkout с кодом 2xx-3xx за 5 минут.
SLO (внутренний): 99.95% за 30 дней.
SLA (внешний, договорной): 99.9% за 30 дней, с компенсацией клиенту при нарушении.Что использовать на практике
- Практический подход. Сначала выбирают значимые для пользователя SLI (latency, доля успешных запросов, свежесть данных), затем на основе исторических данных и бизнес-требований устанавливают реалистичный SLO, и только потом, если нужно, формализуют более мягкое SLA для внешних клиентов с учётом компенсаций за нарушение.
Подводные камни
- Частые ошибки. Путать SLO и SLA, обещая клиентам внутреннюю цель команды как договорное обязательство; выбирать SLI, которые легко измерить, но не отражают реальный пользовательский опыт (например, мониторить только доступность сервера, а не успешность бизнес-операции); устанавливать SLO равным SLA без запаса, что оставляет нулевой error budget.