Но одним лишь remote logging мы не ограничены. Так как Apache Airflow использует стандартный пакет logging для журналирования, то у вас есть возможность расширить его возможности на своё усмотрение. Если вы не знакомы с logging, то рекомендую мою статью для ознакомления перед чтением этого раздела. Далее мы разберём как выглядит конфигурация для Airflow logging, и напишем свой Handler для отправки ошибок в телеграм.
Шаблон из которого формируется logging config лежит тут. Это стандартный словарь для конфигурирования пакета logging в Python. Apache Airflow позволяет указать свой конфиг, переопределив опцию logging_config_class
. Для неё необходимо прописать путь до переменной, хранящей словарь с logging-конфигурацией. Я не рекомендую перезаписывать существующие настройки logging без надобности, т.к. это может привести к некорректной работе системы журналирования Airflow. Вместо перезаписи будем расширять.
Представим, что вам нужно оперативно получать всю информацию об ошибках в тасках в телеграм. Есть несколько способов решить эту задачу:
on_failure_callback
Неудобство callback-функции в том, что нужно не забыть прописать её везде. Самостоятельный контроль и отправка ошибок в телеграм неудобен для готовых non-Python операторов. А вот создание своего Handler-класса кажется универсальным решением, которое будет работать для всех DAG-классов и операторов, входящих в них.
В Apache Airflow есть несколько логеров:
airflow.task
это то, что нам нужно. Его использует класс TaskInstance для записи логов обо всех операторах, выполняющихся в DAG-объекте.
airflow.processor
используется при парсинге DAG из python-модулей, за это отвечает планировщик.
flask_appbuilder
это логер самого веб-приложения, построенного на веб-фреймворке Flask.
root
это корневой логер, который пишет в stdout.