Что такое runbook и зачем он нужен?

Что такое runbook и зачем он нужен

Runbook — это пошаговая инструкция для инженеров (обычно on-call), описывающая действия по диагностике, смягчению и восстановлению работы сервиса при конкретной проблеме. Это «чек-лист в бою»: минимальный набор проверенных шагов, команд и ссылок, который позволяет быстро и воспроизводимо вернуть систему в рабочее состояние.

Основные цели

  • ускорить восстановление (снизить MTTR) за счёт понятных шагов;

  • уменьшить когнитивную нагрузку on-call инженера в стрессовой ситуации;

  • стандартизировать реакцию на типовые инциденты;

  • передать знания между командами и новым сотрудникам;

  • обеспечить воспроизводимость и возможность автоматизации.

Что обычно содержится в runbook

  • заголовок, ответственный (owner), last reviewed date, уровень приоритета;

  • область действия / scope (какие сервисы, среда: prod/stage);

  • признаки инцидента (как обнаружить: метрики/алерты/логи);

  • предпосылки и требования (креды, доступы, права);

  • пошаговая инструкция (triage → mitigation → recovery) с точными командами и ожидаемыми результатами;

  • проверки валидации (как убедиться, что всё ок);

  • команды для отката/rollback;

  • контакты и эскалация (on-call, владельцы сервиса, SRE, DB админ);

  • ссылки: дашборды, query в лог-сторе, трассы, playbook’ы, run scripts;

  • post-incident задачи (постмортем, изменения в runbook после инцидента).

Пример минимального шаблона

pythonTitle: API 500 spike (prod) Owner: team-api@example.com Detection: alert "api_5xx_rate > 1% for 5m" Preconditions: доступ k8s, kubectl config=prod

Steps:

1) Ограничить трафик: включить feature flag X (admin console) — ожидаемый результат: drop в 5xx.

2) Посмотреть поды: kubectl get pods -l app=api -o wide

3) Логи проблемного подраздела: kubectl logs <pod> | grep "Timeout"

4) Если причина — DB timeout: переключить на read-replica: /scripts/switch-db.sh --to replica

5) Проверка: curl -I https://api.example.com/health → 200

6) Если не помогло — эскалация: @sre-lead, открыть conference bridge

Validation: SLI p95 < 300ms и 5xx < 0.1% в течение 10m

Лучшие практики написания

  • писать короткими императивными шагами: «выполнить», «проверить»;

  • указывать точные команды и ожидаемый вывод;

  • не полагаться на память — дать всё необходимое (куда смотреть, что менять);

  • использовать структурированные шаблоны и version control (Git) + ревью;

  • хранить рядом с дашбордами и системой оповещений;

  • отмечать дату проверки и тестировать runbook в «учебных» инцидентах (fire drills);

  • автоматизировать рутинные шаги (скрипты, playbooks) и документировать ручные только при необходимости;

  • избежать секретов в тексте — держать ссылки на защищённые хранилища с доступом.

Как поддерживать полезность

  • назначить владельца, регулярные ревью;

  • обновлять после каждого инцидента (lessons learned);

  • измерять эффективность: снижение MTTR при использовании runbook, процент успешных восстановлений;

  • проводить тренировки и проверку шагов (runbook run-throughs).

Runbook vs playbook vs SOP

  • Runbook — конкретная инструкция «что делать сейчас при X».

  • Playbook — набор сценариев/связанных runbook’ов для класса инцидентов (может быть более стратегическим).

  • SOP — процедурный документ для рутинных операций (менее аварийный, больше про процессы).

Runbook — практический инструмент для быстрого реагирования и передачи операционной памяти: правильно написанный и протестированный он заметно сокращает время простоя и количество ошибок в экстренных ситуациях.