Раздел 26 · Data Engineering

Мониторинг и обзор инструментов

junior~15 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Пайплайн «Гонца» собран и работает каждую ночь. Хорошая новость: большую часть ночей ты о нём не вспомнишь. Плохая: однажды он упадёт так, что ни повторы, ни проверки не спасут, например приложение переименует колонку в выгрузке. Важно узнать об этом раньше Отто, понять, что сломалось, починить и перезапустить ровно то, что нужно. Это последний урок блока, и он про то, как присматривать за пайплайном, и про то, чем ещё, кроме Airflow, пайплайны запускают.

Пульт дежурного

На электростанции у дежурного пульт с лампочками. Пока всё зелёное, он пьёт чай. Загорелась красная, и пульт сразу говорит, какой узел, когда и почему. У дежурного есть инструкция: что проверить, кого будить, как перезапустить узел, не останавливая всю станцию.

Для пайплайна нужно то же самое: лампочки, сигнал тревоги и инструкция.

Что видно в Airflow

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

Логи задачи. У каждой попытки каждой задачи свой лог: всё, что задача напечатала, и полный текст исключения. Красная клетка в сетке ведёт в лог.

Длительность. Airflow помнит, сколько шла каждая задача. Если выгрузка годами шла пять минут, а неделю назад стала идти сорок, это повод разобраться до того, как пайплайн перестанет укладываться в ночь.

Сигнал тревоги

Сетку кто-то должен открыть. Чтобы о сбое узнавали сразу, задачам и DAG вешают колбэки: функции, которые Airflow вызывает при событии.

def tell_on_call(context):
    ti = context["ti"]
    send_message(
        f"Упала {ti.task_id} в {context['dag'].dag_id} за {context['ds']}, "
        f"попытка {ti.try_number}"
    )

with DAG(
    dag_id="gonets_daily",
    default_args={"retries": 2, "on_failure_callback": tell_on_call},
    ...
):

on_failure_callback срабатывает, когда задача упала окончательно, после всех повторов. Есть ещё on_retry_callback для каждого повтора и on_success_callback. Колбэк не задача, он не появляется в графе и не меняет итог запуска, поэтому не попадает в ловушку с листьями из урока про зависимости.

Отдельная беда: пайплайн не упал, но идёт слишком долго. В Airflow 2 для этого были SLA, в Airflow 3 их убрали, а вместо них появились Deadline Alerts: DAG описывает, к какому сроку запуск должен закончиться, а если не успел, вызывается колбэк.

урок из курса

Урок из курса «Data Engineering». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.