Документация

Документация/Продакшен

Incidents: инциденты продакшена

Как сбои продакшена становятся инцидентами с готовой задачей для агента или для вас и почему закрыть инцидент может только проверка продакшена.

Incidents собирает сигналы продакшена в инциденты: на одну проблему — один инцидент, а у инцидента ровно одна задача с гипотезой причины, шагами воспроизведения и критерием исправления. Простой инцидент можно сразу отдать агенту, серьёзный сначала ждёт вашего решения. Закрывает инцидент только проверка продакшена после выкатки исправления, и тогда же модуль пишет разбор. Сам модуль ничего не выкатывает и не откатывает.

Что нужно

  • Подключённые источники Observe: трекер ошибок, метрики, трейсы, логи. Incidents читает продакшен через них, так что отдельно почти ничего настраивать не нужно.
  • Модуль «Incidents» — только если с инцидентами будет работать агент: вкладка «Incidents» доступна и без него. Модуль — набор инструментов, инструкций и навыков агента для одной области, подробнее — на странице Модули. Сам модуль «Incidents» без модуля «Observe» не работает.

Как открыть

Инциденты собраны на вкладке «Incidents» вида «Observe». Откройте Observe: нажмите кнопку «Другие инструменты» в полосе заголовка окна, сразу после кнопок инструментов, и выберите «Observe». Потом перейдите на эту вкладку. Или наберите в поле чата /incidents — Observe откроется сразу на ней. Отдельной кнопки в полосе заголовка нет.

Над списком — фильтры «Открытые», «Ждут решения» со счётчиком и «Все», а ещё кнопка «Спросить production заново». Список отсортирован по влиянию.

Откуда берутся инциденты

СигналКогда открывает инцидент
«Новая ошибка»в трекере появилась ошибка, которой раньше не было
«Рост частоты»известная ошибка за последние 10 минут случается заметно чаще обычного: втрое чаще суточной нормы и не реже 12 раз в час
«Алерт»на обзоре Observe появилось отклонение уровня «проблема» или сработал алерт брокера из Queues
«Откат»версию сняли в первые три часа после выкатки или Rollout откатил выкатку
«Пометка оператора»вы нажали «Отметить инцидент» на графике или ошибке в Observe либо на поде в Kubernetes

Одна и та же ошибка не плодит инциденты: модуль склеивает их по типу ошибки и верхним кадрам стека в вашем коде. Если ошибка вернулась в течение 14 дней после закрытия, откроется новый инцидент «Повтор: …».

Примечание

Из приложения пока нельзя подключить к инцидентам алерты Alertmanager и нормы SLO.

Кто исправляет

У каждого инцидента есть важность:

  • высокая — критический алерт, 50 и больше затронутых пользователей или 600 и больше ошибок в час;
  • средняя — предупреждающий алерт, от 5 пользователей, рост частоты, от 20 повторений;
  • низкая — всё остальное.

Отдельно модуль проверяет, не задевает ли инцидент одну из трёх чувствительных областей: платежи, безопасность или данные пользователей. Ищет он их по словам в эндпоинтах, сообщениях, файлах стека и алертах.

Инцидент низкой или средней важности, который этих областей не задевает, агент может взять сам. Если важность высокая или задета хоть одна область, инцидент «ждёт решения»: агент может его читать и исследовать, но привязать исправление не может. Тогда выберите «Откатить», «Отдать агенту» или «Исправляет человек» — у последнего варианта есть поле «Кто». Откатываете вы сами: команду отката приложение показывает в инциденте под вариантом «Откатить». Если команда для этой выкатки неизвестна, там так и написано.

Как пользоваться

  1. Откройте инцидент. В нём есть «Гипотеза причины» и уверенность в ней, «Изменения Deploy», «Ход событий», «Как воспроизвести», «Критерий исправления», стек, логи запроса, «Профиль до и после Deploy» и «Чего в контексте нет». Deploy здесь — выкатка, и «Изменения Deploy» показывают, какие группы изменений лежат на пути сбоя. «Профиль до и после Deploy» сравнивает два профиля, сохранённых в Profiler до выкатки и после; если таких профилей нет, нет и блока.
  2. Нажмите «Поручить агенту». Откроется чат, в котором агент сделал коммит подозреваемой выкатки, а если такого нет — чат, в котором агент её выкатил. Если нет и его, откроется текущий чат. В поле ввода появится просьба: прочитать инцидент, воспроизвести сбой, исправить его с регрессионным тестом и привязать исправление.
  3. Агент привязывает исправление: ссылку на запрос на слияние, ветку или коммит. Инцидент пока остаётся открытым.
  4. Когда исправление выкатят, нажмите «Production вернулся к норме?». Продакшен должен продержаться в норме 30 минут после этой выкатки.
  5. Проверка ответит одним из вариантов: «Production в норме — инцидент закрыт», «Не восстановилось», «Тихо, но окно проверки ещё не прошло», «Исправления нет в production», «Production спросить не удалось — инцидент остаётся открытым».

Если сигнал — не проблема, нажмите «Это не проблема», напишите причину и подтвердите кнопкой «Отклонить». Инцидент получит статус «Отклонён» и уйдёт из открытых. По той же ошибке новый инцидент откроется, только если она станет случаться заметно чаще обычного (сигнал «Рост частоты»). Ни «Новая ошибка», ни «Повтор: …» по ней уже не откроются.

Кнопка «Собрать контекст заново» обновляет данные инцидента.

Поды. «Приложить состояние подов» работает, только если кластер открыт агенту: приложение берёт кластер и namespace, открытые в Kubernetes. В инцидент попадают имя пода, фаза, готовность и число перезапусков; логи и переменные окружения туда не попадают.

Разбор

Когда проверка закрывает инцидент, модуль один раз пишет разбор: «Что случилось», «Причина», «Что исправлено» и «Какой тест теперь это ловит». Тесты модуль находит в изменениях исправления, поэтому его ветка или коммит должны быть в вашем локальном репозитории.

Агент и инциденты

Включите модуль «Incidents» в «Настройки → Модули». Если Observe ещё выключен, приложение предложит включить оба. Изменение подействует в новых чатах.

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

Ограничения

  • В фоне модуль за продакшеном не следит: инциденты обновляются раз в минуту, пока открыта вкладка «Incidents», и ещё когда агент запрашивает список. О новом инциденте приложение не уведомляет.
  • Чувствительные области модуль находит по названиям, поэтому в сервисе с нейтральными названиями он их не заметит.
  • Подозреваемую группу изменений модуль ищет по файлам, функциям и маршрутам. Косвенную причину (поменяли настройку — упал другой модуль) он не заподозрит. Коммит выкатки должен быть в локальном репозитории.
  • Для проекта на сервере по SSH модуль собирает и хранит инциденты на этом сервере.

Какие данные куда уходят

Инциденты хранятся на этом компьютере, вне проекта. Перед записью модуль заменяет идентификаторы пользователей псевдонимами и убирает из текста почту, телефоны, IP-адреса, номера карт, пароли и ключи. Модуль только читает ваш мониторинг и ничего не отправляет на серверы DevMachine. Инцидент, который прочитал агент, становится частью запроса к модели и уходит к ней через сервер DevMachine. Подробнее — на странице «Данные и приватность».

Что дальше

Обновлено · Нашли неточность? Напишите на support@devmachine.ai или в Telegram.