Today
SLI vs технические метрики — дискуссия в чате ALLSLO
Идея
Не каждая техническая метрика является SLI, даже если она «ведёт себя как SLI».
SLI — это всегда метрика с точки зрения пользователя. Технические метрики (глубина очереди, CPU, lag) нужны инженерам и менеджерам, но к SLO их «натягивать» опасно.
Ключевые тезисы
SLI ≠ техническая метрика
- SLI должен отражать пользовательский опыт, а не внутреннее состояние системы
- Глубина очереди пользователю не важна — важен результат (данные доставлены или нет)
- «Не SLI, но ведёт себя как SLI» — это технический health-индикатор, не SLO
Blackbox — только генератор трафика
- Blackbox имеет дискретность: не отличит минуту простоя в прайм-тайм от простоя в 5 утра 1 января
- Не позволяет точно определить виновную команду при инциденте
- Правильная роль blackbox — генерировать трафик там, где его мало; SLI строить по данным балансера или приложения (whitebox)
Владение — основа SLO
- Самое важное при построении SLO — чёткое определение владельца
- SLO, которым владеют >1 команды → конфликты при инцидентах («разбудили не ту команду»)
- Границы сервиса определяются в первую очередь, до написания SLI
Прогрессивный SLI для очереди
Если всё же нужно выразить глубину очереди через SLI-подобную метрику (пример: Kafka, Sloth):
errorQuery:
clamp_max(
(
max(
sum by (consumergroup, topic, partition) (
last_over_time(kafka_consumergroup_lag{...}[{{.window}}])
)
) / 20 - 1 # каждые 20 сообщений сверх первых 20
) * 5.0 / 100 # уменьшают SLI на 5%
, 1) > 0
OR on() vector(0)
totalQuery: last_over_time(obviously_non_existent_metric[{{.window}}]) > 0 OR on() vector(1)
При 420+ сообщениях SLI → 0. Принцип: SLI = 1 - bad / totalИтоги
Рекомендации
- Не смешивать SLI и технические метрики — вести их в разных системах: SLO в error budget, технические health — в отдельных дашбордах с алертами
- Менеджеру нужен не SLO, а SLA на технический процесс — помогите ему сформулировать это корректно (например: «lag очереди не превышает X ms в 95% времени за месяц»)
- Определять владельца SLO до его создания — если ответ «несколько команд», SLO писать нельзя, сначала разбить на компоненты
- Blackbox использовать только как источник трафика — SLI строить по данным изнутри системы (балансер, трейсы, логи)
- Учитывать вес инцидента во времени — минута простоя в прайм-тайм ≠ минута простоя ночью; закладывать это в budget burn rate или веса алертов
- Playwright/synthetic = blackbox — сложные сценарии (30 шагов + авторизация) дают много ложных срабатываний; рассматривать их как smoke-тест, не как основу SLI