运行与调试

工作流发布后,每次运行都会产生作业记录。本页说明如何从作业记录定位失败,并列出常见的失败成因与处理方式。排查建立在工作流页的前提之上:调度引擎按定义执行、不校验任务语义,因此失败既可能来自定义,也可能来自某个节点的执行。

从作业记录入手

一次运行按输入文件扇出为多条作业记录,每个文件一条。每条记录包含各节点的执行状态、输入、输出与日志。

排查从第一个失败节点的作业记录开始:

  1. 定位状态为失败的节点。

  2. 查看该节点的输入:是否取到了预期的值,字段是否符合该节点的约定。

  3. 查看该节点的日志:执行问题的原因通常记录在此。

  4. 若该节点的输入已经不对,问题多在其上游或定义,而非该节点本身。

先分两类问题

定位失败前,先判断问题属于哪一类——两类的修复位置不同。

类别

表现

修复位置

定义问题

节点选择、执行顺序或参数绑定错误;引擎照定义原样执行

修改工作流定义

执行问题

定义正确,某节点对合法输入处理失败

查看该节点作业记录中的日志

一份能保存、能启动的工作流,不代表定义正确。定义问题不会在保存或启动时报错,只在运行中显现。

常见失败与成因

现象

成因

处理

节点持续等待,不报错也不结束

节点引用的算子未在工作区注册(名称拼写、版本不符,或该算子当前无可用实例)

GET /workspaces/:id/workitems 核对算子名称与可用性

节点报输入缺失或取值为空

下游模板引用的键,上游未用 save 写入;或上下游键名不一致

核对上游 save 的键名与下游 input 模板引用的名称

画布显示与实际执行不一致

局部编辑改动了其他节点的绑定

发布前用“预览 DSL”核对整份定义

子工作流合并失败

不支持跨工作流引用或合并,工作流之间不共享状态、无数据通道

在同一份工作流定义内声明子网

需要文件内容的节点取不到正文

工作流数据只传文件引用,不传文件正文;读取正文的节点已禁用

由节点凭文件引用自行读取正文

SQL 节点执行失败

SQL 节点的输入仅为 SQL 语句本身,不接受自然语言

检查 SQL 语句本身;详见 SQL 编辑器

备注

节点引用未注册的算子时,运行不会报错,该节点持续等待。这类失败在作业记录中表现为节点长期停留在等待状态,而非报错退出——排查时优先核对算子名称是否与工作区实时清单一致。

小技巧

在画布上完成局部编辑后,发布前用“预览 DSL”通读整份定义。画布是定义的一种编辑入口,局部操作可能改动其他节点的绑定;以 DSL 为准核对,可在运行前发现定义问题。

参见