Документация/Продакшен
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 повторений;
- низкая — всё остальное.
Отдельно модуль проверяет, не задевает ли инцидент одну из трёх чувствительных областей: платежи, безопасность или данные пользователей. Ищет он их по словам в эндпоинтах, сообщениях, файлах стека и алертах.
Инцидент низкой или средней важности, который этих областей не задевает, агент может взять сам. Если важность высокая или задета хоть одна область, инцидент «ждёт решения»: агент может его читать и исследовать, но привязать исправление не может. Тогда выберите «Откатить», «Отдать агенту» или «Исправляет человек» — у последнего варианта есть поле «Кто». Откатываете вы сами: команду отката приложение показывает в инциденте под вариантом «Откатить». Если команда для этой выкатки неизвестна, там так и написано.
Как пользоваться
- Откройте инцидент. В нём есть «Гипотеза причины» и уверенность в ней, «Изменения Deploy», «Ход событий», «Как воспроизвести», «Критерий исправления», стек, логи запроса, «Профиль до и после Deploy» и «Чего в контексте нет». Deploy здесь — выкатка, и «Изменения Deploy» показывают, какие группы изменений лежат на пути сбоя. «Профиль до и после Deploy» сравнивает два профиля, сохранённых в Profiler до выкатки и после; если таких профилей нет, нет и блока.
- Нажмите «Поручить агенту». Откроется чат, в котором агент сделал коммит подозреваемой выкатки, а если такого нет — чат, в котором агент её выкатил. Если нет и его, откроется текущий чат. В поле ввода появится просьба: прочитать инцидент, воспроизвести сбой, исправить его с регрессионным тестом и привязать исправление.
- Агент привязывает исправление: ссылку на запрос на слияние, ветку или коммит. Инцидент пока остаётся открытым.
- Когда исправление выкатят, нажмите «Production вернулся к норме?». Продакшен должен продержаться в норме 30 минут после этой выкатки.
- Проверка ответит одним из вариантов: «Production в норме — инцидент закрыт», «Не восстановилось», «Тихо, но окно проверки ещё не прошло», «Исправления нет в production», «Production спросить не удалось — инцидент остаётся открытым».
Если сигнал — не проблема, нажмите «Это не проблема», напишите причину и подтвердите кнопкой «Отклонить». Инцидент получит статус «Отклонён» и уйдёт из открытых. По той же ошибке новый инцидент откроется, только если она станет случаться заметно чаще обычного (сигнал «Рост частоты»). Ни «Новая ошибка», ни «Повтор: …» по ней уже не откроются.
Кнопка «Собрать контекст заново» обновляет данные инцидента.
Поды. «Приложить состояние подов» работает, только если кластер открыт агенту: приложение берёт кластер и namespace, открытые в Kubernetes. В инцидент попадают имя пода, фаза, готовность и число перезапусков; логи и переменные окружения туда не попадают.
Разбор
Когда проверка закрывает инцидент, модуль один раз пишет разбор: «Что случилось», «Причина», «Что исправлено» и «Какой тест теперь это ловит». Тесты модуль находит в изменениях исправления, поэтому его ветка или коммит должны быть в вашем локальном репозитории.
Агент и инциденты
Включите модуль «Incidents» в «Настройки → Модули». Если Observe ещё выключен, приложение предложит включить оба. Изменение подействует в новых чатах.
Агент может прочитать инцидент с задачей и всем контекстом, получить список открытых инцидентов, привязать исправление и запросить проверку продакшена. Подтверждать эти действия не нужно. Агент не может закрыть инцидент без проверки, отклонить его или привязать исправление к инциденту, который ждёт вашего решения. Откат он только предлагает. Сообщения, логи и запросы из продакшена агент получает как данные и указаниями для себя их не считает.
Ограничения
- В фоне модуль за продакшеном не следит: инциденты обновляются раз в минуту, пока открыта вкладка «Incidents», и ещё когда агент запрашивает список. О новом инциденте приложение не уведомляет.
- Чувствительные области модуль находит по названиям, поэтому в сервисе с нейтральными названиями он их не заметит.
- Подозреваемую группу изменений модуль ищет по файлам, функциям и маршрутам. Косвенную причину (поменяли настройку — упал другой модуль) он не заподозрит. Коммит выкатки должен быть в локальном репозитории.
- Для проекта на сервере по SSH модуль собирает и хранит инциденты на этом сервере.
Какие данные куда уходят
Инциденты хранятся на этом компьютере, вне проекта. Перед записью модуль заменяет идентификаторы пользователей псевдонимами и убирает из текста почту, телефоны, IP-адреса, номера карт, пароли и ключи. Модуль только читает ваш мониторинг и ничего не отправляет на серверы DevMachine. Инцидент, который прочитал агент, становится частью запроса к модели и уходит к ней через сервер DevMachine. Подробнее — на странице «Данные и приватность».
Что дальше
Обновлено · Нашли неточность? Напишите на support@devmachine.ai или в Telegram.
