Як перетворити інцидент на короткий runbook

інцидентpost-incident workflowon-call

Коли після ночної аварії часу на RCA немає, вам потрібен короткий каркас, який збереже фактологію інциденту, покаже що вже перевірено і дасть команді спокійно продовжити роботу

Нічний дзвінок і вісім хвилин, які не можна втратити

У 02:13 на чат заходить черговий після короткого дзвінка від on-call менеджера: API видає 500, користувачі скаржаться на затримки, а у логах вже видно багато POST /orders помилок. Замість довгого RCA, перш ніж щось ламати назад, черговий має зафіксувати мінімум контексту. Саме тут і народжується runbook після інциденту — короткий, точний, без «суперкомандирських» висновків.

Інцидент уже дав стрес, але runbook не про героїзм. Він про те, щоб через 2 години інженер, який не був на чергуванні, зрозумів: що сталося, як ми це побачили, що перевіряли, чому зупинилися на певних діях, і що далі робити без додаткових припущень.

Починай з готового каркасу: Symptom Snapshot

Ніяких відступів. Перші 90 секунд — один блок:

  • Заголовок інциденту: інцидент-платіжний-API-2026-...
  • Час виявлення, перший симптом, рівень впливу.
  • Які сервіси у фокусі: API, БД, черга, кеш.
  • Хто постраждав: внутрішні користувачі, публічний API, CI.
  • Що вже зроблено: рестарт, ручне масштабування, mute алертів (якщо було).

У прикладі вище: головний симптом — збільшення 500 і час відповіді, другий — накопичення повідомлень у черзі, третій — збій webhook retry. Уже цього достатньо, щоб людина з іншої зміни продовжила роботу.

Verification: рівно три перевірки, які треба мати в кожному runbook

Перевірка має бути конкретною і відтворюваною.

  1. Перевірка здоров’я основного шляху
  • Команда: kubectl get pods -n prod -l app=api-gateway або systemctl status ....
  • Очікувано: не більше 1 нездорового події, або список відомих restart-ів з часу інциденту.
  • Факт у runbook: кількість restart-ів, перший падіння подібних метрик.
  1. Перевірка залежностей і черги
  • Команда: curl -sf https://.../healthz або перевірка статусу БД/кешу.
  • Очікувано: downstream не повертає 5xx, черга не росте без обмеження.
  • Факт: точні значення latency, depth queue, відсоток помилок.
  1. Перевірка користувацького впливу
  • Команда: пошук останніх звернень у support channel або моніторингові алерти.
  • Очікувано: підтвердження кількості уражених flows.
  • Факт: які частини сервісу реально «червоні», а що було шумом від моніторингу.

Тимчасова стабілізація перед відновленням

Власник інциденту призначає дію, яка зменшує шкоду до очищення причини:

  • Перевести трафік на стабільний шлях (або вимкнути шумний фіч-флаг).
  • Припинити агресивні автоматичні ретраї, якщо вони розганяють деградацію.
  • Заблокувати шумні перезапуски, які не дають системі стабілізуватися.

Не плутайте тимчасову стабілізацію з остаточним рішенням. Тут мета — зменшити шкоду і зберегти стан для відновлення.

Recovery: відновлення без повторного запуску хаосу

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

  • Невеликий rollback до останнього стабільного стану, якщо зміни явно свіжі й сумнівні.
  • Або точкова міграція назад без зворотного запуску всього стека, якщо проблема у новому конфігураційному значенні.

Важливо: у кожному кроці прописати, хто перевіряє успіх і через який інструмент. Без цього отримаємо «відкотили — щось стало краще, але чому невідомо».

Communication та owners: як вивести шум у структуру

Найчастіша помилка — спочатку гасити, потім пояснювати. Додавайте в runbook чітко:

  • Власник інциденту.
  • Хто підтверджує перевірки.
  • Кому надсилаються оновлення (канал, чат, менеджер, клієнтський канал).
  • Який статус на момент звіту: “ще триває”, “стабілізовано”, “відновлено”.

Що часто забувають

  • Тимчасові симптоми замінюють на гіпотези.
  • Не пишуть, хто саме запускав rollback.
  • Змішують факт із припущенням: “ймовірно” не дорівнює доказ.
  • Не фіксують таймлайн, а потім годинами сперечаються за порядок подій.
  • Немає блоку про те, що не перевірялося.

Коли короткий runbook не потрібен

Не треба застосовувати цю схему до:

  • Локальних проблем у дев-середовищі без впливу на користувачів.
  • Малих випадкових збою, де причина очевидна за 1–2 команди та вже виправлена.
  • Довготривалих інженерних RCA, що потребують глибокої дискусії — там потрібен окремий повний аналіз, а цей каркас можна згенерувати як стартову нотатку.

Перші 3 дії завтра

  • Додайте шаблон runbook у каналі чергування з обов’язковими 3 перевірками.
  • Після будь-якого rollback додайте обов’язкову секцію “що не перевірено”.
  • Передавайте чергу так: “симптоми -> перевірки -> стабілізація -> відновлення -> власник”.

Джерела

Короткий чеклист

  • За 2–3 хвилини зафіксувати симптоми, таймлайн і поточний стан залежностей, перш ніж проводити будь-які rollback-дії.
  • У runbook записати ровно 3 перевірки з доказом (логи/метрики/запити) та конкретним власником кожної дії.
  • Додати блок "що часто забувають" і "коли не потрібен", щоб команда не перетворювала процес на рутину без сенсу.

Зібрати короткий runbook з актуального інциденту

Ти — інженер чергування. Потрібен короткий runbook для передачі вночі або в ранковому змінному handoff. Вхідні дані: - incident_id або позначка часу - Короткий опис того, що сталося (1-3 речення) - Учасники/канали: хто у чаті, хто робив зміни - Симптоми з часу початку: логи, алерти, помилки, затримки, скриншоти - Поточний стан системи: які сервіси up/down, що робить деградація - Дії, вже виконані під час інциденту - Обмеження: що можна змінювати зараз, а що ні Твоє завдання: 1) Сформуй runbook довжиною до 900 слів. 2) Заповни блоки в такому порядку: - Symptom Snapshot - Verification (рівно 3 контрольні перевірки з артефактами) - Containment (тимчасова стабілізація) - Recovery - Communication / owners - Prevention (3 конкретні кроки) - Що часто забувають - Коли такий підхід не потрібен 3) Для кожної контрольної перевірки додай: як перевіряли, яким командою або інструментом, що підтвердило. 4) Не затирай факти гіпотезами. Відокремлюй "було" від "вважаємо". Вихідний формат: - Поверни Markdown із заголовками рівня 2 (## ...) - У кожному блоці є конкретні дії, команди/запити та короткі наслідки. - Тон: практичний, без маркетингових формулювань, без звинувачень. - Не включай YAML або frontmatter.