Пайплайн, упавший в три часа ночи, должен кому-то об этом сообщить — и желательно сначала программе. В этом руководстве мы создадим правило оповещения для пайплайна, отправим его в Slack, убедимся, что оно срабатывает, и пойдём дальше: вебхуки с собственным содержимым, функция, которая реагирует автоматически, и правило, которое зовёт человека, когда запуск остановился в ожидании его решения.
Что такое правило алерта#
Правило наблюдает за запусками одного вида, фильтрует их по условиям и, когда запуск подходит, отправляет алерт в один или несколько каналов. Пауза после срабатывания (cooldown) не даёт тому же правилу сработать повторно какое-то время, так что шаг, падающий в цикле, даёт одно сообщение, а не сотню. Правила находятся в разделе Алерты → Правила боковой панели и бывают трёх видов:
- Запуски функций — вызовы функций, неважно, вызвали их напрямую, через шлюз или из пайплайна.
- Запуски шагов пайплайна — каждый шаг пайплайна по мере выполнения, так что можно выбрать пайплайн по имени и реагировать на падение или слишком долгую работу любого его шага.
- Проверка человеком (пауза до решения) — срабатывает, когда запуск останавливается на шаге human-in-the-loop; так согласующие узнают, что нужно их решение.
Куда уходят алерты#
- Slack: URL incoming-webhook канала. Сообщение показывает имя правила, пайплайн или функцию, статус и краткое описание.
- Вебхук: ваш публичный HTTPS-адрес с POST или PUT, необязательными заголовками и выбором содержимого: сам объект оповещения, JSON с приложенной трассировкой или произвольное тело с подстановками. В форме консоли этого канала пока нет — добавьте его в правило через API (
/api/observability/alerts/rules). - Функция: вызывает одну из ваших функций с алертом в качестве события. Всё, что умеет функция — перезапустить, эскалировать, завести тикет, — становится реакцией.
- Пайплайн: запускает пайплайн с алертом на входе — для реакций в несколько шагов со своими согласованиями.
1. Создаём правило для пайплайна#
Откройте Алерты в боковой панели, нажмите Создать правило, выберите Функции и пайплайны и нажмите Продолжить. Заполняйте форму сверху вниз:
- Название правила: что-то, что коллега поймёт в Slack, например
Nightly ETL failed. В поле Включено оставьте значение Включено. - За чем должно следить это правило? — Запуски шагов пайплайна.
- Целевые пайплайны: выберите пайплайн. Пустой список означает все пайплайны рабочего пространства — хорошее умолчание для правила «на всё».
- Условия: нажмите Добавить и начните с Статус · Равно ·
FAILED. Другие полезные: Длительность (мс) с оператором Больше и числом миллисекунд для зависающих шагов; Сообщение об ошибке с оператором Содержит и фразой, чтобы отдельно маршрутизировать один класс ошибок; Повторные сбои с количеством и окном, чтобы правило игнорировало единичный нестабильный запуск и срабатывало на третьем падении за десять минут. Условие по шаблону лога — регулярное выражение по логам шага — доступно через API. - Каналы: нажмите Добавить, выберите Slack и вставьте URL incoming-webhook канала, куда должен прилетать алерт. Добавьте второй канал, если хотите, чтобы функция или пайплайн тоже реагировали.
- Пауза (мс): сколько миллисекунд правило молчит после срабатывания. Пять минут (
300000) — разумный старт для правила о падениях.
Нажмите Создать правило. Оно начинает следить за следующим запуском сразу; ничего разворачивать заново не нужно.
2. Заставляем сработать#
Самая честная проверка — настоящее падение. Откройте пайплайн, нажмите Запустить вручную и передайте payload, от которого один шаг бросит ошибку, например без обязательного поля. Запуск краснеет, и через несколько секунд в Slack-канал приходит сообщение с именем правила, пайплайном, статусом шага и кратким описанием ошибки. Запустите ещё раз, пока не истекла пауза: второго сообщения нет, как и задумано.
Всё, что сработало, лежит в разделе Алерты → История: правило, запуск, из которого пришёл алерт, серьёзность и каналы, куда он ушёл. Id запуска ведёт на выполнение с его логами, так что путь от сообщения в Slack до упавшей строки — два клика.
3. Payload вебхука#
Канал-вебхук отправляет запись алерта как JSON. С шаблоном default тело — сам алерт; шаблон json добавляет объект trace с id запуска, именем функции, статусом и ошибкой. Его форма:
{ "id": "…", "ruleId": "…", "ruleName": "Nightly ETL failed", "runId": "…", "functionId": "…", "functionName": "load-warehouse", "type": "status", "conditionTypes": ["status"], "severity": "error", "message": "…what matched, in words…", "details": { "…": "…" }, "triggeredAt": "2026-09-05T02:00:03.000Z", "channels": ["webhook"] }
Шаблон custom позволяет написать тело самому с плейсхолдерами вроде {{alert.ruleName}}, {{alert.message}} и {{trace.status}} — так подгоняют формат под то, что уже ожидает инцидент-система или чат-бот. Для аутентификации добавьте заголовки. URL должен быть публичным HTTPS; приватные адреса отклоняются.
4. Автоматизируем реакцию#
Уведомление — это только начало. Канал Функция вызывает одну из ваших функций с оповещением в качестве события: упавший импорт может перезапустить себя с пачкой поменьше, а зависший шаг — отмениться и встать в очередь заново. Канал Пайплайн запускает по оповещению целый пайплайн — правильный выбор, когда реакции нужны несколько шагов, собственные повторные попытки или решение человека перед чем-то необратимым.
5. Алерты, когда запуск ждёт человека#
Пайплайн с шагом human-in-the-loop стоит, пока кто-то не одобрит, не отклонит или не ответит. Никто не смотрит в раздел согласований весь день, поэтому создайте второе правило вида Проверка человеком (пауза до решения), при желании сузив его полем Тип проверки человеком, и отправьте его в Slack-канал согласующих. Сообщение содержит запуск и ссылку на раздел согласований, а запуск продолжается в момент их действия. Как работают такие шаги и как их собирать — тема следующего руководства.
Хорошие привычки#
- Подбирайте паузу под пайплайн. Расписанию, которое запускается каждую минуту, нужна пауза длиннее, чем ночной задаче, иначе одно сломанное развёртывание превращается в стену сообщений.
- Маршрутизируйте по серьёзности. Алерты несут severity от info до critical. Предупреждения направляйте в вебхук, который только логирует, а critical — в канал, который люди действительно читают.
- Одно правило «на всё» и немного узких. Правило о сбоях на всё рабочее пространство с большим интервалом тишины ловит всё; узкие правила с условием по тексту ошибки добавляйте для случаев, которым нужна другая реакция.
- Выключайте, а не удаляйте. Действие Выключить в списке правил глушит правило на время миграции или известного сбоя и сохраняет его историю и настройки до возвращения.