监控工作流

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

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

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

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

    进入 Workflows

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

  3. 点击日志标签页。

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

访问工作流执行结果

您可以在 Google Cloud 控制台中或使用 gcloud CLI 查看工作流执行结果。

控制台

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

    进入 Workflows

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

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

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

    • 执行状态:指示工作流的结束状态,包括当前工作流步骤或最终工作流步骤。
    • 执行开始:开始执行的时间。
    • 执行结束:执行结束的时间。
    • 执行时长:已经历的总时间。这可能表示网络错误或连接问题。
    • Workflow name:工作流名称。
    • 工作流修订版本:执行时的当前修订版本。
    • 通话记录级别:在执行期间应用的通话记录级别。在本文档中,请参阅通话记录
    • 输入:传递给工作流的运行时参数(如果有)。
    • 输出:工作流的输出。如果执行失败,则包含导致执行失败的异常。在本文档中,请参阅执行错误消息
  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 方法返回的工作流执行项列表。

您可以过滤以下字段:

  • 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 调用日志中的 HTTP Authorization 请求标头会被遮盖。

将调用日志记录应用于工作流定义工作流执行时,您可以指定所需的日志记录级别。执行日志级别优先于任何工作流日志级别,除非未指定执行日志级别(默认值);在这种情况下,系统会应用工作流日志级别。

请注意,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

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

    工作流日志记录

  3. 点击运行查询

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

后续步骤