GH GambleHub

SLO/SLA и метрики

SLO/SLA и метрики

1) Термины и иерархия

SLI (Service Level Indicator) — измеримый показатель «как видит нас пользователь»: доля успешных запросов, p95 латентности, свежесть данных, доля успешно обработанных батчей и т. п.
SLO (Service Level Objective) — целевое значение SLI на интервале наблюдения (28/30/90 дней). Пример: «99.9% запросов /pay завершаются ≤ 400 мс».
Error budget — 1 − SLO. При SLO 99.9% бюджет ошибок = 0.1% времени/запросов.
SLA (Agreement) — юридически значимый уровень обслуживания: включает SLO, измерение, исключения, компенсации/штрафы.

2) Принципы проектирования

Симптомы > внутренние метрики. SLI должны отражать реальный пользовательский опыт.
Малое количество ключевых SLI. На сервис — 2–5 основных: успешность, латентность, пропускная способность/свежесть, корректность.
Охват критических путей. Для каждого бизнес-сценария (checkout, login, webhook, ETL-загрузка) — свой набор SLI/SLO.
Строгая семантика «успеха». Не «код 200», а «пользователь получил ответ в срок и результат валиден».
Разделение внешних и внутренних SLO. Внутренние — строже; внешний SLA ≤ на 1–2 девятах ниже.

3) Каталог SLI (референс)

3.1 API/онлайн-сервисы

Успешность: `SLI_success = 1 − (5xx + timeout + business_error) / all_requests`

Латентность: p95/p99 `http_server_duration_seconds` по маршрутам/методам/арендаторам

Пропускная способность: `RPS`/лимиты/квоты

Корректность: доля валидных ответов (сигнатуры, схемы, инварианты)

3.2 Вебхуки/асинхронные доставки

Доставка: доля событий, подтвержденных в T секунд и ≤ N ретраев

Заказчики: доля подписчиков без длительной задержки (пер-тенант)

3.3 Данные/ETL/DWH

Свежесть (freshness): `now − last_successful_ingest_ts`

Полнота: `ingested_rows / expected_rows`

Корректность: доля записей, прошедших проверки качества

Пайплайны: доля джоб завершенных до дедлайна

3.4 Мобильные/клиентские SDK

Клиентский успех: доля сессий без фатальных ошибок

Латентность round-trip: p95 от запроса до рендера

Кэш-хиты: доля обслуженных из кэша (как симптом перформанса)

4) Формулы и примеры целей

Доступность (по запросам):
  • `SLI_req_avail = 1 − (failed_requests / total_requests)`
  • `SLO_req_avail = 99.95%` на 30 дней → error budget = 0.05% запросов.
Доступность (по времени):
  • `uptime = (obs_window − downtime) / obs_window`
Латентность:
  • `SLO_latency = p95(route="/pay") ≤ 400 ms` на 7-дневных срезах, с исключением кэш-прогревов (1%)
Свежесть данных:
  • `SLO_freshness(dataset="orders") ≤ 10 min` p99 за 24 часа.

5) Error budget и управление изменениями

Бюджет (B): `B = 1 − SLO`.
Расход бюджета (burn): отношение фактических ошибок к допустимым.

Политики:
  • Перерасход (burn > 1) → фичфриз, фокус на надежность.
  • При burn rate > X в коротком окне — инцидент и кап. меры.
  • Планирование: доля спринта на надежность коррелирует с burn за прошлый период.

6) Алертинг: burn rate и многооконные правила

Идея: ловим быстрые утечки и медленный дрейф.

Пример (SLO 99.9%, бюджет 0.1%):
  • Критический: «2% бюджета за 1 час» (быстрый пожар).
  • Предупреждение: «5% бюджета за 6 часов» (ползучая деградация).
Правила:
  • Короткое окно (минута-час) для быстрых инцидентов.
  • Длинное окно (6–24 часа) для трендов.
  • Латентность: алерт по p99 > порога ≥5 мин, с подавлением флаппинга и связь с экземпларами трасс.
