调试损坏的DAG

时间:2017-05-12 18:54:25

标签: airflow apache-airflow

当气流网络服务器显示Broken DAG: [<path/to/dag>] <error>之类的错误时,我们如何找到这些例外的完整堆栈跟踪?

我尝试了这些地点:

/var/log/airflow/webserver - 在执行时间范围内没有日志,其他日志是二进制文件,而strings解码没有提供有用的信息。

/var/log/airflow/scheduler - 有一些日志,但是是二进制形式,试图阅读它们,看起来主要是sqlalchemy日志,可能是气流的数据库。

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

然后也在/var/log/airflow/rotated下 - 无法找到我正在寻找的堆栈跟踪。

我正在使用airflow v1.7.1.3

5 个答案:

答案 0 :(得分:7)

通常我使用命令airflow list_dags来打印dags中发现的python错误的完整堆栈跟踪。

每次使用气流CLI命令时,几乎所有气流命令都可以用作气流分析dags文件夹。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

  1. docker ps
  2. 获取网络服务器的PID
  3. docker logs [PID]
  4. 阅读给定Airflow Web服务器的完整日志。

其中应包含有关DAG构建失败原因的确切信息。

答案 3 :(得分:0)

我一步一步地尝试以下

    @Babcool提到的
  • airflow list_dags将列出堆栈跟踪

如果仍然无法解决问题,则可以手动运行任务并查看直接错误。

预先设置环境变量

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'
>>>

答案 4 :(得分:0)

accepted answer在几乎所有情况下均可用于验证DAG并调试错误(如果有)。

如果您使用docker-compose进行气流运动,则应这样做:

docker-compose exec airflow airflow list_dags

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