【发布时间】:2021-01-28 00:59:59
【问题描述】:
我已经开始使用 KubernetesExecutor,并且我已经设置了一个带有 AWS EFS 的 PV/PVC 来为我的 dag 存储日志。我也在使用 s3 远程日志记录。
dag 完成后,所有日志记录都运行良好。但是,我希望能够查看我的作业的日志,因为它们正在运行长时间运行的作业。
当我执行到我的调度程序 pod 时,当执行程序 pod 正在运行时,由于共享 EFS,我能够看到当前正在运行的作业的 .log 文件。但是,当我cat 日志文件时,只要执行程序仍在运行,我就看不到日志。但是,一旦执行程序完成,我可以在 cat 文件和气流 UI 中看到完整的日志。
另一方面,奇怪的是,当我在 executor pod 运行时执行它,并且我 cat 共享 EFS 中完全相同的日志文件时,我能够看到正确的日志直到那个点工作,当我立即从调度程序cat 或检查 UI 时,我还可以看到直到那时的日志。
因此,当我在 executor pod 中cat 时,它似乎会导致日志以某种方式被刷新,以便它在任何地方都可用。为什么日志没有定期刷新?
这是我正在设置的配置变量,请注意这些环境变量是在我的 webserver/scheduler 和 executor pod 中设置的:
# ----------------------
# 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
我的日志配置看起来像问题here中的配置
我认为这可能是一个 python 缓冲问题,所以添加了PYTHONUNBUFFERED=1,但这并没有帮助。无论我使用PythonOperator 还是BashOperator,都会发生这种情况
K8sExecutors 日志在运行时是否不可用?仅在那之后?还是有一些我必须缺少的配置?
【问题讨论】:
标签: logging kubernetes airflow kubernetesexecutor