Пример выражений (логика):

error_ratio_5m = errors[5m] / requests[5m]
error_ratio_1h = errors[1h] / requests[1h]
burn_5m     = error_ratio_5m / error_budget_fraction burn_1h     = error_ratio_1h / error_budget_fraction alert_critical if burn_1h > 14 and burn_5m > 14 alert_warning  if burn_6h > 6 and burn_30m > 6

7) Многоарендность (multi-tenant) и сегментация

SLI/SLO считаются по арендаторам/планам/регионам, иначе медиана «замажет» провалы.
Минимальное число событий для статистической значимости (guard-rails).
SLA может различаться по тарифам (например, «Pro 99.9%, Free 99.5%»).

8) Связь с наблюдаемостью и трассировками

Метрики SLI — из гистограмм/счетчиков с exemplars → переход в «плохие» трейсы.
Логи — источник причин: таймауты, коды бизнес-ошибок, лимиты.
Для данных — связка с lineage: «какая джоба задержала метрику свежести».

9) Контракты и SLA

Содержание SLA:
  • Определения SLI/метода измерения/окна.
  • Исключения (плановые работы, форс-мажор).
  • Процедура инцидентов и коммуникаций (статус-страница, RFO/RCA).
  • Компенсации (service credits) и порядок запроса.
  • Юрисдикция, период действия, условия пересмотра.
Рекомендации:
  • Никогда не обещайте публично SLO строже, чем позволяет архитектура и операционные практики.
  • Отделяйте внутренние SLO и внешние SLA.

10) Стоимость и приоритизация

Цена девяток растет не линейно. «99.9% → 99.99%» = иной класс архитектуры (N+1, мультизона, актив-актив).
Ставьте SLO на наиболее ценные пользовательские действия.
Контролируйте стоимость телеметрии: downsampling, квоты, реплика и хранение по классам.

11) Процедуры и отчетность

Еженедельные отчеты: выполнение SLO по сервисам/арендаторам, расход бюджета, топ-причины, планы улучшений.
Постинцидентные RCA: связываем с кусками бюджета; ставим задачи на устранение коренных причин.
Фичфриз: критерии включения/снятия.

12) Шаблоны (для быстрого старта)

12.1 Карточка SLO (пример)


Service: Checkout API
SLI:
success: 1 - (5xx+timeouts+biz_failures)/all latency_p95: p95(http_server_duration_seconds{route="/pay"})
SLO:
success: 99. 95% / 30d latency_p95: ≤ 400ms / 7d
Windows:
primary: 30d rolling secondary: 7d rolling
Burn Alerts:
critical: use 1h/5m > 14 warning: use 6h/30m > 6
Owner: Team Checkout
Tenancy: per-tenant (≥ 1k req/day threshold)
Dashboards: RED + trace exemplars

12.2 Таблица «зрелости SLO»

УровеньХарактеристики
0Нет SLI, алерты по CPU/Memory
1Есть SLI, простые пороги
2SLO с burn-rate алертами, отчетность
3Многоарендные SLO, фичфриз, капвложения по плану
4Сквозные SLO (клиент→бэкенд→данные), авто-ремедиация, канареечные SLO

13) Примеры правил (фрагменты)

PromQL — успех/ошибки/латентность:
promql
Error rate (5xx + timeout) for the sum (rate (http_requests_total{route="/pay",code=~"5. route.    599"}[5m]))
/ sum(rate(http_requests_total{route="/pay"}[5m]))

p99 histogram_quantile latency (0. 99, sum(rate(http_server_duration_seconds_bucket{route="/pay"}[5m])) by (le))
Алерты burn-rate (идея для правил):
promql error_budget_fraction = 0. 001 for 99. 9%
(err_rate_5m / 0. 001 > 14) and (err_rate_1h / 0. 001 > 14) # critical
(err_rate_30m / 0. 001 > 6) and (err_rate_6h / 0. 001 > 6)  # warning
Свежесть данных:
promql
Data order lag (minutes)
(max(time()) - max(last_ingest_ts_seconds{dataset="orders"})) / 60

