25

当气流网络服务器显示错误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-- 找不到我正在寻找的堆栈跟踪。

我正在使用气流 v1.7.1.3

4

5 回答 5

27

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

每次使用气流 CLI 命令时,这几乎可以与任何气流命令一起使用,因为气流解析 dags 文件夹。

于 2017-10-06T23:49:47.257 回答
10

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

于 2017-10-11T19:07:58.893 回答
2

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

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

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

于 2019-02-15T08:55:50.820 回答
0

我在下面一步一步地尝试

  • airflow list_dags正如@Babcool 提到的,这将列出堆栈跟踪

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

预先设置环境变量

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'
>>>
于 2020-11-06T11:28:23.123 回答
0

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

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

docker-compose exec airflow airflow list_dags

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

于 2020-11-27T12:24:24.013 回答