Перейти к содержимому
Документация

Руководство: оповещения для пайплайнов

Пайплайн, упавший в три часа ночи, должен кому-то об этом сообщить — и желательно сначала программе. В этом руководстве мы создадим правило оповещения для пайплайна, отправим его в Slack, убедимся, что оно срабатывает, и пойдём дальше: вебхуки с собственным содержимым, функция, которая реагирует автоматически, и правило, которое зовёт человека, когда запуск остановился в ожидании его решения.

Что такое правило алерта#

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

  • Запуски функций — вызовы функций, неважно, вызвали их напрямую, через шлюз или из пайплайна.
  • Запуски шагов пайплайна — каждый шаг пайплайна по мере выполнения, так что можно выбрать пайплайн по имени и реагировать на падение или слишком долгую работу любого его шага.
  • Проверка человеком (пауза до решения) — срабатывает, когда запуск останавливается на шаге human-in-the-loop; так согласующие узнают, что нужно их решение.

Куда уходят алерты#

  • Slack: URL incoming-webhook канала. Сообщение показывает имя правила, пайплайн или функцию, статус и краткое описание.
  • Вебхук: ваш публичный HTTPS-адрес с POST или PUT, необязательными заголовками и выбором содержимого: сам объект оповещения, JSON с приложенной трассировкой или произвольное тело с подстановками. В форме консоли этого канала пока нет — добавьте его в правило через API (/api/observability/alerts/rules).
  • Функция: вызывает одну из ваших функций с алертом в качестве события. Всё, что умеет функция — перезапустить, эскалировать, завести тикет, — становится реакцией.
  • Пайплайн: запускает пайплайн с алертом на входе — для реакций в несколько шагов со своими согласованиями.

1. Создаём правило для пайплайна#

Откройте Алерты в боковой панели, нажмите Создать правило, выберите Функции и пайплайны и нажмите Продолжить. Заполняйте форму сверху вниз:

  1. Название правила: что-то, что коллега поймёт в Slack, например Nightly ETL failed. В поле Включено оставьте значение Включено.
  2. За чем должно следить это правило? — Запуски шагов пайплайна.
  3. Целевые пайплайны: выберите пайплайн. Пустой список означает все пайплайны рабочего пространства — хорошее умолчание для правила «на всё».
  4. Условия: нажмите Добавить и начните с Статус · Равно · FAILED. Другие полезные: Длительность (мс) с оператором Больше и числом миллисекунд для зависающих шагов; Сообщение об ошибке с оператором Содержит и фразой, чтобы отдельно маршрутизировать один класс ошибок; Повторные сбои с количеством и окном, чтобы правило игнорировало единичный нестабильный запуск и срабатывало на третьем падении за десять минут. Условие по шаблону лога — регулярное выражение по логам шага — доступно через API.
  5. Каналы: нажмите Добавить, выберите Slack и вставьте URL incoming-webhook канала, куда должен прилетать алерт. Добавьте второй канал, если хотите, чтобы функция или пайплайн тоже реагировали.
  6. Пауза (мс): сколько миллисекунд правило молчит после срабатывания. Пять минут (300000) — разумный старт для правила о падениях.

Нажмите Создать правило. Оно начинает следить за следующим запуском сразу; ничего разворачивать заново не нужно.

2. Заставляем сработать#

Самая честная проверка — настоящее падение. Откройте пайплайн, нажмите Запустить вручную и передайте payload, от которого один шаг бросит ошибку, например без обязательного поля. Запуск краснеет, и через несколько секунд в Slack-канал приходит сообщение с именем правила, пайплайном, статусом шага и кратким описанием ошибки. Запустите ещё раз, пока не истекла пауза: второго сообщения нет, как и задумано.

Всё, что сработало, лежит в разделе Алерты → История: правило, запуск, из которого пришёл алерт, серьёзность и каналы, куда он ушёл. Id запуска ведёт на выполнение с его логами, так что путь от сообщения в Slack до упавшей строки — два клика.

3. Payload вебхука#

Канал-вебхук отправляет запись алерта как JSON. С шаблоном default тело — сам алерт; шаблон json добавляет объект trace с id запуска, именем функции, статусом и ошибкой. Его форма:

webhook bodyjson
{
  "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 — в канал, который люди действительно читают.
  • Одно правило «на всё» и немного узких. Правило о сбоях на всё рабочее пространство с большим интервалом тишины ловит всё; узкие правила с условием по тексту ошибки добавляйте для случаев, которым нужна другая реакция.
  • Выключайте, а не удаляйте. Действие Выключить в списке правил глушит правило на время миграции или известного сбоя и сохраняет его историю и настройки до возвращения.