Согласно определению postmortem – это процедура, посмертное вскрытие и исследование тела, обычно с целью установить причину смерти. Не очень приятное описание, но очень полезная практика, благодаря которой о человеческом организме и причинах его болезней и смерти удалось узнать много жизненно важной информации и использовать ее для сохранения огромного количества судеб. Заимствование практик из соседних наук не редкость – из медицинской практики в нашу рабочую повседневность и пришел принцип создания постмортемов.

Для чего же нам нужно проводить "вскрытие” системы после инцидента? Тем более, что жизнь "пациента" была сохранена, и команда, работавшая над сохранением жизни, свою долю стресса и опыта уже получила.

Во-первых, постмортемы помогают установить причину возникновения проблемы. Да, мы спасли нашу систему от комы, но, если не понять из-за чего она пыталась впасть в предсмертный припадок, с большой долей вероятности она попытается отправиться на тот свет снова и вполне возможно, что очень скоро.

Тут мы открываем вторую причину – с помощью аналитики посмотрема, когда мы выявили причины сбоя, мы можем предотвратить повторение инцидента.

В-третьих, при проведении посмотрема “вскрытия” могут обнаружиться на первый взгляд неочевидные системные недостатки внутри наших процессов, которые оказывают опосредованное влияние на работу и нуждаются в оптимизации. Возможно, у нас в шкафу пылится дефибриллятор, в то время как мы в каждый экстренный момент используем ручной массаж сердца, хотя эффективность применения дефибриллятора снизила бы временные и физические затраты команды на реанимацию и уменьшила бы риски человеческой ошибки.

Самые важные принцип и цель постмортема: мы не ищем виноватых и никого не наказываем – мы создаем культуру прозрачности, открытости и совместно стремимся к улучшениям. Это значит, что мы не ищем виновного в том, что дефибриллятор не вытащили из коробки и не поставили на реанимационных стол (и не лишаем его премии), мы достаем этот дефибриллятор из шкафа, вытираем пыль и начинаем читать к нему инструкцию, проводить обучение по его эксплуатации и активно внедряем его в свою работу.

Посмортемы строятся на нескольких основополагающих принципах

Первый принцип – без обвинений. Постмортем это не еще одна часть Ван Хельсинга, где начальник пытает бледного сотрудника с темными кругами под глазами, аллергией на чеснок и яркий свет, в попытках определить не он ли тот упырь, что убил продакшен прошлой ночью. В первую очередь ориентироваться на факты, процессы и улучшения.

Второй принцип – фокус на объективных данных. Догадки, подозрения, ощущения и предчувствия – основа для разговора с психологом, но не для формирования технических выводов. Все выводы должны основываться на объективной информации.

Третий принцип – коллективная работа. Думай, как детектив: чтобы получить максимально полную картину случившегося, необходимо поговорить со всеми свидетелями. Но главная цель не замыкать анализ информации на себе, а вовлечь всех участников в коллективное обсуждение, чтобы совместно генерировать идеи, отбрасывать нерелевантные и тем самым совместно учиться на новом опыте.

Четвертый принцип – документирование. Да, это та самая неприятная часть с бумажной волокитой. Но именно перенос на “бумагу” итогов постмортема помогает разложить все по полочкам в голове и отрефлексировать новый опыт. Кроме того, этот документ сможет стать основой для анализа в будущем при выявлении закономерностей сбоев или обучении сотрудников.

Этапы проведения постмортема

1. Сбор данных

  • Какая степень влияния на пользователей? 

  • Когда начался и закончился инцидент? Укажите точное время.

  • Какие симптомы были замечены? Описание ошибок, записей в логах или необычного поведения системы.

  • Кто сообщил о проблеме? Укажите источник: мониторинг, клиент, сотрудник или директор.

  • Какие действия предпринимались? Опишите шаги по устранению проблемы.

  • Как завершился инцидент? Фиксация результата.

Инструментами для сбора данных могут послужить: логи системы, алерты, данные  мониторинга, скриншоты или сохраненная информация об ошибках.

Пример заполнения постмортема
Пример заполнения постмортема

2. Восстанавливаем хронологию событий

Создайте таймлайн, который покажет:

  • Ключевые события: что и в какой последовательности происходило с указанием времени (из ключевых событий формируем основные этапы).

  • Реакции: в рамках этапов заполняем какое действие/действия были предприняты или что происходило на каждом этапе.

  • Результаты: какие результаты были достигнуты/что получилось сделать/что не получилось и так далее.

  • Пропуски: время между событиями, где не было реакции или диагностики.

Пример заполнения хронологии
Пример заполнения хронологии

3. Определение источника отказа (Root Cause Analysis)

Можем предложить методику "5 Почему" (подходит для более легкой и быстрой аналитики), метод “Что пошло как надо?” и диаграмму "Исикавы (Рыбий скелет)" (более глубокий уровень).

