监控工作流

本页面提供的信息可帮助您监控工作流部署和 执行。

访问工作流部署和删除日志

您可以在以下位置访问与工作流的部署和删除相关的错误日志: Google Cloud 控制台。

  1. 在 Google Cloud 控制台中,进入 Workflows 页面:

    进入 Workflows

  2. 点击工作流的名称以显示其工作流详情页面。

  3. 点击日志标签页。

  4. 要按严重性过滤日志,请在默认列表中选择要显示的日志类型。

访问工作流执行结果

您可以通过 Google Cloud 控制台或使用 gcloud CLI 来访问工作流执行结果。

控制台

  1. 在 Google Cloud 控制台中,进入 Workflows 页面:

    进入 Workflows

  2. 如需访问工作流的执行结果,请点击工作流的名称以转到其工作流详情页面。

  3. 如需详细了解特定执行,请在执行标签页中点击列表中的执行 ID,前往其执行详情页面。

  4. 摘要标签页上,每个执行都包含以下信息:

    • 执行状态:指示工作流的结束状态,包括当前或最终工作流步骤。
    • 执行开始:开始执行的时间。
    • 执行结束:执行结束时间。
    • 执行时长:已经历的总时间。这可能表示网络错误或连接问题。
    • 工作流名称:工作流名称。
    • 工作流修订版本:执行时的当前修订版本。
    • Call logging level:在 执行。在本文档中,请参阅通话记录
    • 输入:传递给工作流的运行时参数(如果有)。
    • 输出:工作流的输出。如果执行失败,则包含导致执行失败的异常。在本文档中,请参阅 执行错误消息
  5. 如需将工作流执行记录视为步骤条目列表进行查看,请点击步骤标签页。如需了解详情,请参阅查看执行步骤的历史记录

  6. 如需查看工作流执行的日志,请点击日志标签页。

  7. 如需过滤执行日志,请使用位于表格顶部的过滤条件字段。例如,如果只想显示失败的执行尝试,请在过滤条件的文本字段中输入 failed

gcloud

  1. 如需查看工作流执行的完整列表,请输入以下命令:

    gcloud workflows executions list WORKFLOW_NAME
    

    WORKFLOW_NAME 替换为您的工作流的名称。 复制您感兴趣的执行的 ID。

  2. 如需查看工作流的执行日志,请输入以下命令:

    gcloud workflows executions describe \
        --workflow=WORKFLOW_NAME \
        EXECUTION_ID
    

    替换以下内容:

    • WORKFLOW_NAME:工作流的名称
    • EXECUTION_ID:执行的唯一 ID。

    此命令返回类似于以下内容的输出:

    argument: 'null'
    endTime: '2022-07-19T12:40:07.070039707Z'
    error:
     context: |-
        The argument of 'in' must be a dict or an array; got: null
        in step "checkSearchTermInInput", routine "main", line: 12
     payload: "{"message":"The argument of 'in' must be a dict or an array; got: null"
    ,"tags":["TypeError"]}" stackTrace: elements: - position: column: '26' length: '24' line: '12' routine: main step: checkSearchTermInInput name: projects/1051295516635/locations/us-central1/workflows/myFirstWorkflow/executions/17ffc89c-0a27-4d2f-8356-e681d949a3d3 startTime: '2022-07-19T12:40:07.024823663Z' state: FAILED status: currentSteps: - routine: main step: checkSearchTermInInput workflowRevisionId: 000001-ac2
    输出会包含以下信息:

    • argument:传递给工作流的运行时参数(如果有的话)。
    • endTime:执行结束时间。
    • error:在导致执行失败的异常中抛出的错误消息。
    • name:执行的完整名称,包括项目的名称、工作流的位置、工作流的名称以及执行 ID。
    • startTime:执行开始时间。
    • state:指出工作流的结束状态。
    • status:执行的当前或最终工作流步骤
    • workflowRevisionID:执行时的当前修订版本。

执行错误映射

当工作流在执行过程中抛出一个错误,而该错误在 try/except 代码块, 执行失败,并且系统会生成描述错误的错误映射(JSON 字典), 返回。

在工作流执行期间抛出的错误包含标记,以帮助您确定错误的原因。例如,从连接器返回的错误可以包含两个键(tagsmessage),如下所示:

{'tags': ['SystemError'], 'message': 'an error has occurred'}

可以有多个代码。如需检查特定代码,您可以使用表达式。例如:

${'SystemError' in e.tags}

以字符串形式返回的访问错误数据

