Airflow KubernetesExecutor, журналы не отображаются в пользовательском интерфейсе до завершения выполнения модулей исполнителя
Я начал использовать KubernetesExecutor и настроил PV / PVC с AWS EFS для хранения журналов для моих дагов. Я также использую удаленное ведение журнала s3.
Все журналы работают отлично после завершения дага. Однако я хочу иметь возможность видеть журналы моих заданий, поскольку они выполняются в течение длительного времени.
Когда я запускаю свой модуль планировщика, пока работает модуль исполнителя, я могу видеть
Как ни странно, с другой стороны, когда я запускаю модуль-исполнитель во время его работы и использую тот же файл журнала в общей EFS, я могу видеть правильные журналы до этого момента в задании, и когда я непосредственно из планировщика или проверить пользовательский интерфейс, я также могу просмотреть журналы до этого момента.
Кажется, когда я
Вот переменные конфигурации, которые я устанавливаю, обратите внимание, что эти переменные env устанавливаются в моих модулях веб-сервера / планировщика и исполнителя:
# ----------------------
# For Main Airflow Pod (Webserver & Scheduler)
# ----------------------
export PYTHONPATH=$HOME
export AIRFLOW_HOME=$HOME
export PYTHONUNBUFFERED=1
# Core configs
export AIRFLOW__CORE__LOAD_EXAMPLES=False
export AIRFLOW__CORE__SQL_ALCHEMY_CONN=${AIRFLOW__CORE__SQL_ALCHEMY_CONN:-postgresql://$DB_USER:$DB_PASSWORD@$DB_HOST:5432/$DB_NAME}
export AIRFLOW__CORE__FERNET_KEY=$FERNET_KEY
export AIRFLOW__CORE__DAGS_FOLDER=$AIRFLOW_HOME/git/dags/$PROVIDER-$ENV/
# Logging configs
export AIRFLOW__LOGGING__BASE_LOG_FOLDER=$AIRFLOW_HOME/logs/
export AIRFLOW__LOGGING__REMOTE_LOGGING=True
export AIRFLOW__LOGGING__REMOTE_LOG_CONN_ID=aws_default
export AIRFLOW__LOGGING__REMOTE_BASE_LOG_FOLDER=s3://path-to-bucket/airflow_logs
export AIRFLOW__LOGGING__TASK_LOG_READER=s3.task
export AIRFLOW__LOGGING__LOGGING_CONFIG_CLASS=config.logging_config.LOGGING_CONFIG
# Webserver configs
export AIRFLOW__WEBSERVER__COOKIE_SAMESITE=None
Моя конфигурация ведения журнала выглядит так, как в вопросе здесь
Я думал, что это может быть проблема с буферизацией Python, поэтому добавил
BashOperator
Неужели журналы K8sExecutors просто не будут доступны во время их выполнения? Только после? Или мне не хватает какой-то конфигурации?
2 ответа
У меня была такая же проблема, и это то, что мне помогло - стоит проверить их на своей стороне
-
PYTHONUNBUFFERED=1
недостаточно, но необходимо просматривать логи в реальном времени. Пожалуйста, сохраните это - смонтировать EFS в сети, в планировщике и в шаблоне pod_template (исполнитель).
- Ваш опыт с завершением файла журнала после завершения задачи заставляет меня задаться вопросом, есть ли у PVC, который вы используете для журналов, ReadWriteMany accessMode
- Идентичны ли пути в разных капсулах? Включают ли они полный формат задачи, например
efs/logs/dag_that_executes_via_KubernetesPodOperator/task1/2021-09-21T19\:00\:21.894859+00\:00/1.log
? Спрашиваю, потому что до того, как я подключил EFS во всех местах (планировщик, веб, pod_template), я мог получить доступ только к журналам исполнителей, которые не включают имя задачи и время задачи - есть папка журналов EFS, принадлежащая воздушному потоку (для меня uid 50000, потому что, возможно, придется подготовить это из другого места), корень группы, режим 755
- не настроен AIRFLOW__LOGGING__LOGGING_CONFIG_CLASS. Прежде чем вводить настраиваемую конфигурацию ведения журнала, постарайтесь, чтобы все работало как можно более ванильно.
Если у вас настроено удаленное ведение журнала, я понимаю, что после завершения задачи в первой строке пользовательского интерфейса будет указано
Reading remote log from
, но что вам говорит первая строка, когда задача выполняется?
reading remote
или упоминание об использовании локального файла журнала?
- Если там написано об удаленном доступе, это будет означать, что у вас не везде подключена EFS.
- Если он говорит о локальном, я бы проверил ваши настройки EFS (readwritemany), а также владение каталогом и режим
В этом случае воздушный поток указано работает, какв документации :
Журналы появляются в вашей DFS только после завершения задачи.