GH GambleHub

Інциденти і SRE-плейбуки

1) Що таке інцидент і як він співвідноситься з SLO

Інцидент - подія, що порушує SLO/службову функцію або створює ризик порушення (помилковий бюджет пропалюється неприйнятно швидко).
Класичні метрики: MTTD, MTTA, MTTR, MTBF.
Помилка бюджету і burn-rate визначають пріоритет і вікна ескалацій.


2) Рівні серйозності (SEV) і критерії

SEVОзнакаВпливМета MTTR
SEV-1Порушено критичне SLO/повний даун для ключового трафікуВсі користувачі/платежі≤ 60 хв
SEV-2Деградація (p95 латентності, 5хх/помилки платежів ↑)Значуща частина≤ 4 год
SEV-3Локальні проблеми/бейзлайни відхиленіОкремий сервіс/регіон≤ 1 робочий день
SEV-4Потенційний ризик/дефект без поточного впливуПідготовка фіксівза планом

Тригери SEV: перевищення 5xx%, р95> порогу, платіжні decline spike, Kafka-lag> поріг, NodeNotReady> X хв, TLS закінчується <7 днів, сигнали DDoS/витік.


3) Ролі та відповідальність (RACI)

Incident Commander (IC) - одноосібне прийняття рішень, менеджмент потоку завдань, зміна статусу SEV.
Ops Lead (Tech Lead) - технічна стратегія, гіпотези, координація фіксів.
Communications Lead (Comms) - статус-апдейти (внутрішні/зовнішні), StatusPage/чат/пошта.
Scribe (Хроніст) - таймлайн, рішення, артефакти, посилання на графіки/логи.
On-call Engineers/SMEs - виконання дій з плейбуків.
Security/Privacy - включаються при інцидентах безпеки або PII.
FinOps/Payments - при впливі на білінг/PSP/вартість.


4) Життєвий цикл інциденту

1. Детект (алерт/репорт/синтетика) → авто-створення картки інциденту.
2. Тріаж (IC призначений, SEV привласнений, збір мінімального контексту).
3. Стабілізація (mitigation: вимкнути фічу/роллбек/rate-limit/failover).
4. Розслідування (RCA-гіпотези, збір фактів).
5. Відновлення сервісу (validate SLO, спостереження).
6. Комунікація (всередині/зовні, підсумковий звіт).
7. Постмортем (без звинувачень, CAPA-план, власники, терміни).
8. Prevention (тести/алерти/плейбуки/прапори, довчення команди).


5) Комунікації та «war-room»

Єдиний канал інциденту ('#inc -sev1-YYYYMMDD-hhmm'), тільки факти і дії.
Команди в стилі радіо-протоколу: «IC: призначаю rollback версії 1. 24 → ETA 10 хв".
Статус-апдейти: SEV-1 кожні 15 хв, SEV-2 - кожні 30-60 хв.
Status Page/зовнішня комунікація - через Comms Lead за шаблоном.
Заборонено: паралельні «тихі» кімнати, неперевірені гіпотези в загальний канал.


6) Алертинг і SLO-burn (приклад правил)

Швидкий канал (1-5 хв) і повільний канал (1-2 год) burn-rate.
Мульти-сигнали: помилка бюджету, 5xx%, p95, Kafka-lag, платіжні decline-rate, синтетика.
Пошук першопричини - тільки після стабілізації симптомів.

Приклади (узагальнено):
promql
Ошибочная доля 5xx > SLO sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) > 0.01

Burn-rate быстрый (пример)
(sum(rate(http_requests_total{status=~"5.."}[1m])) / sum(rate(http_requests_total[1m])))
/ (1 - SLO) > 14.4

7) Плейбуки vs ранбуки

Плейбук - сценарій дій за типом інциденту (розгалуження, умови, ризики).
Ранбук - конкретна «карта» кроків/команд (перевірки, фікси, верифікація).
Правило: плейбук посилається на кілька ранбуків (rollbacks, feature-flags, failover, масштабування, блокування трафіку і т.д.).


8) Шаблон картки інциденту