某些连接器和 HTTP API 会先将错误序列化为字符串,然后再返回错误。您可以使用标准库函数将载荷恢复到 原始错误。例如,要将错误字符串转换为映射,您可以使用 json.decodetext.encode 函数:

json.decode(text.encode(ERROR_FROM_API))

错误标记

下表介绍了不同错误标记的含义。

标记 说明
AuthError 为 HTTP 请求生成凭据失败时引发。
ConnectionError 与端点成功建立连接时引发 但在数据传输期间出现了连接问题。通过 在收到完整响应和消息前终止连接 尚未传送到端点系统可能不支持重试 幂等性。
ConnectionFailedError 在未与 API 端点建立连接时引发;用于 例如,由于域名不正确、DNS 解析问题或其他 网络问题。重试是幂等的。
HttpError HTTP 请求失败并显示 HTTP 错误状态时会引发该错误。引发此异常时,响应是包含以下元素的映射:
  • tags - 包含 HttpError 字符串的列表
  • message - 人类可读的错误消息
  • codeHTTP 响应状态代码。
  • headers—响应标头
  • body—响应正文
IndexError 当序列子脚本超出范围整数时会引发该错误。
KeyError 在现有键集中找到映射键时会引发该错误。
OperationError 当长时间运行的操作未能成功完成时引发。
ParallelNestingError 当超出并行步骤可嵌套的深度上限时,会引发此错误。
RecursionError 在解释器检测到 超出调用堆栈深度上限
ResourceLimitError 资源利用率达到上限时会引发该错误。在内部引发该错误时,无法捕获此类型的错误,从而导致立即执行失败。
ResponseTypeError 在长时间运行的操作返回错误响应时引发 类型。
SystemError 当解释器发现内部错误时会引发该错误。
TimeoutError 当系统函数在系统级别超时时会引发该错误。
TypeError 在将操作或函数应用于不兼容类型的对象时引发。关联值是一个字符串,提供类型不匹配的详细信息。
UnhandledBranchError 当一个或多个分支或迭代遇到最多 个未处理的运行时错误时,引发此错误。
ValueError 当操作或函数收到的参数具有正确的类型但值不正确,并且该情况没有一个更精确的异常(例如 IndexError)进行说明时,就会引发该错误。
ZeroDivisionError 当除法或取模运算的第二个参数为零时会引发该错误。关联值是一个字符串,指出操作数和运算的类型。

您还可以使用 语法raise引发自定义异常。

查看执行状态

您可以使用多个命令来帮助检查工作流执行的状态。

  • 如需检索工作流的执行尝试及其 ID 列表,请输入以下命令:

    gcloud workflows executions list WORKFLOW_NAME

    WORKFLOW_NAME 替换为工作流的名称。

    该命令会返回类似于以下内容的 NAME 值:

    projects/PROJECT_NUMBER/locations/REGION/workflows/WORKFLOW_NAME/executions/EXECUTION_ID

    复制执行 ID 以在下一个命令中使用。

  • 如需检查执行尝试的状态并等待尝试完成,请输入以下命令:

    gcloud workflows executions wait EXECUTION_ID

    EXECUTION_ID 替换为执行尝试的 ID。

    该命令会等到执行尝试完成后,再返回结果。

  • 要等待上次执行完成,然后返回 完成执行,请输入以下命令:

    gcloud workflows executions wait-last

    如果您在同一个 gcloud 会话中进行了先前的执行尝试,该命令将等到前一个执行尝试完成后,再返回已完成的执行的结果。如果之前没有尝试过, gcloud 会返回以下错误:

    ERROR: (gcloud.workflows.executions.wait-last) [NOT FOUND] There are no cached executions available.
    
  • 要获取上次执行的状态,请输入 以下命令:

    gcloud workflows executions describe-last

    如果您在同一个 gcloud 会话中进行了先前的执行尝试,该命令会返回上次执行的结果,即使该命令正在运行也是如此。如果前一个尝试不存在,gcloud 将返回以下错误:

    ERROR: (gcloud.beta.workflows.executions.describe-last) [NOT FOUND] There are no cached executions available.
    

过滤执行

您可以将过滤器应用于 workflows.executions.list 方法

您可以按以下字段进行过滤:

  • createTime
  • disableOverflowBuffering
  • duration
  • endTime
  • executionId
  • label
  • startTime
  • state
  • stepName
  • workflowRevisionId

例如,如需按标签 (labels."fruit":"apple") 进行过滤,您可以发出类似于以下内容的 API 请求:

GET https://workflowexecutions.googleapis.com/v1/projects/MY_PROJECT/locations/MY_LOCATION/workflows/MY_WORKFLOW/executions?view=full&filter=labels.%22fruit%22%3A%22apple%22"