Метод «5 почему» помогает найти первопричину проблемы или конфликта. Столкнувшись с инцидентом, мы можем задать вопрос, почему так произошло. Найдя прямую причину, мы задаем следующий вопрос уже отталкиваясь от этой причины — почему произошла она? Так выстраивается цепочка причин, в конце которой (в среднем через 5 вопросов) обнаруживается истинная причина нашей изначальной проблемы. 

(Пример) Метод 5 почему:

  • Почему произошел сбой?

  • Почему это не было предотвращено?

  • Почему мониторинг не сработал?

  • Почему реакция заняла так много времени?

В использовании метода Исикавы идея заключается в том, чтобы сформулировать проблему, затем определить факторы, которые могут влиять на ее появление, и внутри каждого фактора найти конкретные причины проблемы. В результате анализа получится схема, по форме напоминающая скелет рыбы. 

(Пример) Диаграмма «Исикавы»:

  • Определите проблему.

  • Определите категории, в которых вы будете искать ее причины.

  • Напишите возможные причины проблемы в каждой из категорий.

  • Отсортируйте и приоритизируйте причины проблемы.

  • Протестируйте потенциальные причины и устраните их.

И не забываем хвалить себя и команду! Метод “что пошло как надо” позволяет обратить внимание не только на проблемные точки, но и отметить сильные стороны команды и ее работы, повышая мотивацию к воспроизведению правильных методов и процессов. В целом можно использовать абсолютно любой метод, главное дойти до самой глубинной причины, будь то ошибка кода, пропуск в документации или организационная проблема.

4. Разработка плана действий

На основании анализа создайте четкий план (состоящий из задач в формате: Что нужно сделать? Кто отвечает? Крайний срок), который будет включать в себя:

  • Технические улучшения: какие ошибки в системе будут нуждаться в исправлении, добавления новых проверок.

  • Обновления процессов: пересмотр процедур эскалации, тестирования, мониторинга.

  • Обучение команды: проведение тренингов или улучшение качества документации.

Пример заполненного плана действий
Пример заполненного плана действий

 5. Документирование

Структура постмортем-документа:

  1. Описание инцидента. Что произошло, когда и какие последствия.

  2. Хронология событий. Список ключевых моментов.

  3. Root Cause. Основные причины сбоя.

  4. Рекомендации. Предлагаемые действия для предотвращения подобных ситуаций.

  5. Выводы. Основные уроки.

P.S. через двое суток после публикации: мы осознаем и понимаем, что описали только кусочек инцидент менеджмента. Если статья понравилась, будем переносить сюда другие статьи про SRE из нашего канала.

