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

Airflow从2.2.0升级到2.9.0后出现' ti' KeyError报错求助

Airflow 2.2.0升级到2.9.0后任务执行触发KeyError: ' ti'的解决方案

问题定位

报错中的KeyError: ' ti'(带前置空格的变量)说明日志文件名渲染时,模板字符串存在格式错误的变量{ ti},而Airflow标准模板变量应为{ti}。结合升级后出现、无DAG也触发的现象,问题根源是数据库或配置文件中残留了带空格的日志模板配置,升级过程中未被正确覆盖。

解决步骤

  • 检查并修正airflow.cfg日志模板配置
    打开airflow.cfg,找到[logging]区块的task_log_template参数,确保值中的变量无多余空格。标准格式示例:

    task_log_template = {{ ti.dag_id }}/{{ ti.task_id }}/{{ ti.execution_date }}/{{ ti.try_number }}.log
    

    若发现{ ti}格式的变量,直接修改为{ti},保存后重启Airflow服务。

  • 检查并修复元数据库中的残留配置
    连接到PostgreSQL元数据库,执行以下SQL查询日志相关配置:

    SELECT key, value FROM config WHERE key LIKE '%log_template%';
    

    若查询结果中value字段存在{ ti},执行更新语句修正:

    UPDATE config SET value = REPLACE(value, '{ ti}', '{ti}') WHERE key LIKE '%log_template%';
    
  • 重新执行完整数据库迁移
    之前指定--to-version可能跳过中间迁移步骤,导致配置未同步。运行完整迁移命令:

    airflow db migrate
    
  • 临时切换日志处理器验证
    报错中涉及Azure WASB日志处理器,可临时切换回默认文件日志处理器测试:
    修改airflow.cfg中task_log_reader为:

    task_log_reader = file.task
    

    重启调度器后运行测试DAG,若不再报错,说明WASB处理器的模板配置存在问题,需进一步检查WASB相关日志模板参数。

  • 清理旧任务实例数据
    若数据库中残留旧版本任务实例的错误配置引用,可清理历史任务实例(操作前备份数据库):

    airflow db clean --clean-before-today
    

验证

完成上述操作后,重启Airflow调度器与Worker,运行一个简单测试DAG(如下),确认任务正常执行且无KeyError:

from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime

def test_func():
    print("Test task executed successfully")

with DAG(
    'test_upgrade_dag',
    start_date=datetime(2024,5,1),
    schedule_interval=None
) as dag:
    test_task = PythonOperator(
        task_id='test_task',
        python_callable=test_func
    )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 11:25:10