如何将气流的调度程序日志输出到标准输出或S3 / GCS



我们正在使用带有docker compose的puckel/Airflow docker镜像运行Airflow集群。Airflow的调度程序容器将其日志输出到/usr/local/airflow/logs/scheduler

问题是日志文件没有旋转,磁盘使用量增加,直到磁盘满为止。用于清理日志目录的Dag可用,但在工作节点上运行的Dag和调度程序容器上的日志目录未被清理。

我正在寻找将调度程序日志输出到stdout或S3/GCS存储桶的方法,但无法找到。是否有将调度程序日志输出到stdout或S3/GGCS存储桶?

最后,我设法将调度程序的日志输出到stdout。

在这里你可以找到如何使用自定义气流记录器。github提供了默认的日志配置。

你要做的就是

(1( 为${AIRFLOW_HOME}/config/log_config.py创建自定义记录器类。


# Setting processor (scheduler, etc..) logs output to stdout
# Referring https://www.astronomer.io/guides/logging
# This file is created following https://airflow.apache.org/docs/apache-airflow/2.0.0/logging-monitoring/logging-tasks.html#advanced-configuration
from copy import deepcopy
from airflow.config_templates.airflow_local_settings import DEFAULT_LOGGING_CONFIG
import sys
LOGGING_CONFIG = deepcopy(DEFAULT_LOGGING_CONFIG)
LOGGING_CONFIG["handlers"]["processor"] = {
"class": "logging.StreamHandler",
"formatter": "airflow",
"stream": sys.stdout,
}

(2( 在airflow.cfg中将logging_config_class属性设置为config.log_config.LOGGING_CONFIG

logging_config_class = config.log_config.LOGGING_CONFIG

(3( [可选]将$AIRFLOW_HOME添加到PYTHONPATH环境中。

export "${PYTHONPATH}:~"
  • 实际上,只要python能够加载包,就可以将logging_config_class的路径设置为任何路径
  • 将handler.processor设置为airflow.utils.log.logging_mixin.RedirectStdHandler对我不起作用。它占用了太多内存

airflow.cfg中的remote_logging=True是关键。有关详细步骤,请查看此处的线程。

您可以使用以下内容扩展图像,也可以在airflow.cfg 中进行扩展

ENV AIRFLOW__LOGGING__REMOTE_LOGGING=True
ENV AIRFLOW__LOGGING__REMOTE_LOG_CONN_ID=gcp_conn_id
ENV AIRFLOW__LOGGING__REMOTE_BASE_LOG_FOLDER=gs://bucket_name/AIRFLOW_LOGS

gcp_conn_id应该具有在GCS 中创建/删除对象的正确权限

最新更新