Управление инцидентами для высокоскоростных команд
Разбор инцидентов
В Atlassian мы практикуем разбор инцидентов без поиска виновных, чтобы обеспечить анализ и устранение основных причин всех инцидентов с уровнем опасности 2 и выше. Ниже показана сжатая версия нашей внутренней документации, в которой описано, как в Atlassian происходит разбор инцидентов.
Закажите печатную версию нашего справочника или скачайте PDF-версию
Количество печатных версий нашего справочника по управлению инцидентами, которые мы отправляем бесплатно, ограничено. Вы также можете скачать PDF-версию.
Поле | Инструкции | Пример |
Краткое описание инцидента | Опишите инцидент несколькими предложениями. Укажите, какой был уровень опасности и почему, а также как долго продолжались последствия инцидента. | В период <временной диапазон инцидента, например с 14:30 до 15:00> <дата> <количество> клиентов жаловались на <симптомы события>. Событие было вызвано развертыванием в <время развертывания или изменение, которое привело к инциденту>. Развертывание содержало изменение кода для <описание изменения или его причина>. Баг в этом развертывании вызвал <описание проблемы>. Событие было обнаружено <система>. Мы смягчили последствия события путем <действия, предпринятые для решения проблемы>. Этот инцидент <уровень опасности> затронул X% клиентов. В связи с этим инцидентом появилось <количество заявок в службу поддержки и (или) публикаций в социальных сетях>. |
Предшествующие события | Опишите обстоятельства, которые привели к этому инциденту (например, предыдущие изменения, после внесения которых появились скрытые баги). | В <время> <дата> (<время, прошедшее до момента проявления проблемы у клиентов>) в <продукт или сервис> было внесено изменение, чтобы <описание изменений, приведших к инциденту>. Изменение вызвало <описание последствий изменений>. |
Сбой | Опишите, что не работало должным образом. Прикрепите снимки экрана с соответствующими схемами или данными о сбое. | <Количество> ответов были некорректно отправлены на X% запросов в течение <период времени>. |
Воздействие | Опишите, что видели внутренние и внешние клиенты во время инцидента. Укажите, сколько поступило заявок в поддержку. | В течение <промежуток времени> между <временной диапазон> <дата> наблюдалось <описание инцидента>. Это затронуло <количество> клиентов (X% общего количества клиентов <система или сервис>), у которых происходило <описание симптомов, которые испытывали на себе клиенты>. По итогам появилось <количество заявок в поддержку и публикаций в социальных сетях>. |
Обнаружение | Когда и как в Atlassian обнаружили инцидент? Как можно было ускорить обнаружение? В качестве упражнения на сообразительность ответьте на вопрос: как бы вы сократили это время вдвое? | Инцидент был обнаружен, когда сработало <тип оповещения> и было отправлено сообщение <команда или человек, которому было отправлено сообщение>. Затем им пришлось отправить сообщение <человек или команда, отреагировавшие на инцидент вторыми>, потому что они не отвечали за работу сервиса, осуществлявшего запись на диск, что вызвало задержку реагирования на <промежуток времени>. <Описание улучшения> будет подготовлено <команда, отвечающая за улучшение> с целью <эффект от улучшения>. |
Ответ | Кто отреагировал, когда и как? Были ли какие-то задержки или барьеры, препятствующие устранению инцидента? | После отправки сообщения инженеру KITT в 14:34 UTC он вышел в сеть в 14:38 и присоединился к чату для обсуждения инцидента. Однако дежурный инженер не имел достаточного опыта работы с инструментом автомасштабирования Escalator, поэтому в 14:50 было отправлено дополнительное оповещение старшему инженеру KITT, который присоединился к чату в 14:58. |
Восстановление | Опишите, как и когда была восстановлена работа сервиса. Как вы подошли к пониманию того, как можно смягчить последствия инцидента? В зависимости от конкретного сценария можно задать дополнительные вопросы, например: как можно было сократить время, прошедшее до смягчения последствий? В качестве упражнения на сообразительность ответьте на вопрос: как бы вы сократили это время вдвое? | Меры по восстановлению принимались в трех направлениях.
|
График | Предоставьте подробную хронологию инцидента с временными метками и указанием часовых поясов. Включите в график все предшествующие события, время первого проявления последствий, время обнаружения, подключение дополнительных специалистов, решения и изменения, время окончательного устранения последствий. | Часовой пояс всех временных отметок: UTC. 11:48 - завершено обновление плоскости управления K8S 1.912:46 - завершено обновление Goliath до версии 1.9, включая средство автомасштабирования кластера и инстанс планировщика BuildEng 14:20 - Build Engineering сообщает о проблеме инженеру KITT Disturbed 14:27 - KITT Disturbed начинает изучение сбоев на конкретном инстансе EC2 (ip-203-153-8-204) 14:42 - KITT Disturbed блокирует конкретный узел 14:49 - BuildEng сообщает, что проблема затрагивает несколько узлов. Обнаружено 86 проблемных инстансов, что говорит о системном характере сбоев 15:00 - KITT Disturbed предлагает переключиться на стандартный планировщик 15:34 - BuildEng сообщает о 300 неудачно отработавших подах 16:00 - BuildEng принудительно завершает все неудачные сборки с отчетами OutOfCpu 16:13 - BuildEng сообщает, что сбои не были временными и постоянно повторяются с новыми сборками. 16:30 - KITT определяет возникшие сбои как инцидент, и начинает обрабатывать их соответствующим образом. 16:36 - для облегчения проблемы KITT отключает инструмент автомасштабирования Escalator, чтобы предотвратить изъятие вычислительных ресурсов. 16:40 - KITT подтверждает, что состояние группы автомасштабирования стабилизировалось, загрузка кластера нормальная и последствия для клиентов устранены. |
Пять «почему» | Используйте этот метод определения основной причины. Начните с последствий: спросите, почему произошел инцидент и почему он имел такие последствия. Продолжайте задавать вопросы «почему», пока не доберетесь до основной причины Документируйте свои «почему» в виде списка здесь или на диаграмме, прикрепленной к задаче. |
|
Основная причина | Что явилось основной причиной? Это та вещь, которую необходимо изменить, чтобы предотвратить повторное возникновение инцидентов данного типа. | Баг <причина бага или сервис, где он обнаружился> в обработке пула подключений привел к разрывам подключений в условиях сбоя. Это наложилось на отсутствие возможности наблюдать за состоянием соединений. |
Проверка бэклога | Есть ли в вашем бэклоге задачи, выполнение которых предотвратило бы этот инцидент или существенно уменьшило бы его последствия? Если да, почему эти задачи не были выполнены? Честная оценка на этом этапе поможет проверить принятые ранее решения по приоритетам и рискам. | Конкретных задач нет. Есть известные текущие задания по улучшению типизации контекста исполнения, связанные с некоторыми стандартами (например, добавлять типы в зависимости от контекста исполнения при изменении/создании файла). Создавались заявки на исправление интеграционных тестов, но попытки их реализации пока не завершились успехом. |
Повторение | Этот инцидент (с той же основной причиной) происходил раньше? Если да, почему он произошел снова? | Та же самая основная причина привела к инцидентам HOT-13432, HOT-14932 и HOT-19452. |
Полученный опыт | Какой опыт мы получили? Обсуждаем, что прошло хорошо, что могло пройти лучше и в чем нам повезло, чтобы найти возможности улучшения. |
|
Корректирующие действия | Что мы планируем предпринять для предотвращения таких инцидентов в будущем? Кто выполнит необходимые действия и к какому сроку? Свяжите приоритетные действия с задачами. Это поможет отслеживать каждое действие. |
|
Сценарий | Непосредственная причина и действие | Основная причина | Устранение основной причины |
В сервисах команды Red Dawn в Stride не было мониторинга Datadog и оповещений для дежурных (либо они были неправильно настроены). | Участники команды не настроили мониторинг и оповещения для новых сервисов. Настроить все необходимое для этих сервисов. | Отсутствует процедура запуска новых сервисов, включающая настройку мониторинга и оповещений. | Создать процедуру запуска новых сервисов и обучить команду следовать ей. |
Stride невозможно использовать в IE 11 из-за обновления Fabric Editor, который не работает в этой версии браузера. | Обновление зависимости. Отменить обновление. | Отсутствие тестирования на кросс-браузерную совместимость. | Автоматизировать непрерывное тестирование на кросс-браузерную совместимость. |
Записи из Micros EU не попадали в сервис ведения журналов. | Роль, предоставленная Micros для отправки записей, была некорректной. Исправить роль. | Нет возможности определить, когда не работает отправка журналов из той или иной среды. | Добавить функцию мониторинга и оповещения об отсутствующих журналах для всех сред. |
Вследствие произошедшего ранее инцидента AWS узлы Confluence Vertigo исчерпали свой пул соединений с медиасервером. Это в свою очередь привело к перебоям подключения и ошибкам при доступе к мультимедийным материалам у клиентов. | Сбой AWS. Получить разбор инцидента AWS. | Баг в обработке пула подключений Confluence привел к разрывам подключений в условиях сбоя. Это наложилось на отсутствие возможности наблюдать за состоянием соединений. | Исправить баг и добавить функцию мониторинга, которая в будущем будет обнаруживать похожие ситуации, прежде чем последствия станут серьезными. |
КАТЕГОРИЯ | Определение | Что следует сделать на этот счет? |
Баг | Изменение, внесенное Atlassian в код (особый тип изменения) | Тестировать. Проводить канареечные тесты. Выполнять инкрементные развертывания и контролировать их. Использовать флаги возможностей. Обсудить это с инженером по качеству. |
Изменение | Изменение, внесенное Atlassian (не изменение кода) | Улучшить способ внесения изменений, например процессы проверки изменений или управления изменениями. Все, что написано в категории «Баг», применимо и здесь. |
Масштаб | Неудачное масштабирование (например, не учтены ограничения ресурсов или отсутствует планирование производительности) | Каковы ограничения ресурсов вашего сервиса? Осуществляется ли мониторинг, установлены ли для них оповещения? Если у вас нет плана производительности, создайте его. Если он есть, то какое дополнительное ограничение нужно принять в расчет? |
Архитектура | Несоответствие проектного решения эксплуатационным условиям | Проверить проектное решение. Нужно ли менять платформу? |
Зависимость | Сбой стороннего сервиса (не принадлежащего Atlassian) | Управляете ли вы риском стороннего сбоя? Было принято решение допустить этот риск или необходимо разработать меры для его снижения? См. раздел «Основные причины и зависимости» ниже. |
Неизвестно | Определение отсутствует (требуется действие для увеличения потенциала диагностирования) | Улучшить возможности наблюдения за своей системой, добавив ведение журналов, мониторинг, отладку и т. п. |
КАТЕГОРИЯ | Вопрос, который нужно задать | Примеры |
Исследование инцидента | «Что стало причиной этого инцидента и почему?» Ваша истинная цель — определение основных причин. | анализ журналов, создание диаграммы прохождения запроса, проверка дампов памяти |
Смягчение последствий инцидента | «Какие действия мы немедленно предприняли для решения проблемы и управления этим конкретным событием?» | возврат к предыдущей версии, отбор удачных веток, отладка конфигурации, общение с пострадавшими пользователями |
Устранение ущерба, причиненного этим инцидентом | «Как мы устранили непосредственный или косвенный ущерб от этого инцидента?» | восстановление данных, ремонт устройств, удаление искаженных маршрутов трафика |
Обнаружение инцидентов в будущем | «Как мы можем сократить время точного обнаружения подобных сбоев?» | мониторинг, оповещения, проверки достоверности ввода/вывода |
Смягчение последствий инцидентов в будущем | «Как мы можем уменьшить опасность и/или продолжительность подобных инцидентов в будущем?» «Как мы можем уменьшить процент пользователей, затрагиваемых сбоями этого типа, если они будут происходить снова?» | постепенное снижение производительности, отбрасывание некритичных результатов, отказ в открытом состоянии, дополнение текущих процессов с помощью дашбордов и инструкций, изменение процессов работы с инцидентом |
Предотвращение инцидентов в будущем | «Как мы можем предотвратить повторение такого рода сбоев?» | повышение стабильности в базе кода, более тщательные юнит-тесты, проверка ввода и устойчивость к ошибочным условиям, корректировка выделения ресурсов |
Мы также следуем советам Льюдер и Бейер в отношении формулировок, применяемых для действий по разбору инцидентов.
Формулировка действий по разбору инцидентов
В зависимости от формулировки одно и то же действие по разбору инцидента может быть легко выполнено или, наоборот, отложено на неопределенный срок из-за кажущейся неосуществимости или прокрастинации. Продуманное действие по итогам разбора инцидента должно обладать следующими свойствами.
Быть выполнимым. Формулируйте каждое действие как предложение, начинающееся с глагола. Указанное действие должно привести к полезному результату, а не процессу. Например, «Соберите список важнейших зависимостей» является хорошо сформулированным действием, а «Исследуйте зависимости» — нет.
Быть конкретным. Максимально узко определяйте область каждого действия, чтобы было ясно, что входит, а что не входит в работу.
Иметь границы. Укажите в формулировке каждого действия критерий его завершения, чтобы оно не казалось бесконечным или постоянным.
Исходный вариант | Как надо |
Исследуйте мониторинг для этого сценария. | Добавьте оповещения для всех случаев, когда этот сервис возвращает >1% ошибок. (Выполнимость.) |
Исправьте проблему, которая привела к отказу. | Реализуйте защиту от неправильного ввода почтового индекса в форме адреса пользователя. (Конкретность.) |
Убедитесь, что перед обновлением инженер проверил возможность парсинга для схемы базы данных. | Добавьте автоматическую проверку изменений схемы перед отправкой. (Ограниченность.) |
Составление графика дежурств с помощью Opsgenie
С помощью этого руководства вы научитесь настраивать график дежурств, использовать правила переадресации дежурств, настраивать оповещения о начале дежурства, а также изучите другие возможности Opsgenie.
Читать учебное руководствоИзучайте информирование об инцидентах с помощью Statuspage
В этом руководстве мы покажем, как использовать шаблоны инцидентов, чтобы наладить эффективную коммуникацию во время разрешения инцидента. Применимо ко многим видам технических сбоев.
Читать учебное руководство