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

Airflow集群中UI无法跨节点获取同任务不同重试日志

Airflow 2.2.4 多节点集群跨节点日志404问题解决

问题本质

你的场景是Airflow多节点集群采用CeleryExecutor,日志存储在节点本地文件系统。当任务在节点A执行生成1.log,重试在节点B生成2.log后,Webserver会错误地从节点B拉取仅存在于节点A的1.log,导致404。这是因为默认逻辑下,Webserver会从当前重试任务的Worker节点拉取所有尝试的日志,而旧日志仅存储在原执行节点本地。

可行解决方案

1. 切换到共享日志存储(推荐)

将日志统一存储到所有节点均可访问的共享存储(如NFS、分布式文件系统或对象存储),彻底避免跨节点日志分散的问题:

  • 修改airflow.cfg的[logging]段配置:
    [logging]
    base_log_folder = /mnt/shared-airflow-logs  # 替换为你的共享存储路径
    
  • 确保所有节点(Webserver、Scheduler、Worker)都挂载该共享目录,且拥有读写权限。

2. 修复跨节点日志拉取的节点映射(本地日志场景临时方案)

如果暂时无法使用共享存储,需让Webserver根据任务执行节点对应拉取日志:

  • 检查所有Worker节点的airflow.cfg,确保worker_log_server_port配置一致(你的场景为19793):
    [celery]
    worker_log_server_port = 19793
    
  • 确认Webserver能访问所有Worker节点的该端口,无防火墙或网络策略拦截。
  • 验证任务元数据准确性:在UI的任务实例详情中,查看每个尝试的Hostname字段,确认旧尝试的Hostname为节点A。若元数据记录错误,需检查Celery配置,确保Worker节点身份信息正确传递到Airflow元数据库。
  • 进阶方案:自定义日志处理器,基于任务实例的hostname字段拼接对应节点的日志URL拉取日志,这需要开发Airflow插件实现。

3. 升级Airflow版本(可选)

Airflow 2.3+版本对跨节点日志拉取逻辑做了优化,能更准确记录每个任务尝试的执行节点信息。若集群允许升级,可考虑升级到较新版本配合正确配置解决问题。

临时排查验证步骤

  • 直接访问节点A的日志服务URL:http://nodea.mycompany.com:19793/log/start_acquisition/run_writegofile/2022-07-18T01:00:00+00:00/1.log,确认日志能正常返回,排除节点A日志服务的问题。
  • 检查元数据库中task_instance表的hostname字段,确认每个任务尝试对应的执行节点是否正确存储。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 05:45:36