调试损坏的 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 来获取这些日志,但想法仍然存在。
docker ps
- 获取网络服务器的 PID
docker logs [PID]
- 阅读给定 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 容器中 运行 是相同的命令。
当 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 来获取这些日志,但想法仍然存在。
docker ps
- 获取网络服务器的 PID
docker logs [PID]
- 阅读给定 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'
>>>
如果您使用 docker-compose
到 运行 气流,您应该这样做:
docker-compose exec airflow airflow list_dags
在 运行ning 容器中 运行 是相同的命令。