Согласно определению postmortem – это процедура, посмертное вскрытие и исследование тела, обычно с целью установить причину смерти. Не очень приятное описание, но очень полезная практика, благодаря которой о человеческом организме и причинах его болезней и смерти удалось узнать много жизненно важной информации и использовать ее для сохранения огромного количества судеб. Заимствование практик из соседних наук не редкость – из медицинской практики в нашу рабочую повседневность и пришел принцип создания постмортемов.
Для чего же нам нужно проводить "вскрытие” системы после инцидента? Тем более, что жизнь "пациента" была сохранена, и команда, работавшая над сохранением жизни, свою долю стресса и опыта уже получила.
Во-первых, постмортемы помогают установить причину возникновения проблемы. Да, мы спасли нашу систему от комы, но, если не понять из-за чего она пыталась впасть в предсмертный припадок, с большой долей вероятности она попытается отправиться на тот свет снова и вполне возможно, что очень скоро.
Тут мы открываем вторую причину – с помощью аналитики посмотрема, когда мы выявили причины сбоя, мы можем предотвратить повторение инцидента.
В-третьих, при проведении посмотрема “вскрытия” могут обнаружиться на первый взгляд неочевидные системные недостатки внутри наших процессов, которые оказывают опосредованное влияние на работу и нуждаются в оптимизации. Возможно, у нас в шкафу пылится дефибриллятор, в то время как мы в каждый экстренный момент используем ручной массаж сердца, хотя эффективность применения дефибриллятора снизила бы временные и физические затраты команды на реанимацию и уменьшила бы риски человеческой ошибки.
Самые важные принцип и цель постмортема: мы не ищем виноватых и никого не наказываем – мы создаем культуру прозрачности, открытости и совместно стремимся к улучшениям. Это значит, что мы не ищем виновного в том, что дефибриллятор не вытащили из коробки и не поставили на реанимационных стол (и не лишаем его премии), мы достаем этот дефибриллятор из шкафа, вытираем пыль и начинаем читать к нему инструкцию, проводить обучение по его эксплуатации и активно внедряем его в свою работу.
Посмортемы строятся на нескольких основополагающих принципах
Первый принцип – без обвинений. Постмортем это не еще одна часть Ван Хельсинга, где начальник пытает бледного сотрудника с темными кругами под глазами, аллергией на чеснок и яркий свет, в попытках определить не он ли тот упырь, что убил продакшен прошлой ночью. В первую очередь ориентироваться на факты, процессы и улучшения.
Второй принцип – фокус на объективных данных. Догадки, подозрения, ощущения и предчувствия – основа для разговора с психологом, но не для формирования технических выводов. Все выводы должны основываться на объективной информации.
Третий принцип – коллективная работа. Думай, как детектив: чтобы получить максимально полную картину случившегося, необходимо поговорить со всеми свидетелями. Но главная цель не замыкать анализ информации на себе, а вовлечь всех участников в коллективное обсуждение, чтобы совместно генерировать идеи, отбрасывать нерелевантные и тем самым совместно учиться на новом опыте.
Четвертый принцип – документирование. Да, это та самая неприятная часть с бумажной волокитой. Но именно перенос на “бумагу” итогов постмортема помогает разложить все по полочкам в голове и отрефлексировать новый опыт. Кроме того, этот документ сможет стать основой для анализа в будущем при выявлении закономерностей сбоев или обучении сотрудников.
Этапы проведения постмортема
1. Сбор данных
Какая степень влияния на пользователей?
Когда начался и закончился инцидент? Укажите точное время.
Какие симптомы были замечены? Описание ошибок, записей в логах или необычного поведения системы.
Кто сообщил о проблеме? Укажите источник: мониторинг, клиент, сотрудник или директор.
Какие действия предпринимались? Опишите шаги по устранению проблемы.
Как завершился инцидент? Фиксация результата.
Инструментами для сбора данных могут послужить: логи системы, алерты, данные мониторинга, скриншоты или сохраненная информация об ошибках.
2. Восстанавливаем хронологию событий
Создайте таймлайн, который покажет:
Ключевые события: что и в какой последовательности происходило с указанием времени (из ключевых событий формируем основные этапы).
Реакции: в рамках этапов заполняем какое действие/действия были предприняты или что происходило на каждом этапе.
Результаты: какие результаты были достигнуты/что получилось сделать/что не получилось и так далее.
Пропуски: время между событиями, где не было реакции или диагностики.
3. Определение источника отказа (Root Cause Analysis)
Можем предложить методику "5 Почему" (подходит для более легкой и быстрой аналитики), метод “Что пошло как надо?” и диаграмму "Исикавы (Рыбий скелет)" (более глубокий уровень).
Метод «5 почему» помогает найти первопричину проблемы или конфликта. Столкнувшись с инцидентом, мы можем задать вопрос, почему так произошло. Найдя прямую причину, мы задаем следующий вопрос уже отталкиваясь от этой причины — почему произошла она? Так выстраивается цепочка причин, в конце которой (в среднем через 5 вопросов) обнаруживается истинная причина нашей изначальной проблемы.
(Пример) Метод 5 почему:
Почему произошел сбой?
Почему это не было предотвращено?
Почему мониторинг не сработал?
Почему реакция заняла так много времени?
В использовании метода Исикавы идея заключается в том, чтобы сформулировать проблему, затем определить факторы, которые могут влиять на ее появление, и внутри каждого фактора найти конкретные причины проблемы. В результате анализа получится схема, по форме напоминающая скелет рыбы.
(Пример) Диаграмма «Исикавы»:
Определите проблему.
Определите категории, в которых вы будете искать ее причины.
Напишите возможные причины проблемы в каждой из категорий.
Отсортируйте и приоритизируйте причины проблемы.
Протестируйте потенциальные причины и устраните их.
И не забываем хвалить себя и команду! Метод “что пошло как надо” позволяет обратить внимание не только на проблемные точки, но и отметить сильные стороны команды и ее работы, повышая мотивацию к воспроизведению правильных методов и процессов. В целом можно использовать абсолютно любой метод, главное дойти до самой глубинной причины, будь то ошибка кода, пропуск в документации или организационная проблема.
4. Разработка плана действий
На основании анализа создайте четкий план (состоящий из задач в формате: Что нужно сделать? Кто отвечает? Крайний срок), который будет включать в себя:
Технические улучшения: какие ошибки в системе будут нуждаться в исправлении, добавления новых проверок.
Обновления процессов: пересмотр процедур эскалации, тестирования, мониторинга.
Обучение команды: проведение тренингов или улучшение качества документации.
5. Документирование
Структура постмортем-документа:
Описание инцидента. Что произошло, когда и какие последствия.
Хронология событий. Список ключевых моментов.
Root Cause. Основные причины сбоя.
Рекомендации. Предлагаемые действия для предотвращения подобных ситуаций.
Выводы. Основные уроки.
P.S. через двое суток после публикации: мы осознаем и понимаем, что описали только кусочек инцидент менеджмента. Если статья понравилась, будем переносить сюда другие статьи про SRE из нашего канала.
Комментарии (8)
Andrey_Solomatin
31.01.2025 18:20Постмортемы это хорошо. У нас в них участвуют команды поддержки и они приносят свою экспертизу в создании стабильности. Например для инцидента в примере, первая резолюция будет про алерты. Не пользователи должны жаловаться, а выстрелить алерты на 500/долгие ответы и система мониторинга должна сама звонить дежурному.
astellar Автор
31.01.2025 18:20100%. В статье специально был показан кейс с несколькими возможными улучшениями. Базу, знаете ли, рестартовать тоже может быть не самая умной идеей! :)
yellowmew
А так же чат инцидента. Некоторые действия, производимые во время инцидента, как для анализа так и для исправления - ручные. Они не завернуты в скрипты и проверенные ранбуки. Поэтому документировать их в чат - жизненно необходимо (понятное дело что у сообщения "посмотрел логи сервиса А - проблем нет" ценность нулевая, поэтому участники инцидента должны четко понимать что важно а что нет)
Совершенно непонятно что имеется в виду под "приоритет" инцидента (вопрос не к автору поста, а чисто крик души). Что значит "Высокий"? и чем он отличается от "Критический", например? Событие инцидента - это когда, как минимум, одному человеку из команды пришлось бросить всё (сон, жену, детей, еду, работу) и сидеть ковыряться, восстанавливая сервис. В смысле приоритета для него это блокер, причем всегда. Возможно здесь стоит говорить о "серьезности" или "тяжести" (severity) инцидента, которая оценивается исходя из п.1 (степени влияния на пользователей)
Пропуски
Абсолютно бессмысленно оценивать время между событиями. Имеет смысл оценивать время имеющее отношение к реакции, эскалации и длительности всего события инцидента, имхо. Это, по крайней мере, часто показывает насколько хорошо описана система (или сервис) и насколько показательны данные мониторинга (влияет на принятие решения об эскалации или на восстановление сервиса, если диагностика быстро дала понять что исправлять, а описание - как). А то что длительное время может не быть никаких действий - если непонятно что делать то лучше сначала понять, а потом делать (или вообще эскалировать), инженер может укопался в логи чтобы понять что вообще происходит, а от него "действий" ждут
Root Cause
Использовал другой подход. Вообще, изначально при составлении таймлайна к митингу ретро подготавливаем драфт, содержащий события мониторинга, из чата, и т.п. - все что доступно инцидент менеджеру
- Первым этапом ретро митинга собираем "факты": все что имеет отношение к инциденту, но еще не зафиксировано в драфте. Участвует вся команда инцидента - о чем-то умолчали во время инцидента, что-то забыло написаться в чат, а что-то вообще произошло за сутки до с этой областью но может иметь отношение к инциденту. В том числе пишем и хорошее - хвалим команду (ну или команда хвалит себя, учитывая то что все активно участвуют в сборе "фактов". Что интересно, активным участникам ретроспетив это как раз и нравилось)
- Второй этап - сортировка "фактов": проблема или не проблема. Перефразирование и группировка проблем. Сортировка финального списка проблем на "потенциально вызвавших инцидент" и "возникших во время инцидента". Все они так или иначе попадут в бэклог, но у "возникших во время инцидента" приоритет на совести ответственного за область и им root cause analysis на данном митинге не светит
- Третий этап - каждая "потенциально вызвавшая инцидент" проходит Root Cause Analysis(любым методом). Находятся и группируются руткозы. Если их получилось много (проблема не в одной области а в нескольких) - команда митинга голосует за top-3 (опять же, проблемы не выбрасываются, просто им снижается приоритет и они остаются на совести ответственного за область). Составляется экшн план и назначаются ответственные за трекинг каждого действия (именно трекинг, поскольку решение проблемы может занять длительное время и, иногда, требуется отдельный проект). В идеале отчеты об исправлении должны быть на гильдии. В экшен плане всегда должно быть:
Если есть проблемы с анализом во время инцидента, первым пунктом идет доработка мониторинга
Если проблема требует длительного решения - в приоритете предоставить workaround для более быстрого завершения инцидента, если он возникнет еще раз, описать на странице сервиса, ранбуке, обучить команду дежурных
astellar Автор
Про приоритет в точку. Грамотная организация дежурств подразумевает, что человек заступая на "вахту" будет готов подключиться и внезапный инцидент не поломает ему личные и семейные планы. Иначе может получится ситуация когда все инциденты решает один человек. Знаю компанию в которой этот самый один человек в какой-то момент просто выключил ночью телефон, так к нему домой приехали в 4 утра на такси и начили стучать в дверь. Адекватной работой с инцидент менеджментом (да и в целом) такое назвать нельзя.
astellar Автор
Про оценку времени между событиями. Могу согласиться в том, что это может не быть первым приоритетом, но если время эскалации 5 дней (пять, дней!): в понедельник выстрелило, забили, а в пятницу вечером как мы любим очнулись и назвали критом, то время простоя здесь выходит на первые позиции, потому что ты попробуй в пятницу вечером собери
трезвуюкоманду.yellowmew
Здесь вопрос оценки тяжести инцидента -> вопрос опытности (обучения) дежурных.
Обучение или опыт дают возможность определить правильный уровень и необходимость эскалации. Ошибка в оценке тяжести проблемы - одна проблема. А вот оценка выше "критический" и откладывание решения до пятницы - это уже криминал.
astellar Автор
Про Root Cause спасибо большое что поделился, если можешь - напиши пожалуйста про размер IT команды в которой этот процесс работал?
yellowmew
продукт был разделен по продуктовым областям - каждая область - это часть функционала. Область могла быть выражена в наборе сервисов или просто часть кода в монолите. Соответственно были команды - каждая ответственна за конкретную область(области) продукта
размер команды ретроспективы инцидента определялся в зависимости от задетых областей продукта
от команды почти всегда присутствовали разработчик участвовавший в инциденте (если была эскалация до девелоперов), и, как правило, тестировщик команды(но не всегда, тогда разработчик формулировал\передавал задачу тестировщику)
я, как ответственный за область SRE
дежурный во время инцидента
а так же все другие заинтересованные
как правило присутствовал самый опытный разработчик той команды, хоть его присутствие не было обязательным, благо эти ребята были, как правило, проактивны и понимали ценность подобных митингов
Иногда присутствовал представитель Support L2 (если был заинтересован)
и QA Lead (тоже опционально)
По проблемам процесса - чем больше собиралась команда ретроспективы ( задело несколько областей - придет больше народа , всплывет больше проблем, обсуждение затянется ) - тем строже приходилось контролировать длительность фаз, иначе не укладывались в запланированное время - самые сложные инциденты разбирали в два захода.