Инцидент-менеджмент с нуля: практический гайд для растущих команд

Инцидент-менеджмент с нуля: практический гайд для растущих команд - 1

Инцидент-менеджмент с нуля: практический гайд для растущих команд

Типичность

3 часа ночи. Звонок от незнакомого номера. ”Пользователи не могут залогиниться, п****ц”.

Вы лихорадочно листаете Slack. Непонятно, где проблема и кого будить. Подняли тестеров — они тоже гадают. Бэкенд? Инфра?

Идёте во флудилку в телеге, ищете похожий ник тимлида. Не отвечает. Кто замещает — никто не знает. Начинается массовый обзвон. Через 40 минут находится человек. Смотрит код. “Не моё. Это к Сане — он, кажется, редирект криво поменял в гугл клауд консоли”. Ещё 20 минут — поиск Сани, доступы только у него.

Утром все разбитые. CTO вопрошает. И становится ясно: баг простой. Проблема не в коде. Проблема в бардаке.

Знакомо? Я тоже через это прошел. И после такой ночи решил: хватит. Нужна система.

Для кого эта статья

Если вы технический руководитель, PM или просто заинтересованный инженер в компании, которая:

  • выросла из стадии всё на коленке,

  • начала получать первых реальных пользователей,

  • столкнулась с первыми серьёзными инцидентами,

→ то эта статья для вас. Я расскажу, как я обычно строю процесс инцидент-менеджмента с нуля и кучи сложных рефернсов на ITIL4 и pagerduty. Без Enterprise-уровня сложности, но с реальными работающими практиками.

В конце статьи — ссылка на open-source инструмент Duty Bot, который я написал по приколу для автоматизации дежурств, для небольших компаний, у которых нет денег на что-то вроде https://slack.com/marketplace/A02MJR2A7TQ-rotationapp

Философия: скорость петли обратной связи

Прежде чем углубляться в процессы и таблицы, давайте поговорим о главном. Инцидент-менеджмент — это не про документы и не про бюрократию. Это про скорость петли обратной связи.

Чем быстрее вы:

  1. узнаёте о проблеме,

  2. находите человека, который может её решить,

  3. исправляете проблему,

  4. убеждаетесь, что она действительно исправлена,

  5. и делаете выводы, чтобы не повторять ошибок,

→ тем здоровее ваш продукт и команда.

Полный цикл инцидента как конвейер

Инцидент — это не просто «упало → починили». Это цепочка из 10 шагов, каждый из которых можно (и нужно) оптимизировать:

  1. Проблема на проде ↓

  2. Обнаружение (мониторинг, алерты, пользователи) ↓

  3. Классификация (инцидент? приоритет?) ↓

  4. Мобилизация (дежурный, эскалация) ↓

  5. Исправление ↓

  6. Проверка на проде ↓

  7. Деплой хотфикса ↓

  8. Post-Mortem (24-48 часов) ↓

  9. Выполнение задач из постмортема ↓

  10. Еженедельный обзор → системные изменения

Каждый разрыв в цепочке — потерянное время. Нет дежурного? Минус 30 минут на поиск. Нет постмортемов? Те же грабли через месяц.

Культура blameless

Не ищем виноватых. Вместо “кто накосячил?» спрашиваем: «что в системе позволило этой ошибке произойти?”.

Пример: разработчик сломал авторизацию через Apple ID. Вместо выговора провели разбор:

  • Ревьюер не заметил — объем изменений большой и ревью идет случайным образом;

  • Автотесты не покрывали — сложно тестировать автоматически;

  • QA не проверил на iOS — проджект гнал быстрее в релиз;

  • Мониторинг не поймал — в нем только типовые метрики вроде latency

Результат: добавили метрики, алерт, чек-лист ревью завели. Система стала надёжнее.

Что считать инцидентом

Инцидент — критическая проблема, которая:

  • Массово влияет на пользователей (не единичная жалоба);

  • Не имеет простого обходного пути;

  • Блокирует важный функционал;

  • Влияет на бизнес-показатели.

Это инцидент

Не инцидент

Пользователи не могут авторизоваться

Пуши приходят с небольшой задержкой

Подписки не автопродлеваются

Визуальный баг в баннере

Упала БД

Единичная жалоба на специфичном устройстве