其中:

  • view=full 会指定一个视图,用于定义应在 执行的返回操作次数;在本示例中,所有数据
  • labels.%22fruit%22%3A%22apple%22 是网址编码的过滤条件语法

如需了解详情,请参阅 AIP-160 过滤

将日志发送到 Cloud Logging

Workflows 会自动为 Cloud Logging 中的工作流执行生成执行日志

您还可以启用调用日志记录。或者,您可以创建使用来源中的 sys.log 函数的自定义日志。使用调用日志记录和自定义日志,您可以控制在工作流执行期间日志发送到 Logging 的时间,并且在调试工作流时尤其有用。

如需了解详情(包括 engine_callexecutions_system 日志记录 proto 文件),请参阅此 GitHub 代码库

执行日志

每个工作流执行都至少会自动触发两个执行日志:一个在执行开始时,一个在执行结束时。

如需详细了解 Logging 中提供的 Workflows 平台日志,请参阅 Google Cloud Platform 日志

调用日志记录

您可以设置标志,以便记录工作流执行期间的每个调用步骤,以及返回步骤名称、函数名称、函数参数和调用响应。或者,您也可以记录 或停止调用的事件。

系统只会记录明确的调用步骤;例如,对子工作流或库函数的调用。系统不会记录在表达式或标准库函数(例如,sys.log 中的 http.post)内以及连接器内的调用。

HTTP Authorization 请求标头会从 HTTP 调用的日志中隐去。

将通话记录应用于 工作流定义 或发送到 工作流的执行过程 您可以指定所需的日志记录级别除非未指定执行日志级别(默认),否则执行日志级别优先于任何工作流日志级别;在这种情况下,工作流日志级别适用。

请注意,Cloud Logging 设置的日志条目大小限制也适用于调用日志记录。

自定义日志

如需在工作流执行期间在 Logging 中创建日志条目,请在工作流中定义调用 sys.log 函数的步骤:

YAML

  - step1:
      assign:
          - varA: "Hello"
          - varB: "World"
  - logStep:
      call: sys.log
      args:
          text: TEXT
          severity: SEVERITY 
  - step2:
      return: ${varA + " " + varB}
    

JSON

    [
      {
        "step1": {
          "assign": [
            {
              "varA": "Hello"
            },
            {
              "varB": "World"
            }
          ]
        }
      },
      {
        "logStep": {
          "call": "sys.log",
          "args": {
            "text": "TEXT",
            "severity": "SEVERITY"
          }
        }
      },
      {
        "step2": {
          "return": "${varA + " " + varB}"
        }
      }
    ]
      

创建日志条目时,请定义以下内容:

  • TEXT:必填。要记录的文本。如果需要记录映射的值,请使用 ${json.encode_to_string(myMap)}
  • SEVERITY:可选。日志条目的严重级别。例如 INFOWARNINGCRITICAL

如需了解详情,请参阅 sys.log 函数参考文档

所需权限

如需应用调用日志记录或将自定义日志发送到 Logging,工作流必须与具有 logging.logEntries.create 权限的服务账号相关联(例如 roles/logging.logWriter 角色)。如果您需要更改与您的工作流一起更新的服务账号,请参阅更新工作流。如需详细了解如何创建服务账号并分配角色,请参阅管理对项目、文件夹和组织的访问权限

查看工作流日志

您可以在 Workflows 或 Logging 中查看日志。如需查看单个工作流的日志,请使用 Workflows 中的日志标签页。如需获取所有工作流的日志的汇总视图,请使用 Logging 中的日志浏览器页面。

在 Workflows 中查看日志

如需在 Workflows 中查看工作流的日志,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到 Workflows 页面:

    进入 Workflows

  2. 如需访问工作流的日志,请点击工作流的名称以转到其详情页面。

  3. 如需查看日志,请点击日志

  4. 要按严重性过滤日志,请在默认列表中选择要显示的日志类型。默认情况下,系统会显示所有严重程度的日志。

工作流详情页面上的日志标签页会显示以下类型的日志:

  • 发送到 Logging 的日志

  • 对工作流执行的任何操作(例如更新工作流定义)的审核日志

在 Logging 中查看日志

如需在 Logging 中查看日志,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 Logs Explorer 页面:

    转到 Logs Explorer

  2. 查询构建器中,点击资源并输入 workflow。从列表中选择 Cloud 工作流,然后点击添加

    工作流日志记录

  3. 点击运行查询

如需详细了解如何在 Logging 查看日志,请参阅使用日志浏览器

后续步骤