Что происходит после восстановления: превращаем сбои инфраструктуры в улучшение процессов
Дашборды мониторинга снова зелёные. Команда с облегчением выдыхает. Инцидент устранён, сервис работает, и все наконец могут разойтись по домам или вернуться к обычным задачам.
Именно в этот момент большинство команд теряют самое ценное, что они только что заработали: уроки, извлечённые из сбоя.
Когда всё возвращается в норму, естественное желание — двигаться дальше. Давление спало, срочность прошла, а в очереди ждут другие задачи. Но если пропустить этап осмысления произошедшего, вы гарантируете, что следующее изменение провалится так же, в тот же час, с тем же стрессом.
Начните с пост-мортема, а не с поиска виноватых
Первое, что нужно сделать после восстановления, — это пост-мортем. Это не собрание, чтобы выяснить, кто напортачил. Это структурированный процесс восстановления того, что на самом деле произошло: что планировалось, что было выполнено, где пошло не так и как проходило восстановление.
Следующая блок-схема обобщает ключевые шаги после разрешения инцидента:
Вам нужна хронология. Начните с решения внести изменение. Включите результаты ревью пайплайна, шаг применения, первый признак проблемы и каждое действие, предпринятое во время восстановления. Записывайте, пока детали ещё свежи. Эта хронология станет сырым материалом для выявления закономерностей.
Самое важное условие полезного пост-мортема — культура без поиска виноватых. Если люди боятся наказания за ошибки, они будут скрывать детали. Они будут чистить логи чатов, умалчивать о сомнениях и избегать упоминания предупреждающих знаков, которые заметили, но не озвучили. Пост-мортем без поиска виноватых не означает, что никто не несёт ответственности. Это означает, что фокус смещается на процесс, который допустил сбой, а не на человека, выполнившего команду.
Два типа выводов
Когда у вас есть хронология и команда чувствует себя в безопасности, чтобы говорить честно, вы обычно обнаружите две категории проблем.
Первая категория связана непосредственно с изменением, которое только что провалилось. Возможно, параметр Terraform был несовместим с последней версией провайдера. Возможно, зависимость ресурса была невидима во время планирования. Возможно, значение конфигурации было введено с опечаткой. Это разовые проблемы, которые можно исправить напрямую.
Вторая категория — системные. Это более глубокие проблемы, которые сделали сбой возможным в принципе. Пайплайн не выполнял проверку плана перед применением. Не было мониторинга для этого конкретного ресурса после изменений. У команды не было способа обнаружить аномалию, пока пользователь не сообщил о ней. План восстановления существовал, но никогда не тестировался. Это те выводы, которые, если их не устранить, приведут к тому, что следующий сбой будет выглядеть иначе, но ощущаться точно так же.
Превратите выводы в конкретные исправления
Каждый вывод должен стать изменением. Начните с пайплайна, потому что это обычно самое быстрое, что можно исправить.
Если сбой произошёл из-за того, что проверка плана была пропущена, добавьте автоматический шлюз, требующий проверки плана перед применением. Если мониторинг не зафиксировал аномалию, добавьте недостающую метрику или оповещение. Если процедура отката была неясна, обновите пайплайн, включив в него протестированный шаг отката. Это технические изменения, которые можно внедрить немедленно в том же пайплайне, который только что отказал.
Затем обновите сам план восстановления. Опыт этого инцидента, вероятно, выявил пробелы в исходном плане. Возможно, шаг восстановления из снимка занял вдвое больше времени, чем ожидалось, потому что объём данных вырос. Возможно, отсутствовал шаг верификации после восстановления, поэтому команда не знала, что сервис здоров, пока кто-то не проверил вручную. Обновите план восстановления реалистичными оценками времени, добавьте промежуточные шаги верификации и задокументируйте фактические команды, которые сработали.
Документируйте опыт, а не роман
Документация после сбоя не должна быть формальным отчётом, который никто не читает. Это должна быть практическая запись, которую другой инженер сможет использовать, столкнувшись с аналогичным изменением.
Запишите: какое изменение было предпринято, каковы были ранние предупреждающие признаки, какие шаги восстановления были предприняты, сколько времени занял каждый шаг и что было исправлено после. Будьте кратки. Одной-двух страниц достаточно. Храните там, где команда сможет её найти, а не в папке, которую никто не открывает.
Эта документация особенно ценна для новых членов команды, которые никогда не сталкивались с таким типом сбоя. Когда они столкнутся с похожей ситуацией, у них будет справочный материал, показывающий, на что обращать внимание и что делать.
Решите, когда попробовать снова
После внедрения всех исправлений команде нужно решить, когда снова пытаться выполнить то же изменение. Не торопитесь. Не развёртывайте заново в тот же день, если план восстановления не был перетестирован и первопричина полностью не понята.
Дайте команде время убедиться, что изменения в пайплайне работают. По возможности проведите небольшую симуляцию. Дайте исправлению "отстояться" хотя бы один цикл. Цель — не скорость. Цель — гарантировать, что следующая попытка не повторит тот же сбой.
Практический чек-лист для оценки после восстановления
Если вам нужна быстрая шпаргалка для следующего сеанса пост-восстановления, вот краткий чек-лист, охватывающий основное:
- Восстановите полную хронологию от решения до восстановления
- Определите специфические выводы, уникальные для этого изменения
- Определите системные выводы, которые могут повлиять на будущие изменения
- Внедрите исправления в пайплайн (шлюзы, мониторинг, шаги отката)
- Обновите план восстановления реалистичными оценками и шагами верификации
- Напишите краткий практический документ для будущих справок
- Запланируйте следующую попытку только после проверки исправлений
Реальная цена пропуска этого шага
Каждый сбой инфраструктуры чего-то стоит: времени, стресса, доверия пользователей, а иногда и денег. Эти затраты уже понесены. Единственный способ получить отдачу от этих инвестиций — извлечь уроки и улучшить процесс.
Если вы пропустите оценку, вы столкнётесь со следующим сбоем с тем же хрупким процессом, теми же пробелами в мониторинге и тем же непроверенным планом восстановления. Сбой будет выглядеть иначе, но шаблон останется тем же.
Команды, которые со временем становятся лучше, — это не те, которые никогда не терпят неудач. Это те, которые относятся к каждому сбою как к плате за обучение, за которое им больше не придётся платить.