Airflow 调试损坏的DAG
当airflow Web服务器显示错误(如Airflow 调试损坏的DAG,airflow,apache-airflow,Airflow,Apache Airflow,当airflow Web服务器显示错误(如断开的DAG:[])时,我们如何以及在何处找到这些异常的完整堆栈跟踪 我尝试了以下地点: /var/log/afflow/webserver--在执行时间段内没有日志,其他日志是二进制的,使用字符串进行解码没有提供有用的信息 /var/log/aiffair/scheduler——有一些日志,但是二进制形式的,试图读取它们,看起来大部分是sqlalchemy日志,可能是aiffair数据库的日志 /var/log/aiffair/worker——显示运行
断开的DAG:[]
)时,我们如何以及在何处找到这些异常的完整堆栈跟踪
我尝试了以下地点:
/var/log/afflow/webserver
--在执行时间段内没有日志,其他日志是二进制的,使用字符串进行解码
没有提供有用的信息
/var/log/aiffair/scheduler
——有一些日志,但是二进制形式的,试图读取它们,看起来大部分是sqlalchemy日志,可能是aiffair数据库的日志
/var/log/aiffair/worker
——显示运行DAG的日志(与您在aiffair页面上看到的日志相同)
然后在/var/log/aiffair/rotated
下也找不到我要找的stacktrace
我使用的是airflow v1.7.1.3通常我使用命令
airflow list_dags
,该命令针对在dags中发现的python错误打印完整的堆栈跟踪
在每次使用airflow CLI命令时,这几乎适用于任何airflow命令,如airflow parse dags文件夹 如果您想要编译并看到任何语法错误,您也可以尝试
python your_dag.py
您想要做的是访问Web服务器的内部日志,以便获得完整的堆栈跟踪。我的Airflow服务器正在Docker映像中执行,因此我将使用Docker获取这些日志,但想法仍然存在
docker ps
docker日志[PID]
这应该包含DAG构建失败的确切原因。我在下面一步一步地尝试
如@Babcool所述,这将列出stacktrace气流列表\u dags
export AIRFLOW_HOME="/airflow/project/path"
export PYTHONPATH="/airflow/project/path"
运行dag
airflow run dag_id task_id 2020-1-11
资料来源:
(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'
>>>
(venv)shakeel@workstation:~$python
Python 3.7.9(默认值,2020年8月18日,06:24:24)
[GCC 5.4.0 20160609]在linux上
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>从my_package.my_模块导入MyClass
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ModuleNotFoundError:没有名为“my_package”的模块
>>>
在几乎所有情况下,DAG都可以验证DAG并调试错误(如果有)
如果使用docker compose
运行气流,则应执行以下操作:
docker-compose exec airflow airflow list_dags
它在运行的容器中运行相同的命令。虽然您的解决方案听起来很合适,但我无法在我正在使用的开发环境中使用它。WebUI正在报告
”。在我的DAG文件中没有足够的值来解包(预期为2,得到1)“
(虽然没有行号),但是list_dags
命令会针对任何命令运行,不要忘记添加或导出aiffair\u HOME=/path/to/aiffair
如果它是非标准的aiffair\u HOME
pathWow,这正是我需要通过查看回溯来检查和排除故障的地方。确保“进入”您使用的容器环境docker exec-it docker\u ID bash
-一旦进入,运行此处列出的命令作为答案!真正的问题是如何在远程机器上安装CLI,以便在基于Kubernetes的实例上使用?关于这一点,有一些可能的文档提示,但当我找到它并遵循它时,并没有这样的运气让它发挥作用。胡说八道。@NathanMcKaskle我建议你为此提出一个新问题,因为你的情况有点复杂(您需要在实际的airflow实例上执行airflow list\u dags
。我不确定airflow cli是否可以连接到远程实例。对于那些使用的实例,您可以exec-it
到scheduler
容器中,并在logs/scheduler/
文件夹中查找日志