You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Airflow 1.10.9开启remoteLogging后本地日志不写入的解决办法咨询

解决Airflow 1.10.9开启Remote Logging后同时保留本地日志的问题

在Airflow 1.10.9里,默认开启remoteLogging后,日志会只输出到远程端(你的Logstash),本地日志路径就不再写入了——这是官方默认配置的行为。要实现同时写入本地文件夹和Logstash,你需要自定义日志配置,具体步骤如下:

步骤1:创建自定义日志配置文件

在Airflow的PYTHONPATH可访问的目录下(比如$AIRFLOW_HOME/dags或$AIRFLOW_HOME/plugins),创建一个名为custom_logging.py的文件,内容如下:

import os
from airflow.config_templates.airflow_local_settings import DEFAULT_LOGGING_CONFIG
from airflow.contrib.log.logstash_handler import LogstashHandler
from logging.handlers import RotatingFileHandler

def get_custom_logging_config():
    # 复制默认日志配置作为基础
    config = DEFAULT_LOGGING_CONFIG.copy()
    
    # 获取Airflow本地日志根目录
    base_log_folder = os.path.join(os.environ.get('AIRFLOW_HOME', '/usr/local/airflow'), 'logs')
    
    # 配置本地日志处理器:使用RotatingFileHandler实现日志轮转
    local_file_handler = {
        'class': 'logging.handlers.RotatingFileHandler',
        'formatter': 'airflow.task',
        'filename': os.path.join(base_log_folder, '{{ ti.dag_id }}', '{{ ti.task_id }}', '{{ ts }}.log'),
        'maxBytes': 104857600,  # 单日志文件最大100MB
        'backupCount': 30  # 保留最近30个日志文件
    }
    
    # 将本地处理器添加到任务日志的处理器列表中
    task_logger = config['loggers']['airflow.task']
    if 'handlers' in task_logger:
        # 保留原有的Logstash处理器,追加本地处理器
        task_logger['handlers'].append('local_file_handler')
    else:
        task_logger['handlers'] = ['local_file_handler']
    
    # 把本地处理器注册到全局配置的handlers字典里
    config['handlers']['local_file_handler'] = local_file_handler
    
    # 如果你需要给其他日志器(比如airflow本身的日志)也添加本地输出,可以按照上面的逻辑修改config['loggers']['airflow']
    return config

步骤2:修改airflow.cfg配置

打开你的airflow.cfg文件,做以下修改:

  • 确保remoteLogging = True已经开启
  • 添加/修改logging_config_class配置项,指向我们刚才的自定义配置函数:
    logging_config_class = custom_logging.get_custom_logging_config
    
  • 确认你的Logstash相关配置(remote_log_host、remote_log_port、remote_log_prefix等)已经正确设置

步骤3:重启Airflow服务

重启Airflow的webserver、scheduler以及worker(如果使用CeleryExecutor),让新的日志配置生效:

# 重启webserver
airflow webserver -D
# 重启scheduler
airflow scheduler -D
# 如果是Celery worker,重启worker
airflow worker -D

注意事项

  • 确保custom_logging.py的文件权限正确,Airflow进程拥有读取权限
  • 测试时可以运行一个简单的测试DAG,检查本地日志文件夹(比如$AIRFLOW_HOME/logs/你的dag_id/你的task_id/)是否生成日志,同时验证Logstash是否接收到日志
  • 如果你的Logstash Handler是自定义实现的,需要替换代码中from airflow.contrib.log.logstash_handler import LogstashHandler为你自己的Handler路径

内容的提问来源于stack exchange,提问作者a_good_human

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 06:52:26