当气流网络服务器显示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
答案 0 :(得分:7)
通常我使用命令airflow list_dags
来打印dags中发现的python错误的完整堆栈跟踪。
每次使用气流CLI命令时,几乎所有气流命令都可以用作气流分析dags文件夹。
答案 1 :(得分:0)
如果您想编译并查看任何语法错误,也可以尝试python your_dag.py
答案 2 :(得分:0)
您要做的是访问Web服务器的内部日志,以便获得完整的堆栈跟踪。我的Airflow服务器正在Docker映像中执行,因此我将使用Docker来获取这些日志,但想法仍然存在。
docker ps
docker logs [PID]
其中应包含有关DAG构建失败原因的确切信息。
答案 3 :(得分:0)
我一步一步地尝试以下
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
它在正在运行的容器中运行相同的命令。