Классификация: матрица Rich × Criticality

Когда вы определились, что такое инцидент, встаёт следующий вопрос: как приоритизировать? Не все инциденты одинаковы.

Подход 1: Простая шкала P1-P5 (PagerDuty-стиль)

Классика: один показатель, пять уровней. P1 — всё горит, P5 — посмотрим когда-нибудь.

Плюсы: Простота, все понимают.

Минусы: Субъективность. Один человек назовёт баг P2, другой — P4. Нет чётких критериев.

Подход 2: SEV1-SEV4 (Google SRE)

Фокус на бизнес-импакте. SEV1 — критическое влияние на бизнес, SEV4 — минимальное.

Плюсы: Привязка к бизнесу, понятно руководству.

Минусы: Требует зрелой культуры и чёткого понимания, что такое «бизнес-импакт» для вашего продукта.

Подход 3: ITIL Impact × Urgency

Классика из корпоративного мира: матрица влияния и срочности.

Плюсы: Структурированность, стандарт индустрии.

Минусы: Абстрактно, требует много обучения, избыточно для небольших команд.

Подход 4: Rich × Criticality (мойвыбор)

Мы выбрали подход с двумя осями: охват пользователей (Rich) и критичность функционала (Criticality). Почему?

Конкретность. Вместо абстрактного “высокий импакт” мы спрашиваем: “сколько процентов пользователей затронуто?” и “насколько критичен этот функционал?”.

Кстати для этого достаточно сделать дашборд с числом активных пользователей и воронкой по фунционалу сервиса + разметить функции продукта по классам критичности

Скорость принятия решений. Когда 3 часа ночи и всё горит — не время для философских дискуссий. Две простых оценки → итоговый приоритет.

Понятность для всех. И разработчик, и PM, и CEO понимают: «затронуто 60% пользователей, отвалилась авторизация» = P1.

Rich (охват)

Уровень

Описание

R1

>30% пользователей (все iOS, все с версией X)

R2

10-30% пользователей (все WebApp, конкретный регион)

R3

<10% пользователей (новореги с Android 9.0)

Criticality (критичность)

Уровень

Описание

C1

Критический функционал: авторизация, регистрация, оплата, core flow

C2

Важный функционал: есть workaround, но UX страдает

C3

Второстепенный: UI нарушения, некритичные фичи

Матрица приоритетов

Rich / Criticality

C1

C2

C3

R1

P1

P1

P2

R2

P1

P2

P3

R3

P2

P2

P3

SLA

Приоритет

Реакция

Решение

P1 HIGH

15 мин

ASAP (до 4ч)

P2 MEDIUM

1 час

24 часа

P3 LOW

Рабочий день

72 часа

Организация дежурств

Принципы

  • 24/7 доступность — дежурный должен быть доступен круглосуточно, включая выходные. Это не значит, что он сидит у компьютера 24 часа. Он может заниматься своими делами, гулять, даже спать — но должен иметь возможность быстро выйти на связь и подключиться к решению

  • Квалификационный ценз — только после испытательного срока, с правом деплоя на прод

  • Ротация — смена каждую неделю, никто не дежурит постоянно

  • Компенсация — работа в нерабочее время оплачивается

  • Backup — еще 1 человек на след уровне эскалации , например тимлид, как страховка

Если это не Blue team или какие-то SRE, то дежурства без привлечения на инциденты сами по себе не оплачиваются

Необходимые условия для дежурного

  • Быть на связи (Slack, Telegram, телефон)

  • Иметь доступ к рабочему устройству

  • Иметь стабильный интернет

Структура

Для каждой команды рекомендую заводить кастомные роли:

  • Dev on-call — разработчик, который будет фиксить

  • QA on-call — тестировщик для проверки фикса

  • Team Lead — backword при недоступности дежурных

Пример таблицы дежурств

Роль

Кто

Slack

Telegram

Телефон

Dev on-call

Иван Иванов

@ivan

@ivan_dev

+7 999 123-45-67

QA on-call

Мария Петрова

@maria

@maria_qa

+7 999 765-43-21

Team Lead

Алексей Сидоров

@alexey

@alexey_tl

+7 999 111-22-33

Период (для начала советую сменами): понедельник–воскресенье