yaml id: INC-YYYYMMDD-XXXX title: "[SEV-1] Рост 5xx на API /payments"
status: active    monitoring    resolved sev: 1 reported_at: 2025-11-03T17:42Z ic: <ФИО>
ops_lead: <ФИО>
comms_lead: <ФИО>
scope: regions: [eu-west-1], tenants: [prod], services: [api, payments]
impact: "5xx=12% (обычно <0.5%), конверсия депозитов -20%"
mitigation: "откат на 1.23.4, включен rate-limit 2k rps, фича X выключена"
timeline:
- "17:42: алерт SLO burn-rate быстрый"
- "17:46: назначен IC, открыт war-room"
- "17:52: найден релиз 1.24 как кандидат"
- "18:02: откат завершен, 5xx вернулись к 0.3%"
artifacts:
dashboards: [...]
logs: [...]
traces: [...]
risk: "возможен очередной всплеск при включении фичи X"
next_steps: "канареечный релиз, тесты, постмортем до 2025-11-05"

9) Шаблон SRE-плейбука (Markdown)

markdown
Плейбук: <название>
Область/симптомы
Список детекторов, сигнатуры в метриках/логах/трассах.

Быстрая стабилизация (Triage & Mitigation)
- [ ] Ограничить трафик/включить WAF-правило/фичефлаг OFF
- [ ] Роллбэк/канареечный релиз/выкатить фикс конфигурации
- [ ] Включить деградационный режим (read-only, кэш-форс)

Диагностика (RCA hints)
- Метрики: … Логи: … Трассы: …
- Частые первопричины/чек-лист гипотез

Риски и коммуникации
- Внутренние/внешние апдейты, SLA-обязательства

Верификация
- [ ] SLO восстановлено (порог/время окна)
- [ ] Нет регресса по смежным сервисам

Последующие действия
- CAPA, задачи в backlog, обновление алертов/дашбордов/плейбука

10) Типові плейбуки

10. 1 API 5xx Spike

Стабілізація: відключити проблемний фічефлаг; підвищити репліки API; увімкнути кешування; відкат релізу.
Діагностика: diff релізу, помилки в логах (top-exceptions), зростання p95, pressure БД/кеша.
Ризики: каскад у платежах/бекендах.

10. 2 БД: replication lag / lock storm

Стабілізація: призупинення важких джобів/репортів; перенаправити читання на майстер; збільшити wal_buffers/реплика-слоты.
Діагностика: довгі транзакції, блокуючі запити, зміни плану.
Фіксація: індекси/хінти, перепланування джобів, розбиття запитів.

10. 3 Kafka consumer lag

Стабілізація: тимчасово масштабувати consumer'и; знизити продюсинг з не-критичних сервісів; збільшити партії/квоти.
Діагностика: rebalances, повільні десеріалізації, GC-паузи.
Верифікація: лаг → до цільового значення, немає дропів.

10. 4 K8s NodeNotReady/ресурсний шторм

Стабілізація: cordon+drain; перерозподілити навантаження; перевірити CNI/overlay; вимкнути гучні DaemonSet'и.
Діагностика: disk pressure, OOM, throttling, network drops.
Профілактика: pod disruption budgets, ресурсні ліміти/requests.

10. 5 TLS/сертифікати закінчуються

Стабілізація: примусове оновлення секрету/ingress; тимчасові override.
Діагностика: ланцюжок довіри, clock-skew.
Профілактика: альберти T-30/T-7/T-1, авто-реньюал.

10. 6 DDoS/аномальний трафік

Стабілізація: WAF/бот-правила, rate-limit/geo-фільтри, upstream shed load.
Діагностика: профілі атаки (L3/4/7), джерела, «парасольки».
Профілактика: anycast, autoscaling, кешування, play-nice з провайдерами.

10. 7 Платіжний PSP-аутейдж

Стабілізація: smart-routing на альтернативні PSP/методи; підняти retry з джиттером; «м'яка» деградація UI.
Діагностика: spike відмов за кодами, статуси API/статус-сторінки PSP.
Комунікації: прозорі апдейти для бізнесу і саппорту, коректна статистика ND/конверсії.

10. 8 Інцидент безпеки/витік PII

Стабілізація: ізоляція вузлів/секрет-ротація, блокування ексфільтрації, Legal Hold.
Діагностика: таймлайн доступу, порушені суб'єкти/поля.
Сповіщення: регулятори/партнери/користувачі за вимогами юрисдикцій.
Профілактика: посилення DLP/сегментації, «least privilege».


11) Автоматизація плейбуків

