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