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