14) SLO для данных и ML (особенности)

Сквозные SLO данных: свежесть p99, полнота p99, время «перепроработки» после сбоя.
Контракты данных: ожидаемые схемы, объемы, дедлайны; нарушение → инцидент данных.
ML: SLO на латентность инференса, SLA на доступность фич-стора, мониторинг дрейфа (качество модели — отдельная тема, вне SLA).

15) Интеграция с безопасностью и приватностью

Логи SLI без PII/секретов; токенизация/маскирование.
Аудит изменений SLO/SLA и публикаций отчетов в неизменяемых журналах.
Для регуляторных путей (платежи/PII) — отдельные, более строгие SLO.

16) Чек-листы

Перед запуском сервиса/фичи

  • Определены SLI «успех/латентность/пропускная способность/свежесть».
  • Заданы SLO и окна; рассчитан бюджет ошибок.
  • Настроены burn-rate алерты (короткое+длинное).
  • Дашборды RED + exemplars → трассы; рунибуки инцидентов.
  • Многоарендные разрезы и пороги значимости.
  • Процедура фичфриза и отчетности.

Эксплуатация

  • Еженедельный отчет по SLO/burn, планы hardening.
  • Переоценка SLO при изменении архитектуры/нагрузки.
  • Периодические «инциденты-учения» и обновление рунибуков.
  • Контроль стоимости телеметрии и количества SLI.

17) Runbook’и

Runbook: быстрый рост p99 /pay

1. Алерт p99>порог → открыть дашборд → перейти по exemplar в трейс.
2. Найти узкий CLIENT/SERVER-спан, сравнить регионы/версии.
3. Включить деградацию (кэш/лимит/фоллбек), уведомить команду зависимости.
4. После стабилизации — RCA, задачи оптимизации, обновление SLO-замеров.

Runbook: расход бюджета > 50% за неделю

1. Заморозить фичи, поднять приоритет надежности.
2. Кластеризация ошибок: по маршрутам/арендаторам/зависимостям.
3. Выкатить исправления → подтвердить восстановление тренда.
4. Ретроспектива и корректировка алертов/порогов.

18) FAQ

В: Сколько SLO нужно?
О: Минимум на критические пользовательские сценарии: успех + латентность. Все остальное — по необходимости.

В: Что лучше — доступность по времени или по запросам?
О: По запросам — более пользовательская метрика. По времени удобно для сетевых компонентов/инфры.

В: Почему p95, а не среднее?
О: Среднее скрывает хвост; пользователь чувствует p95/p99.

В: Как не «закрутить гайки» слишком сильно?
О: Начните с реалистичных целей (исторические данные), затем ужесточайте по мере зрелости.

Связанные материалы:
  • «Наблюдаемость: логи, метрики, трассировки»
  • «Распределенные трассировки»
  • «Аудит и неизменяемые журналы»
  • «Гарантии доставки вебхуков»
  • «Шифрование In Transit / At Rest»
  • «Происхождение данных (Lineage)»
Contact

Свяжитесь с нами

Обращайтесь по любым вопросам или за поддержкой.Мы всегда готовы помочь!

Telegram
@Gamble_GC
Начать интеграцию

Email — обязателен. Telegram или WhatsApp — по желанию.

Ваше имя необязательно
Email необязательно
Тема необязательно
Сообщение необязательно
Telegram необязательно
@
Если укажете Telegram — мы ответим и там, в дополнение к Email.
WhatsApp необязательно
Формат: +код страны и номер (например, +380XXXXXXXXX).

Нажимая кнопку, вы соглашаетесь на обработку данных.