раздел 11 · рецепт

Дебаг прод-инцидента

Прод упал. Sentry разрывается. Slack #incidents звенит. У вас 30 минут, чтобы разобраться, иначе клиенты пойдут к конкурентам. Этот рецепт - как использовать Claude для быстрого root-cause анализа без паники.

Когда применять

  • Сервис вернул 500 на критическом эндпоинте
  • В Sentry полезли новые ошибки после деплоя
  • Latency p99 прыгнул в 10x
  • Очередь задач остановилась
  • Пользователи жалуются на одинаковый сценарий

Шаги

Шаг 1. Собрать факты, не гипотезы

Первое - НЕ открывайте редактор. Сначала факты:

Промпт:
"Сейчас прод-инцидент. Не предлагай фиксы. Помоги собрать факты:
1. Какие endpoints упали? Дай команду посмотреть в access.log.
2. Когда начался инцидент? Точное время первой ошибки.
3. Что деплоилось за последние 24 часа? git log + CI history.
4. Есть ли паттерн: один пользователь, регион, размер запроса?
5. Что говорят метрики - DB, CPU, память?
Составь чек-лист команд для сбора этой информации."

Claude даст вам список команд. Запускайте их по порядку.

Шаг 2. Гипотезы по приоритету

Когда факты собраны:

Промпт:
"Вот факты:
- 500 на POST /api/payments начались 14:32
- В 14:30 задеплоился PR #1247 (изменения в payment service)
- 100% запросов с amount > 10000 падают
- DB и CPU в норме
- В Sentry traceback: ConnectionError в anthropic SDK

Составь топ-3 гипотезы по убыванию вероятности, для каждой - как
быстро проверить."

Получаете приоритизированный список. Не лезьте в код, пока не выбрана гипотеза.

Шаг 3. Минимальный воспроизводимый пример

Промпт:
"Воспроизведи баг локально. Сделай curl-запрос или pytest-тест
который точно повторяет проблему. Если не воспроизводится локально -
расскажи какие данные/окружение нужны."

Без воспроизводимого примера фикс - это лотерея. С ним - вы точно знаете, фиксит ли изменение.

Шаг 4. Поиск root cause

Промпт:
"Воспроизведено. Теперь найди root cause. Изучи:
- diff PR #1247 - что изменилось
- логи anthropic SDK с DEBUG-уровнем
- timeout настройки в коде
Не предлагай фикс, пока не покажешь МЕСТО где появилась проблема."

Главное правило: фикс симптома не считается фиксом. Если вы добавили try-except и подавили ошибку - проблема не решена.

Шаг 5. Hotfix vs full fix

  • Hotfix - минимальное изменение, восстанавливающее работоспособность. Например, увеличить timeout с 5s до 30s. Не решает root cause, но снимает инцидент.
  • Full fix - решение root cause. Например, перенести anthropic-вызов в очередь, чтобы не блокировать API.

В острый момент - hotfix. После - PR с full fix и postmortem.

Шаг 6. Постмортем

После того как прод восстановлен:

Промпт:
"Напиши postmortem по этому инциденту. Структура:
- Что произошло (timeline по минутам)
- Impact (сколько пользователей затронуто, сколько денег потеряно)
- Root cause (одной фразой)
- Hotfix vs full fix (что сделали сразу, что планируется)
- Что улучшить, чтобы не повторилось:
  - Мониторинг (какой алёрт пропустили)
  - Тесты (какой тест поймал бы это)
  - Процесс (что в code review/деплое подвело)"

Антипаттерны

| Что не делать | Почему | |---|---| | Сразу фиксить без гипотез | Получите 5 push'ей подряд, и хуже не станет только потому, что вам повезло. | | git revert HEAD --no-edit без анализа | Может откатить не только проблему, но и важные правки в том же коммите. | | Игнорировать алёрт «всё уже нормально» | Если проблема воспроизводится - она не сама пройдёт. | | Постмортем «виноват Вася» | Постмортемы blameless. Проблема не в человеке - в процессе. | | Не писать тест на регрессию | Через 3 месяца это повторится. |

Готовый чек-лист «прод упал»

[ ] Сообщить в #incidents (acknowledge - я смотрю)
[ ] Собрать факты: ошибки, время, deploys, паттерн, метрики
[ ] Составить топ-3 гипотезы
[ ] Воспроизвести локально (или объяснить почему нельзя)
[ ] Найти root cause
[ ] Hotfix → деплой → smoke
[ ] Сообщить в #incidents (resolved)
[ ] Postmortem в течение 48 часов
[ ] Регрессионный тест в течение недели

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

  • Sentry MCP - Claude читает Sentry напрямую
  • Postgres MCP - быстрые SQL-запросы к проду
  • Awesome SRE - сборник практик надёжности