如果您在使用工作流时遇到问题,请了解一些可帮助进行问题排查的策略。
排查部署错误
部署工作流后,工作流会检查源代码是否正确无误,并且与语言语法是否匹配。工作流会返回发现的错误。最常见的部署错误包括:
- 引用未定义的变量、步骤或子工作流
- 语法不正确
- 缩进不正确
{
、}
、"
、-
或:
缺失或无关紧要
例如,以下源代码抛出部署错误,因为返回语句引用了未定义的变量 varC
:
- step1:
assign:
- varA: "Hello"
- varB: "World"
- step2:
return: ${varC + varB}
以下来源代码将用于以下 Cloud Console 和 Cloud SDK 示例。
控制台
发生部署错误时,工作流会在工作流的源代码上方以红色横幅显示错误消息:
此错误消息会标记源代码中的问题,指定错误源自何处:
Could not deploy workflow: failed to build: error in step step2: error
evaluating return value: symbol 'varC' is neither a variable nor a
sub-workflow name (Code: 3)
gcloud
运行 gcloud workflows deploy
命令时,如果部署失败,则工作流会向命令行返回错误消息。此错误消息会标记源代码中的问题,指定错误源自何处:
ERROR: (gcloud.beta.workflows.deploy) [INVALID_ARGUMENT] failed to build:
error in step step2: error evaluating return value: symbol 'varC' is neither
a variable nor a sub-workflow name
修改此工作流的源代码以解决问题。在这种情况下,请更新对 varC
的引用,改为引用 varA
。
访问工作流部署和删除日志
您可以在 Cloud Console 中访问与工作流部署和删除相关的错误日志。
转到 Google Cloud Console 中的“工作流”页面:
转到“工作流”页面如需查看工作流的日志,请点击工作流的名称以转到其详情页面。
选择日志标签页。
如需按严重性过滤日志,请选择默认下拉列表,然后选择要显示的日志的错误类型。
访问工作流执行结果
您可以通过 Cloud Console 或使用 Cloud SDK 来访问工作流执行结果。
控制台
转到 Google Cloud Console 中的“工作流”页面:
转到“工作流”页面如需访问工作流的执行结果,请点击工作流的名称以转到其详情页面。
如需详细了解特定执行,请点击列表中的执行 ID。每个执行都包含以下信息:
- 执行状态:指出工作流的结束状态。
- 执行开始:执行开始时间。
- 执行结束:执行结束时间。
- 执行时长:已经花费的总时间。这可能表明存在网络错误或连接问题。
- 输出:工作流的输出。如果执行失败,则包含导致执行失败的异常。如需了解详情,请参阅执行错误消息部分。
- 输入:传递给工作流的运行时参数(如果有的话)。
如需查看工作流的所有执行日志,请点击日志以打开日志标签页。
如需过滤执行日志,请使用位于表格顶部的过滤条件字段。例如,如果只想显示失败的执行尝试,请在过滤条件的文本字段中输入“failed”。
gcloud
如需查看工作流执行的完整列表,请输入以下命令:
gcloud workflows executions list [WORKFLOW-NAME]
将 [WORKFLOW-NAME] 替换为您的工作流的名称。复制您感兴趣的执行的 ID。
如需查看工作流的执行日志,请输入以下命令:
gcloud workflows executions describe \ --workflow=[WORKFLOW-NAME] \ [EXECUTION-ID]
请替换以下内容:
- [WORKFLOW-NAME]:工作流的名称。
- [EXECUTION-ID]:执行的唯一 ID。
该命令会返回类似于以下内容的输出:
argument: '{"message":"I love it so much!"}'
endTime: '2020-07-21T17:48:16.438109757Z'
error: 'in step "sentimentCheck": {"message":"KeyError: key not found: messaage","tags":["KeyError","LookupError"]}'
name: projects/********/locations/us-central1/workflows/sentimentCheck/executions/e8103c53-72ba-4af7-8996-f5a8337c2a7
startTime: '2020-10-12T17:48:16.342177302Z'
state: FAILED
workflowRevisionId: '000009-e6d'
输出会包含以下信息:
argument
:传递给工作流的运行时参数(如果有的话)。endTime
:执行结束时间。error
:在导致执行失败的异常中抛出的错误消息。name
:执行的完整名称,包括项目的名称、工作流的位置、工作流的名称以及执行 ID。startTime
:执行开始时间。state
:指出工作流的结束状态。workflowRevisionID
:执行时的当前修订版本。
执行错误消息
如果工作流在执行期间抛出在 try/except 块中未捕获的异常,则执行将会失败并返回错误字典。
工作流执行期间抛出的错误包含标记,帮助您确定导致错误的原因。下表介绍了不同错误标记的含义。
错误标记 | 说明 |
---|---|
TypeError | 当操作或函数应用于不兼容类型的对象时会引发该错误。关联的值是一个字符串,提供有关类型不匹配的详情。 |
ValueError | 当操作或函数收到的参数具有正确的类型但值不正确,并且该情况没有一个更精确的异常(例如“IndexError”)进行说明时,就会引发该错误。 |
IndexError | 当序列子脚本超出范围整数时会引发该错误。 |
KeyError | 在现有键集中找到字典键时会引发该错误。 |
RecursionError | 解释器检测到超出递归深度上限时会引发该错误。 |
ZeroDivisionError | 当除法或取模运算的第二个参数为零时会引发该错误。关联值是一个字符串,指出操作数和运算的类型。 |
SystemError | 当解释器发现内部错误时会引发该错误。 |
TimeoutError | 当系统函数在系统级别超时时会引发该错误。 |
ResourceLimitError | 资源利用率达到上限时会引发该错误。在内部引发该错误时,无法捕获此类型的错误,从而导致立即执行失败。 |
HttpError | HTTP 请求失败并显示 HTTP 错误状态时会引发该错误。引发该异常时,响应将是包含以下元素的字典: * 消息 - 人类可读的错误消息 * 代码 - HTTP 响应状态代码 * 标头 - 响应标头 * 正文 - 响应正文 |
您还可以使用 raise:
语法引发自定义异常。请注意,用户定义的异常可覆盖现有错误字典中的元素。
将日志发送到 Cloud Logging
工作流不会自动为 Cloud Logging 中的工作流执行生成日志。您可以改为控制在工作流执行期间将日志发送到 Logging 的时间。您选择发送到 Logging 的日志称为“自定义日志”。
日志记录所需的权限
如需将自定义日志发送到 Logging,工作流必须与具有 roles/logging.logWriter
角色的服务帐号相关联。如果您需要更改服务帐号以更新您的工作流,请参阅更新工作流。如需详细了解如何创建服务帐号和分配角色,请参阅授予、更改和撤消对资源的访问权限。
执行期间创建日志条目
如需在工作流执行期间在 Logging 中创建日志条目,请在工作流中定义步骤来调用内置的 sys.log
子工作流:
- step1:
assign:
- varA: "Hello"
- varB: "World"
- logStep:
call: sys.log
args:
text: TEXT
severity: SEVERITY
- step2:
return: ${varA + " " + varB}
创建日志条目时,请定义以下内容:
TEXT
:必填。要记录的文本。如果您需要记录字典的值,请使用${json.encode_to_string(myDictionary)}
。SEVERITY
:可选。日志条目的严重级别。例如INFO
或WARNING
或CRITICAL
。如需查看严重级别的完整列表,请参阅 Logging 参考文档。
查看自定义工作流日志
您可以查看工作流或 Logging 中的自定义日志。如需查看单个工作流的自定义日志,请使用工作流中的日志标签页。如需获取所有工作流的自定义日志的汇总视图,请使用 Logging 中的日志浏览器页面。
查看工作流中的日志
如需在工作流中查看工作流的自定义日志,请执行以下操作:
转到 Google Cloud Console 中的“工作流”页面:
转到“工作流”页面如需访问工作流的自定义日志,请点击工作流的名称以转到其详情页面。
如需查看自定义日志,请点击日志。
如需按严重性过滤日志,请点击默认下拉列表,然后选择您要查看的日志的严重性。默认情况下,系统会显示所有严重级别的日志。
工作流详情页面上的日志标签页会显示以下类型的日志:
发送到 Logging 的自定义日志
对工作流执行的任何操作(例如更新工作流定义)的审核日志
查看 Logging 中的日志
如需查看 Logging 中的自定义日志,请执行以下操作:
转到 Cloud Console 中的日志浏览器页面:
转到日志浏览器在查询构建器中,点击资源,输入“workflow”,然后从清单中选取工作流,最后点击添加。
点击运行查询。
如需详细了解如何查看 Logging 中的日志,请参阅使用 Logs Explorer。