ChatOps команди: `/ic set sev 1`, `/deploy rollback api 1. 23. 4`, `/feature off X`.
Runbook-боти: напів-автоматичні кроки (drain node, flip traffic, purge cache).
Self-healing хуки: детектор → стандартний mitigation (rate-limit, restart, scale).
Авто-створення карток/таймлайну з алертів і команд.


12) Якість плейбуків: чек-лист

  • Ясні симптоми і детектори (метрики/логи/траси).
  • Швидкі кроки стабілізації з оцінкою ризику.
  • Команди/скрипти актуальні, перевірені в staging.
  • Верифікація відновлення SLO.
  • Комунікаційні шаблони та критерії зовнішніх апдейтів.
  • Постмортем-посилання і CAPA після закриття.

13) Постмортем (blameless) і CAPA

Мета: навчитися, а не знайти винного.
Зміст: що сталося, як виявили, що було добре/погано, внесок факторів (тих + процеси), дії для запобігання.
Термін: SEV-1 - протягом 48 годин; SEV-2 - 3 робочих дні.
CAPA: конкретні власники, терміни, вимірювані ефекти (зниження MTTR/зростання MTTD).


14) Правові аспекти та доказова база

Legal Hold: заморожування логів/трас/алертів, write-once сховища.
Ланцюжок зберігання артефактів: доступи за ролями, контроль цілісності.
Регуляторні повідомлення: терміни/шаблони для юрисдикцій (особливо при порушених платежах/PII).
Приватність: мінімізація та маскування PII при розборі.


15) Метрики ефективності процесу інцидентів

MTTD/MTTA/MTTR по кварталах і доменах.
Правильність SEV (underrating/overrating).
Частка інцидентів з авто-мітігейтом.
Покриття плейбуками топ-N сценаріїв (> 90%).
Виконання CAPA вчасно.


16) Впровадження за етапами

1. Тиждень 1: SEV-матриця, ролі on-call, загальний шаблон картки, war-room регламент.
2. Тиждень 2: Плейбуки для топ-5 симптомів (5xx, БД-лаг, Kafka-lag, NodeNotReady, TLS).
3. Тиждень 3: ChatOps/боти, авто-створення карток, шаблони комунікацій/StatusPage.
4. Тиждень 4 +: Плейбуки безпеки, PSP-аутейджі, Legal Hold, регулярні дрилі/ігри хаосу.


17) Приклади «швидких» ранбуків (фрагменти)

Rollback API (K8s)

bash kubectl rollout undo deploy/api -n prod kubectl rollout status deploy/api -n prod --timeout=5m
Верификация:
kubectl -n prod top pods -l app=api

Drain node

bash kubectl cordon $NODE && kubectl drain $NODE --ignore-daemonsets --delete-emptydir-data --timeout=10m

Feature-flag OFF (приклад)

bash curl -X POST "$FF_URL/toggle" -H "Authorization: Bearer $TOKEN" -d '{"feature":"X","enabled":false}'

18) Міні-FAQ

Коли піднімати SEV-1?
Коли страждає ключове SLO/бізнес-функція (платежі, логін, гра), і burn-rate «з'їдає» бюджет на годинник вперед.

Що важливіше - RCA або відновлення?
Завжди стабілізація, потім RCA. Час до стабілізації - головний показник.

Чи потрібно все автоматизувати?
Автоматизуйте часті та безпечні кроки; рідкісні/ризикові - через напів-авто і підтвердження IC.


Підсумок

Надійний процес інцидентів тримається на трьох стовпах: чіткі ролі та SEV-правила, якісні плейбуки/ранбуки з автоматизацією та культура постмортемів без звинувачень. Зафіксуйте шаблони, тренуйте on-call, вимірюйте MTTR/помилковий бюджет і постійно покращуйте детектори і плейбуки - це безпосередньо знижує ризики і вартість простоїв.

Contact

Зв’яжіться з нами

Звертайтеся з будь-яких питань або за підтримкою.Ми завжди готові допомогти!

Розпочати інтеграцію

Email — обов’язковий. Telegram або WhatsApp — за бажанням.

Ваше ім’я необов’язково
Email необов’язково
Тема необов’язково
Повідомлення необов’язково
Telegram необов’язково
@
Якщо ви вкажете Telegram — ми відповімо й там, додатково до Email.
WhatsApp необов’язково
Формат: +код країни та номер (наприклад, +380XXXXXXXXX).

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