Workflows 公开指标,允许你检查并衡量每个(及所有)Workflow 的执行、错误率、步骤和总时长。
Cloudflare 仪表板 ↗ 图表中显示的指标从 Cloudflare 的 GraphQL Analytics API 查询。你可以通过 GraphQL 或 HTTP 客户端以编程方式访问这些指标。
Workflows 目前在 workflowsAdaptiveGroups GraphQL 数据集中导出以下指标。
| 指标 | GraphQL 字段名 | 描述 |
|---|---|---|
| 读取查询 (qps) | readQueries |
针对数据库发出的读取查询数。这是原始读取查询数,不用于计费。 |
指标可查询(并保留)过去 31 天的数据。
workflowsAdaptiveGroups 数据集提供以下维度用于过滤和分组查询结果:
workflowName- Workflow 名称 - 例如my-workflowinstanceId- 实例 IDstepName- 步骤名称eventType- 事件类型(参见事件类型)stepCount- 给定实例内的步骤编号date- Workflow 触发日期datetimeFifteenMinutes- 截断至 15 分钟的日期和时间datetimeFiveMinutes- 截断至 5 分钟的日期和时间datetimeHour- 截断至小时的日期和时间datetimeMinute- 截断至分钟的日期和时间
eventType 指标允许你根据最后观察到的状态过滤(或 groupBy)Workflows 和步骤。
eventType 的可能值如下:
WORKFLOW_QUEUED- Workflow 已排队但当前未运行。当你达到并发限制且新实例等待当前运行实例完成时会发生。WORKFLOW_START- Workflow 已启动并正在运行。WORKFLOW_SUCCESS- Workflow 无错误完成。WORKFLOW_FAILURE- Workflow 因错误失败(重试耗尽、抛出错误等)。WORKFLOW_TERMINATED- Workflow 被显式终止。ROLLBACK_START- Workflow 开始执行已注册的回滚处理程序。ROLLBACK_COMPLETE- 所有运行的回滚处理程序已成功完成。ROLLBACK_FAILED- 回滚处理程序失败,回滚未干净完成。
STEP_START- 步骤已启动并正在运行。STEP_SUCCESS- 步骤无错误完成。STEP_FAILURE- 步骤因错误失败。SLEEP_START- 步骤正在休眠。SLEEP_COMPLETE- 步骤上次完成休眠。ATTEMPT_START- 步骤正在重试。ATTEMPT_SUCCESS- 重试成功。ATTEMPT_FAILURE- 重试尝试失败。ROLLBACK_STEP_START- 回滚处理程序开始运行。ROLLBACK_STEP_SUCCESS- 回滚处理程序成功完成。ROLLBACK_STEP_FAILURE- 回滚处理程序失败。ROLLBACK_ATTEMPT_START- 回滚重试尝试开始。ROLLBACK_ATTEMPT_SUCCESS- 回滚重试尝试成功。ROLLBACK_ATTEMPT_FAILURE- 回滚重试尝试失败。
回滚事件可让你区分前向执行失败和补偿失败,便于查询 Workflow 健康状况或调试实例时间线。
Workflows 的按 Workflow 和实例分析可在 Cloudflare 仪表板中查看。要查看数据库的当前和历史指标:
-
在 Cloudflare 仪表板中,前往 Workflows 页面。
Go to Workflows ↗ -
选择一个 Workflow 查看其指标。
你可以可选地选择时间窗口进行查询。默认为过去 24 小时。
你可以通过 GraphQL Analytics API 以编程方式查询 Workflows 的分析数据。此 API 查询与 Cloudflare 仪表板相同的数据集,并支持 GraphQL 内省(introspection)。
Workflows GraphQL 数据集需要带有 Cloudflare 账户 ID 的 accountTag 过滤器,并包含 workflowsAdaptiveGroups 数据集。
要查询给定 $workflowName 在 $datetimeStart 和 $datetimeEnd 之间的计数(Workflow 调用次数)和 wallTime 总和,按 date 分组:
query WorkflowInvocationsExample(
$accountTag: string!
$datetimeStart: Time
$datetimeEnd: Time
$workflowName: string
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
wallTime: workflowsAdaptiveGroups(
limit: 10000
filter: {
datetimeHour_geq: $datetimeStart
datetimeHour_leq: $datetimeEnd
workflowName: $workflowName
}
orderBy: [count_DESC]
) {
count
sum {
wallTime
}
dimensions {
date: datetimeHour
}
}
}
}
}以下在同一查询中对 wallTime、instanceRuns 和 stepCount 执行相同操作:
query WorkflowInvocationsExample2(
$accountTag: string!
$datetimeStart: Time
$datetimeEnd: Time
$workflowName: string
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
instanceRuns: workflowsAdaptiveGroups(
limit: 10000
filter: {
datetimeHour_geq: $datetimeStart
datetimeHour_leq: $datetimeEnd
workflowName: $workflowName
eventType: "WORKFLOW_START"
}
orderBy: [count_DESC]
) {
count
dimensions {
date: datetimeHour
}
}
stepCount: workflowsAdaptiveGroups(
limit: 10000
filter: {
datetimeHour_geq: $datetimeStart
datetimeHour_leq: $datetimeEnd
workflowName: $workflowName
eventType: "WORKFLOW_START"
}
orderBy: [count_DESC]
) {
count
dimensions {
date: datetimeHour
}
}
wallTime: workflowsAdaptiveGroups(
limit: 10000
filter: {
datetimeHour_geq: $datetimeStart
datetimeHour_leq: $datetimeEnd
workflowName: $workflowName
}
orderBy: [count_DESC]
) {
count
sum {
wallTime
}
dimensions {
date: datetimeHour
}
}
}
}
}以下查询 $instanceId 在 $datetimeStart 和 $datetimeEnd 之间的 workflowsAdaptive 原始数据:
query WorkflowsAdaptiveExample(
$accountTag: string!
$datetimeStart: Time
$datetimeEnd: Time
$instanceId: string
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
workflowsAdaptive(
limit: 100
filter: {
datetime_geq: $datetimeStart
datetime_leq: $datetimeEnd
instanceId: $instanceId
}
orderBy: [datetime_ASC]
) {
datetime
eventType
workflowName
instanceId
stepCount
wallTime
}
}
}
}查询变量的示例值:
{
"accountTag": "fedfa729a5b0ecfd623bca1f9000f0a22",
"datetimeStart": "2024-10-20T00:00:00Z",
"datetimeEnd": "2024-10-29T00:00:00Z",
"workflowName": "shoppingCart",
"instanceId": "ecc48200-11c4-22a3-b05f-88a3c1c1db81"
}