Тимлид обновляет таблицу в начале каждой недели. При уходе в отпуск — назначает заместителя.

Процесс эскалации

Принципы

  • Инициировать может любой — саппорт, джун, кто угодно

  • Чёткие тайм-ауты — 20 минут без ответа = следующий шаг

  • Последовательность каналов — Slack → Telegram сообщение → Telegram звонок → мобильный

  • Лучше эскалировать зря, чем не эскалировать когда нужно

Цепочка эскалации

Шаг

Кого

Каналы

Тайм-аут

Условие перехода

1

Идентификация

Немедленно

Любой инициирует

2

Dev on-call

Slack → TG msg → TG call → Mobile

20 мин

Не отвечает → шаг 4

3

QA on-call

Slack → TG msg → TG call → Mobile

20 мин

Не отвечает → QA Lead

4

Team Lead

Slack → TG msg → TG call → Mobile

20 мин

Не может помочь → шаг 5

5

PM

Slack → TG msg → TG call → Mobile

10 мин

Недоступен → C-level

6

CTO

Slack → TG msg → TG call → Mobile

10 мин

Не должно доходить

Инфраструктурные проблемы (упала БД, сервер недоступен) — сразу на DevOps, минуя Dev on-call.

Полный цикл работы с инцидентом

Этап 1: Обнаружение

Источники:

  • Служба поддержки

  • Внутренний сотрудник

  • Мониторинг и алертинг (Grafana, Datadog, Crashlytics)

  • Аномалии в метриках

Цель: минимизировать MTTD. Чем раньше узнали — тем раньше начали чинить.

*(Mean Time To Detect) — это среднее время обнаружения проблемы

Этап 2: Классификация

  1. Это инцидент? (по критериям)

  2. Какой приоритет? (по матрице Rich × Criticality)

Правило: сомневаетесь между P1 и P2 — ставьте P1. Понизить всегда можно.

Этап 3: Мобилизация

Рабочее время: Тимлид/PM назначает разработчика.

Нерабочее время: Dev on-call + QA on-call по таблице (а лучше сервису) дежурств.

Этап 4: Исправление

  1. Локализация — понять причину;

  2. Фикс — написать исправление;

  3. Тест на dev-стенде — QA проверяет;

  4. Hotfix — готовим для прода.

Важно: не занимайтесь root cause analysis сейчас. Цель — восстановить сервис. Разбор — на постмортеме.

*для мобильных приложений если у вас маркеты и сторы быстро фиксить бесполезно

Этап 5: Верификация

  1. Деплой на прод

  2. Проверка на проде

  3. Мониторинг метрик

  4. Сообщение в чат команды

Критерий закрытия: проблема не воспроизводится, метрики в норме.

Этап 6: Post-Mortem (24-48 часов)

Шаблон:

Параметр

Описание

Дата инцидента

Дата и время начала

Серьёзность

High/Medium/Low

Длительность

Время простоя для пользователей

Импакт

Сколько пользователей затронуто, влияние на бизнес

Хронология

Когда заметили, кто сообщил, что делали последовательно

Причина

Техническая или процессная

Действия для фикса

Что сделали для устранения

Действия для профилактики

Как предотвратить повторение

Действия для наблюдаемости

Какие метрики/алерты добавить

Плохо: “Разработчик допустил ошибку”

Хорошо: “Изменение в API VK OAuth не было отслежено, т.к. не подписаны на changelog”

Этап 7: Выполнение задач

Все задачи из постмортема → тикеты в вашем тасктрекере с ответственными и дедлайнами.

Не “надо бы добавить мониторинг”, а “JIRA-12345: Добавить алерт на auth_success_rate, @ivan, дедлайн: 15.01”.

Этап 8: Еженедельный обзор

Участники: Проджекты, Хеды, C-lvl

Повестка:

  1. Инциденты за неделю (список, критичность)

  2. Статус постмортемов

  3. Статус задач из постмортемов

  4. Тренды и системные улучшения

  5. Затраты на переработки

*Без участия топов обычно ничего не меняется, а если их вовлекать в инциденты внезапно все очень быстро едет.

Компенсация переработок

Что считается переработкой

Да:

  • Работа за пределами рабочего времени

  • Работа в выходные/праздники

  • Срочное решение инцидентов

  • C-lvl решил дернуть по срочному вопросу на его усмотрение (классика)

