Airflow 调试损坏的DAG

Airflow 调试损坏的DAG,airflow,apache-airflow,Airflow,Apache Airflow,当airflow Web服务器显示错误(如断开的DAG:[])时,我们如何以及在何处找到这些异常的完整堆栈跟踪 我尝试了以下地点: /var/log/afflow/webserver--在执行时间段内没有日志,其他日志是二进制的,使用字符串进行解码没有提供有用的信息 /var/log/aiffair/scheduler——有一些日志,但是二进制形式的,试图读取它们,看起来大部分是sqlalchemy日志,可能是aiffair数据库的日志 /var/log/aiffair/worker——显示运行

当airflow Web服务器显示错误(如
断开的DAG:[]
)时,我们如何以及在何处找到这些异常的完整堆栈跟踪

我尝试了以下地点:

/var/log/afflow/webserver
--在执行时间段内没有日志,其他日志是二进制的,使用
字符串进行解码
没有提供有用的信息

/var/log/aiffair/scheduler
——有一些日志,但是二进制形式的,试图读取它们,看起来大部分是sqlalchemy日志,可能是aiffair数据库的日志

/var/log/aiffair/worker
——显示运行DAG的日志(与您在aiffair页面上看到的日志相同)

然后在
/var/log/aiffair/rotated
下也找不到我要找的stacktrace


我使用的是airflow v1.7.1.3

通常我使用命令
airflow list_dags
,该命令针对在dags中发现的python错误打印完整的堆栈跟踪


在每次使用airflow CLI命令时,这几乎适用于任何airflow命令,如airflow parse dags文件夹

如果您想要编译并看到任何语法错误,您也可以尝试
python your_dag.py

您想要做的是访问Web服务器的内部日志,以便获得完整的堆栈跟踪。我的Airflow服务器正在Docker映像中执行,因此我将使用Docker获取这些日志,但想法仍然存在

  • docker ps
  • 获取Web服务器的PID
  • docker日志[PID]
  • 阅读给定Web服务器的完整日志

  • 这应该包含DAG构建失败的确切原因。

    我在下面一步一步地尝试

    • 气流列表\u dags
      如@Babcool所述,这将列出stacktrace
    若您仍然无法解决这个问题,那个么可以手动运行该任务并看到直接错误

    预先设置环境变量

    export AIRFLOW_HOME="/airflow/project/path"
    export PYTHONPATH="/airflow/project/path"
    
    运行dag

    airflow run dag_id task_id 2020-1-11
    
    资料来源:

    如果仍然不清楚,您可以尝试在python控制台中逐行运行代码,并检查确切的问题(在激活虚拟环境后)

    例如:

    (venv) shakeel@workstation:~$ python
    Python 3.7.9 (default, Aug 18 2020, 06:24:24) 
    [GCC 5.4.0 20160609] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from my_package.my_module import MyClass
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ModuleNotFoundError: No module named 'my_package'
    >>>
    
    (venv)shakeel@workstation:~$python
    Python 3.7.9(默认值,2020年8月18日,06:24:24)
    [GCC 5.4.0 20160609]在linux上
    有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
    >>>从my_package.my_模块导入MyClass
    回溯(最近一次呼叫最后一次):
    文件“”,第1行,在
    ModuleNotFoundError:没有名为“my_package”的模块
    >>>
    
    在几乎所有情况下,DAG都可以验证DAG并调试错误(如果有)

    如果使用
    docker compose
    运行气流,则应执行以下操作:

    docker-compose exec airflow airflow list_dags
    

    它在运行的容器中运行相同的命令。

    虽然您的解决方案听起来很合适,但我无法在我正在使用的开发环境中使用它。WebUI正在报告
    ”。在我的DAG文件中没有足够的值来解包(预期为2,得到1)“
    (虽然没有行号),但是
    list_dags
    命令会针对任何命令运行,不要忘记添加或导出
    aiffair\u HOME=/path/to/aiffair
    如果它是非标准的
    aiffair\u HOME
    pathWow,这正是我需要通过查看回溯来检查和排除故障的地方。确保“进入”您使用的容器环境
    docker exec-it docker\u ID bash
    -一旦进入,运行此处列出的命令作为答案!真正的问题是如何在远程机器上安装CLI,以便在基于Kubernetes的实例上使用?关于这一点,有一些可能的文档提示,但当我找到它并遵循它时,并没有这样的运气让它发挥作用。胡说八道。@NathanMcKaskle我建议你为此提出一个新问题,因为你的情况有点复杂(您需要在实际的airflow实例上执行
    airflow list\u dags
    。我不确定airflow cli是否可以连接到远程实例。对于那些使用的实例,您可以
    exec-it
    scheduler
    容器中,并在
    logs/scheduler/
    文件夹中查找日志