调试损坏的 DAG

Debugging Broken DAGs

当 airflow 网络服务器显示 Broken DAG: [<path/to/dag>] <error> 之类的错误时,我们如何以及在哪里可以找到这些异常的完整堆栈跟踪?

我尝试了这些位置:

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

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

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

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

我正在使用 airflow v1.7.1.3

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

每次使用 airflow CLI 命令时,几乎所有 airflow 命令都可以作为 airflow parse dags 文件夹使用。

如果想编译看看有没有语法错误,也可以试试python your_dag.py

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

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

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

下面我一步步尝试

  • airflow list_dags 如@Babcool 所述,这将列出堆栈跟踪

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

pre-step 设置环境变量

export AIRFLOW_HOME="/airflow/project/path"
export PYTHONPATH="/airflow/project/path"

运行 达格

airflow run dag_id task_id 2020-1-11

来源:

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

例如:

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

在几乎所有情况下都可以验证 DAG 并调试错误(如果有)。

如果您使用 docker-compose 到 运行 气流,您应该这样做:

docker-compose exec airflow airflow list_dags

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