Нет:

  • Не уложился в дедлайн по своей вине

  • Работал по собственной инициативе без запроса

Варианты компенсации

Отгул — час за час. Переработал 2 часа → завтра уходишь на 2 часа раньше.

Деньги (тут описано по ТК РФ):

Время

Коэффициент

Будни, первые 2 часа

×1.5

Будни, следующие часы

×2

Выходные и праздники

×2

Лимиты

  • Не более 4 часов переработки подряд в течение двух дней

  • Не более 120 часов в год

Философия: переработки — исключение, не норма. Много переработок = проблема в процессах.

Автоматизация: Duty Bot

Проблема Google Sheets и Confluence

  • “Кто сегодня дежурит?” — искать в таблице в 3 ночи такое себе

  • Забывают обновлять

  • Нет напоминаний

  • Нет истории

  • “Этот не отозвался, кого звать следом?”

  • “Как тегнуть Машу из Auth team?”

Решение

Open-source бот для Telegram и Slack: github.com/letya999/duty_bot

Возможности:

/duty - кто дежурит сегодня
/duty backend - дежурный конкретной команды
/schedule backend set 25.12 @ivan — назначить дежурство
/escalate backend - эскалация на тимлида
/incident start "..." — начать инцидент

Автоматизация:

  • Утренний дайджест

  • Напоминания о дежурстве

  • Автоэскалация по таймауту

  • Синхронизация с Google Calendar

Веб-панель:

  • Визуальный календарь

  • Управление командами

  • Отчёты и статистика

Быстрый старт

git clone https://github.com/letya999/duty_bot && cd duty_bot
cp .env.example .env
python scripts/generate_security_keys.py --output .env.security
cat .env.security >> .env && rm .env.security
# Заполнить TELEGRAM_TOKEN и SLACK_BOT_TOKEN в .env
docker-compose up -d --build 

Что я делаю дальше и чего нет в гайде: Observability и SLO

А дальше у меня путь в более глубокую автоматизацию. В настройку мониторинга и алертинга и быстрый автоматический роутинг.

Разметка событиями

Каждая важная функция отправляет события, например:

auth_started → auth_success / auth_failed
payment_started → payment_success / payment_failed
message_sent → message_delivered / message_failed

Метрики из событий

  • success_rate — процент успешных операций

  • latency — время выполнения (p50, p95, p99)

  • error_rate — процент ошибок

SLO (Service Level Objectives)

Сервис

Метрика

SLO

Авторизация

success_rate

≥99.9%

Отправка сообщений

success_rate

≥99.5%

Оплата

success_rate

≥99.99%

API

latency p95

<500ms

Error Budget

SLO = 99.9% → Error Budget = 0.1% ошибок в месяц (~43 минуты простоя).

Потратили бюджет? Замораживаем фичи, чиним надёжность.

Алерты привязаны к SLO

cpu_usage > 80% — не понятно влияние на пользователей

auth_success_rate < 99.5% — авторизация деградирует

Маршрутизация алертов

Каждая команда видет перечень компонентов, за которые отвечает, с указанием класса критичности и перечнем алертов, которые позволяют соотнести проблему с компонентом

Алерт

Команда

Канал

auth_success_rate < 99.5%

Backend

#backend-alerts

payment_success_rate < 99.9%

Payments

#payments-alerts

app_crash_rate > 1%

Mobile

#mobile-alerts

Метрики успеха

Метрика

Что показывает

Цель

MTTD

Как быстро узнаём

<5 мин

MTTR

Как быстро чиним

<1ч для P1

Кол-во инцидентов

Тренд

Снижение

% повторных

Одни и те же проблемы

<10%

% выполнения SLA

Укладываемся в тайминги

>95%

% постмортемов

Документируем

100%

% задач из постмортемов

Чиним причины

>80%

Заключение

Инцидент-менеджмент — зеркало устойчивости организации. Начните с малого:

  1. Завтра: определите, что для вас инцидент

  2. На этой неделе: назначьте первого дежурного

  3. В этом месяце: проведите первый постмортем

Главное -> культура, не документы. Документы -> инструмент. Культура -> фундамент.

Полезные ссылки

Автор: Renewal_Studio

Источник

Оставить комментарий