SLI, SLO и error budget

Урок про измеримые цели надёжности: SLI, SLO и бюджет ошибок.

SLO (Service Level Objective) — это целевое значение показателя надёжности, например «99,9% запросов успешны за 30 дней».

«Сделаем понадёжнее» — не цель, а пожелание. SLI/SLO превращают надёжность в число, по которому можно принимать решения: разогнаться с фичами или притормозить и чинить стабильность.

Три понятия по порядку

  • SLI (Service Level Indicator) — измеренный показатель: доля успешных запросов, доля быстрых ответов.
  • SLO — цель по SLI: «доля успешных ≥ 99,9%».
  • SLA — внешний договор с последствиями за нарушение SLO (штрафы, компенсации).

SLI на PromQL

Типичный SLI доступности — доля успешных запросов за окно.

# SLI доступности за 30 дней (доля не-5xx)
sum(rate(http_requests_total{status!~"5.."}[30d]))
  / sum(rate(http_requests_total[30d]))

Error budget

Error budget — это допустимая доля «неудач», вытекающая из SLO. Если SLO 99,9%, то бюджет ошибок — 0,1%. Это не абстракция: при 30 днях в месяце 0,1% — это около 43 минут допустимого простоя.

SLOБюджет ошибокПростой в месяц (≈30 дней)
99%1%~7,2 часа
99,9%0,1%~43 минуты
99,99%0,01%~4,3 минуты

Как работает под капотом

Error budget превращает надёжность в «валюту». Бюджет потрачен не полностью — можно смелее катить рискованные изменения. Бюджет на исходе — команда замораживает фичи и фокусируется на стабильности. Так абстрактный спор «фичи против надёжности» становится управляемым правилом. Скорость «прожигания» бюджета (burn rate) часто берут основой для алертов: быстрый расход бюджета важнее одиночного всплеска ошибок.

# burn rate: во сколько раз быстрее нормы тратится бюджет
(1 - sli_1h) / (1 - slo_target)

Частые ошибки

  • Ставить SLO 100%. Абсолютная надёжность недостижима и неоправданно дорога; всегда оставляйте бюджет.
  • SLI, не отражающий опыт пользователя. «CPU < 80%» — это не про то, доволен ли пользователь.
  • Игнорировать burn rate. Медленный, но устойчивый расход бюджета опаснее редкого пика.

Итог

  • SLI — измеренный показатель, SLO — цель по нему, SLA — внешний договор.
  • Error budget = 1 − SLO; он переводит надёжность в управляемую величину.
  • Алертьте по burn rate, а не только по мгновенной доле ошибок.
Проверьте себя
1. Что такое SLO?
AИзмеренный показатель надёжности
BЦелевое значение показателя, например 99,9% успешных запросов
CВнешний договор со штрафами
DТип метрики Prometheus
2. Чему равен error budget при SLO 99,9%?
A0,1%
B1%
C9,99%
D0%
3. Почему не стоит ставить SLO 100%?
AТак нельзя по синтаксису
BАбсолютная надёжность недостижима и непомерно дорога, нужен бюджет на изменения
CPrometheus не считает 100%
D100% ломает Grafana