Комментарии (8)


  1. yellowmew
    31.01.2025 18:20

    Инструментами для сбора данных могут послужить: логи системы, алерты, данные мониторинга, скриншоты или сохраненная информация об ошибках.

    А так же чат инцидента. Некоторые действия, производимые во время инцидента, как для анализа так и для исправления - ручные. Они не завернуты в скрипты и проверенные ранбуки. Поэтому документировать их в чат - жизненно необходимо (понятное дело что у сообщения "посмотрел логи сервиса А - проблем нет" ценность нулевая, поэтому участники инцидента должны четко понимать что важно а что нет)

    Совершенно непонятно что имеется в виду под "приоритет" инцидента (вопрос не к автору поста, а чисто крик души). Что значит "Высокий"? и чем он отличается от "Критический", например? Событие инцидента - это когда, как минимум, одному человеку из команды пришлось бросить всё (сон, жену, детей, еду, работу) и сидеть ковыряться, восстанавливая сервис. В смысле приоритета для него это блокер, причем всегда. Возможно здесь стоит говорить о "серьезности" или "тяжести" (severity) инцидента, которая оценивается исходя из п.1 (степени влияния на пользователей)

    Пропуски

    Абсолютно бессмысленно оценивать время между событиями. Имеет смысл оценивать время имеющее отношение к реакции, эскалации и длительности всего события инцидента, имхо. Это, по крайней мере, часто показывает насколько хорошо описана система (или сервис) и насколько показательны данные мониторинга (влияет на принятие решения об эскалации или на восстановление сервиса, если диагностика быстро дала понять что исправлять, а описание - как). А то что длительное время может не быть никаких действий - если непонятно что делать то лучше сначала понять, а потом делать (или вообще эскалировать), инженер может укопался в логи чтобы понять что вообще происходит, а от него "действий" ждут

    Root Cause
    Использовал другой подход. Вообще, изначально при составлении таймлайна к митингу ретро подготавливаем драфт, содержащий события мониторинга, из чата, и т.п. - все что доступно инцидент менеджеру
    - Первым этапом ретро митинга собираем "факты": все что имеет отношение к инциденту, но еще не зафиксировано в драфте. Участвует вся команда инцидента - о чем-то умолчали во время инцидента, что-то забыло написаться в чат, а что-то вообще произошло за сутки до с этой областью но может иметь отношение к инциденту. В том числе пишем и хорошее - хвалим команду (ну или команда хвалит себя, учитывая то что все активно участвуют в сборе "фактов". Что интересно, активным участникам ретроспетив это как раз и нравилось)
    - Второй этап - сортировка "фактов": проблема или не проблема. Перефразирование и группировка проблем. Сортировка финального списка проблем на "потенциально вызвавших инцидент" и "возникших во время инцидента". Все они так или иначе попадут в бэклог, но у "возникших во время инцидента" приоритет на совести ответственного за область и им root cause analysis на данном митинге не светит
    - Третий этап - каждая "потенциально вызвавшая инцидент" проходит Root Cause Analysis(любым методом). Находятся и группируются руткозы. Если их получилось много (проблема не в одной области а в нескольких) - команда митинга голосует за top-3 (опять же, проблемы не выбрасываются, просто им снижается приоритет и они остаются на совести ответственного за область). Составляется экшн план и назначаются ответственные за трекинг каждого действия (именно трекинг, поскольку решение проблемы может занять длительное время и, иногда, требуется отдельный проект). В идеале отчеты об исправлении должны быть на гильдии. В экшен плане всегда должно быть:

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

    • Если проблема требует длительного решения - в приоритете предоставить workaround для более быстрого завершения инцидента, если он возникнет еще раз, описать на странице сервиса, ранбуке, обучить команду дежурных


    1. astellar Автор
      31.01.2025 18:20

      Про приоритет в точку. Грамотная организация дежурств подразумевает, что человек заступая на "вахту" будет готов подключиться и внезапный инцидент не поломает ему личные и семейные планы. Иначе может получится ситуация когда все инциденты решает один человек. Знаю компанию в которой этот самый один человек в какой-то момент просто выключил ночью телефон, так к нему домой приехали в 4 утра на такси и начили стучать в дверь. Адекватной работой с инцидент менеджментом (да и в целом) такое назвать нельзя.


    1. astellar Автор
      31.01.2025 18:20

      Про оценку времени между событиями. Могу согласиться в том, что это может не быть первым приоритетом, но если время эскалации 5 дней (пять, дней!): в понедельник выстрелило, забили, а в пятницу вечером как мы любим очнулись и назвали критом, то время простоя здесь выходит на первые позиции, потому что ты попробуй в пятницу вечером собери трезвую команду.


      1. yellowmew
        31.01.2025 18:20

        время простоя здесь выходит на первые позиции

        Здесь вопрос оценки тяжести инцидента -> вопрос опытности (обучения) дежурных.

        Обучение или опыт дают возможность определить правильный уровень и необходимость эскалации. Ошибка в оценке тяжести проблемы - одна проблема. А вот оценка выше "критический" и откладывание решения до пятницы - это уже криминал.


    1. astellar Автор
      31.01.2025 18:20

      Про Root Cause спасибо большое что поделился, если можешь - напиши пожалуйста про размер IT команды в которой этот процесс работал?


      1. yellowmew
        31.01.2025 18:20

        продукт был разделен по продуктовым областям - каждая область - это часть функционала. Область могла быть выражена в наборе сервисов или просто часть кода в монолите. Соответственно были команды - каждая ответственна за конкретную область(области) продукта

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

        • от команды почти всегда присутствовали разработчик участвовавший в инциденте (если была эскалация до девелоперов), и, как правило, тестировщик команды(но не всегда, тогда разработчик формулировал\передавал задачу тестировщику)

        • я, как ответственный за область SRE

        • дежурный во время инцидента

        • а так же все другие заинтересованные

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

          • Иногда присутствовал представитель Support L2 (если был заинтересован)

          • и QA Lead (тоже опционально)

        По проблемам процесса - чем больше собиралась команда ретроспективы ( задело несколько областей - придет больше народа , всплывет больше проблем, обсуждение затянется ) - тем строже приходилось контролировать длительность фаз, иначе не укладывались в запланированное время - самые сложные инциденты разбирали в два захода.


  1. Andrey_Solomatin
    31.01.2025 18:20

    Постмортемы это хорошо. У нас в них участвуют команды поддержки и они приносят свою экспертизу в создании стабильности. Например для инцидента в примере, первая резолюция будет про алерты. Не пользователи должны жаловаться, а выстрелить алерты на 500/долгие ответы и система мониторинга должна сама звонить дежурному.


    1. astellar Автор
      31.01.2025 18:20

      100%. В статье специально был показан кейс с несколькими возможными улучшениями. Базу, знаете ли, рестартовать тоже может быть не самая умной идеей! :)