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 (kliyent→bekend→dannyye), авто-ремедіація, канарні 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. Алерт р99> поріг → відкрити дашборд → перейти по 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).

Натискаючи кнопку, ви погоджуєтесь на обробку даних.