您可以擷取特定工作流程執行作業的歷史記錄,做為步驟項目清單。每個步驟項目都會提供資訊,協助您分析、偵錯或最佳化工作流程。舉例來說,您可以確認實際執行哪些步驟,並判斷步驟的時間長度和成功與否。在除錯大型或複雜的非線性工作流程 (例如具有許多平行分支的工作流程) 時,這項功能尤其實用。
步驟項目代表原始碼中的實際步驟 (例如 assign
或 call
),或是指令區塊 (例如 for
迴圈或 try/retry/except
區塊)。如需步驟類型的完整清單,請參閱 StepType。
執行記錄等級
建立或執行工作流程時,您可以指定基本或詳細執行記錄。您可以在工作流程或執行層級套用這項設定。
根據預設,系統不會指定執行記錄層級,並傳回「Basic」步驟項目。
如果您希望執行記錄包含任何在範圍內的變數值,以及適用的預期迭代次數 (例如,使用 for
迴圈、平行分支或迭代時),請務必將執行記錄層級設為「詳細」。
如果未為執行作業指定執行記錄層級,系統會根據套用至工作流程的層級決定該層級。如果層級不同,在執行層級套用的設定會覆寫該執行作業在工作流程層級套用的設定。
如何擷取步驟項目
您可以傳送要求至 Workflow Executions REST API,或透過 Google Cloud 控制台擷取步驟項目:
Google Cloud 主控台:請參閱本文的「在主控台中查看步驟項目」一節。
除了列出步驟項目及其詳細資料,控制台還會以圖形呈現執行步驟,方便您查看及分析工作流程執行路徑。
步驟輸入資訊
步驟項目包含下列資訊。詳細步驟項目也包含基本步驟項目資訊。
如需更多資訊,請參閱本文件中的「範例」。
基本步驟輸入資訊
名稱 | 步驟項目的完整資源名稱,這是具有下列格式的專屬 ID,其中 STEPENTRY_ID 是遞增計數器:
|
建立及更新時間 | 步驟項目建立時間和最近一次更新時間的時間戳記。如果步驟項目已完成,updateTime 會指出完成時間。 |
日常安排和步驟名稱 | 步驟項目所屬的常式和步驟名稱。處理常式名稱是指在 YAML 或 JSON 來源程式碼中定義的子工作流程名稱。頂層常式名稱為 main 。 |
狀態和進度類型 | 步驟項目的狀態,例如項目是否已成功或失敗,或步驟項目是否正在進行,以及進度類型。如需狀態和進度類型的完整清單,請參閱「狀態」和「ProgressType」。 |
導覽資訊 | 步驟項目的位置,方便您進一步瞭解工作流程的階層和流程,例如目前步驟項目前後的步驟項目,或是步驟項目的父項或子項。 詳情請參閱 NavigationInfo。 |
中繼資料 | 與迭代步驟項目相關的資料,可能包括:
|
例外狀況 | 與任何例外狀況相關的酬載,並說明步驟輸入失敗的原因。 |
詳細步驟輸入資訊
中繼資料 | 如適用,則為步驟進度中預期的疊代次數,例如使用 請注意,如果迴圈邊界包含納入下列任何項目的運算式,計算出的計數結果就不會正常運作:
|
變數資料 | 與此步驟相關的範圍內變數值相關資料,包括使用者定義的本機變數名稱和值,以及運算式評估結果。 請注意,範圍會排除與工作流程內建函式連結的內部變數。 詳情請參閱 VariableData。 |
在主控台中查看步驟項目
您可以在Google Cloud 控制台中查看特定工作流程執行作業的步驟項目。
前往 Google Cloud 控制台的「Workflows」頁面。
按一下工作流程名稱,前往「Workflow details」(工作流程詳細資料) 頁面。
如要查看特定執行作業的詳細資料,請按一下該執行作業的 ID。
「Summary」分頁會提供整體執行作業的相關資訊,包括導致執行作業失敗的任何例外狀況。詳情請參閱「執行錯誤對應」。
如要將工作流程執行記錄做為步驟項目清單來查看,請按一下「步驟」分頁標籤。
系統會列出工作流程執行作業的所有步驟項目。
如要篩選步驟項目,請使用表格頂端的「Filter」欄位選取屬性和值,例如
State: Failed
。如要顯示任何「Parent」、「Children」、「Next」和「Previous」步驟項目的連結,請按一下特定步驟項目。
點選其中一個連結後,其他連結會自動更新。舉例來說,父項會連結至您按一下的步驟項目父項。
「Visualization」面板會以圖表呈現工作流程中的步驟,協助您瞭解工作流程路徑。
請注意,視覺化效果可能與步驟輸入內容不同。舉例來說,在視覺化中,
for
區塊會以單一元件呈現;不過,視疊代次數而定,可能會有多個步驟項目。您可以在面板中執行下列操作:
- 放大或縮小視覺化圖表
- 收合或展開父項步驟
- 點選步驟項目,查看其前一個和後一個項目
- 確認成功和失敗的步驟項目,以綠色勾號或紅色驚嘆號表示
- 按一下 展開箭頭關閉「Visualization」面板,再次按一下即可開啟面板
擷取步數記錄前
如要取得擷取步驟項目所需的權限,請要求管理員為您授予專案的 Workflows Admin (workflows.stepEntries.get
) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
擷取步驟項目
如要擷取特定工作流程執行作業的步驟項目,請使用 projects.locations.workflows.executions.stepEntries.get
方法。
使用任何要求資料之前,請先替換以下項目:
PROJECT_NUMBER
:您在「IAM 與管理員設定」頁面中列出的 Google Cloud專案編號。LOCATION
:工作流程的區域,例如us-central1
。WORKFLOW_ID
:工作流程的使用者定義名稱,例如myFirstWorkflow
。EXECUTION_ID
:工作流程執行作業的專屬 ID,會在工作流程執行後傳回。STEPENTRY_ID
:步驟項目的專屬 ID,例如1
。
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/workflows/WORKFLOW_ID/executions/EXECUTION_ID/stepEntries/STEPENTRY_ID", "createTime": "2024-08-15T19:03:08.328851864Z", "updateTime": "2024-08-15T19:03:08.331099634Z", "routine": "main", "step": "checkSearchTermInInput", "stepType": "STEP_CONDITION", "state": "STATE_SUCCEEDED", "entryId": "2", "navigationInfo": { "children": [ "3" ], "parent": "1", "next": "3", "previous": "1" }, "variableData": {} }
列出步驟項目前
如要取得列出步驟項目所需的權限,請要求管理員為您授予專案的 Workflows Admin (workflows.stepEntries.list
) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
列出步驟項目
如要列出特定工作流程執行作業的步驟項目,請使用 projects.locations.workflows.executions.stepEntries.list
方法。根據預設,系統會依步驟項目的 createTime
以遞增順序傳回結果。
使用任何要求資料之前,請先替換以下項目:
PROJECT_NUMBER
:您在「IAM 與管理員設定」頁面中列出的 Google Cloud專案編號。LOCATION
:工作流程的區域,例如us-central1
。WORKFLOW_ID
:工作流程的使用者定義名稱,例如myFirstWorkflow
。EXECUTION_ID
:工作流程執行作業的專屬 ID,會在工作流程執行後傳回。
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "stepEntries": [ { "name": "projects/PROJECT_NUMBER/locations/LOCATION/workflows/WORKFLOW_ID/executions/EXECUTION_ID/stepEntries/1", "createTime": "2024-08-15T19:03:08.328807964Z", "updateTime": "2024-08-15T19:03:08.331099694Z", "routine": "main", "step": "checkSearchTermInInput", "stepType": "STEP_SWITCH", "state": "STATE_SUCCEEDED", "entryId": "1", "navigationInfo": { "children": [ "2" ], "next": "2" }, "variableData": {} }, { "name": "projects/PROJECT_NUMBER/locations/LOCATION/workflows/WORKFLOW_ID/executions/EXECUTION_ID/stepEntries/2", "createTime": "2024-08-15T19:03:08.328851864Z", "updateTime": "2024-08-15T19:03:08.331099634Z", "routine": "main", "step": "checkSearchTermInInput", "stepType": "STEP_CONDITION", "state": "STATE_SUCCEEDED", "entryId": "2", "navigationInfo": { "children": [ "3" ], "parent": "1", "next": "3", "previous": "1" }, "variableData": {} }, { "name": "projects/PROJECT_NUMBER/locations/LOCATION/workflows/WORKFLOW_ID/executions/EXECUTION_ID/stepEntries/3", "createTime": "2024-08-15T19:03:08.331037314Z", "updateTime": "2024-08-15T19:03:08.331099554Z", "routine": "main", "step": "checkSearchTermInInput.condition1", "stepType": "STEP_ASSIGN", "state": "STATE_SUCCEEDED", "entryId": "3", "navigationInfo": { "parent": "2", "next": "4", "previous": "2" }, "variableData": { "variables": { "input": { "searchTerm": "asia" }, "searchTerm": "asia" } } }, { "name": "projects/PROJECT_NUMBER/locations/LOCATION/workflows/WORKFLOW_ID/executions/EXECUTION_ID/stepEntries/4", "createTime": "2024-08-15T19:03:08.331100404Z", "updateTime": "2024-08-15T19:03:08.633741469Z", "routine": "main", "step": "readWikipedia", "stepType": "STEP_CALL", "state": "STATE_SUCCEEDED", "entryId": "4", "navigationInfo": { "next": "5", "previous": "3" }, "variableData": {} }, { "name": "projects/PROJECT_NUMBER/locations/LOCATION/workflows/WORKFLOW_ID/executions/EXECUTION_ID/stepEntries/5", "createTime": "2024-08-15T19:03:08.633969694Z", "updateTime": "2024-08-15T19:03:08.634063018Z", "routine": "main", "step": "returnOutput", "stepType": "STEP_RETURN", "state": "STATE_SUCCEEDED", "entryId": "5", "navigationInfo": { "previous": "4" }, "variableData": { "variables": { "wikiResult": { "headers": { ... }, "body": [ ... ], "code": 200 }, "input": { "searchTerm": "asia" }, "searchTerm": "asia" } } } ], "totalSize": 5 }
刪除步驟項目
如要刪除特定工作流程執行作業的所有步驟項目,請使用 projects.locations.workflows.executions.deleteExecutionHistory
方法。
使用任何要求資料之前,請先替換以下項目:
WORKFLOW_NAME
:工作流程名稱。PROJECT_NUMBER
:您的 Google Cloud專案編號。LOCATION
:工作流程部署的區域,例如us-central1
。EXECUTION_ID
:應刪除步驟項目的執行作業 ID。
如要傳送要求,請展開以下其中一個選項:
如果成功,回應主體會留白。
範例
含有 for
區塊的工作流程
工作流程
YAML
- assignStep: assign: - sum: 0 - forStep: for: range: [1, 2] value: v steps: - sumStep: assign: - sum: ${sum + v} - returnStep: return: ${sum}
JSON
[ { "assignStep": { "assign": [ { "sum": 0 } ] } }, { "forStep": { "for": { "range": [ 1, 2 ], "value": "v", "steps": [ { "sumStep": { "assign": [ { "sum": "${sum + v}" } ] } } ] } } }, { "returnStep": { "return": "${sum}" } } ]
圖表
for
區塊的工作流程 (按一下圖表可放大)。步驟項目
{ "stepEntries": [ { "name": "projects/1051295516635/locations/us-central1/workflows/workflow-for-block/executions/0bc47b85-a399-4101-b629-1f623802e32d/stepEntries/1", "createTime": "2024-08-15T19:32:18.119578307Z", "updateTime": "2024-08-15T19:32:18.119661828Z", "routine": "main", "step": "assignStep", "stepType": "STEP_ASSIGN", "state": "STATE_SUCCEEDED", "entryId": "1", "navigationInfo": { "next": "2" }, "variableData": { "variables": { "sum": 0 } } }, { "name": "projects/1051295516635/locations/us-central1/workflows/workflow-for-block/executions/0bc47b85-a399-4101-b629-1f623802e32d/stepEntries/2", "createTime": "2024-08-15T19:32:18.119662643Z", "updateTime": "2024-08-15T19:32:18.120893531Z", "routine": "main", "step": "forStep", "stepType": "STEP_FOR", "state": "STATE_SUCCEEDED", "entryId": "2", "navigationInfo": { "children": [ "3", "5" ], "next": "3", "previous": "1" }, "stepEntryMetadata": { "progressType": "PROGRESS_TYPE_FOR", "expectedIteration": "2" }, "variableData": {} }, { "name": "projects/1051295516635/locations/us-central1/workflows/workflow-for-block/executions/0bc47b85-a399-4101-b629-1f623802e32d/stepEntries/3", "createTime": "2024-08-15T19:32:18.119732820Z", "updateTime": "2024-08-15T19:32:18.120463449Z", "routine": "main", "step": "forStep", "stepType": "STEP_FOR_ITERATION", "state": "STATE_SUCCEEDED", "entryId": "3", "navigationInfo": { "children": [ "4" ], "parent": "2", "next": "4", "previous": "2" }, "stepEntryMetadata": { "progressType": "PROGRESS_TYPE_FOR", "progressNumber": "1" }, "variableData": {} }, { "name": "projects/1051295516635/locations/us-central1/workflows/workflow-for-block/executions/0bc47b85-a399-4101-b629-1f623802e32d/stepEntries/4", "createTime": "2024-08-15T19:32:18.119737066Z", "updateTime": "2024-08-15T19:32:18.120463358Z", "routine": "main", "step": "sumStep", "stepType": "STEP_ASSIGN", "state": "STATE_SUCCEEDED", "entryId": "4", "navigationInfo": { "parent": "3", "next": "5", "previous": "3" }, "stepEntryMetadata": { "progressType": "PROGRESS_TYPE_FOR", "progressNumber": "1" }, "variableData": { "variables": { "sum": 1, "v": 1 } } }, { "name": "projects/1051295516635/locations/us-central1/workflows/workflow-for-block/executions/0bc47b85-a399-4101-b629-1f623802e32d/stepEntries/5", "createTime": "2024-08-15T19:32:18.120465172Z", "updateTime": "2024-08-15T19:32:18.120893471Z", "routine": "main", "step": "forStep", "stepType": "STEP_FOR_ITERATION", "state": "STATE_SUCCEEDED", "entryId": "5", "navigationInfo": { "children": [ "6" ], "parent": "2", "next": "6", "previous": "4" }, "stepEntryMetadata": { "progressType": "PROGRESS_TYPE_FOR", "progressNumber": "2" }, "variableData": {} }, { "name": "projects/1051295516635/locations/us-central1/workflows/workflow-for-block/executions/0bc47b85-a399-4101-b629-1f623802e32d/stepEntries/6", "createTime": "2024-08-15T19:32:18.120470187Z", "updateTime": "2024-08-15T19:32:18.120893389Z", "routine": "main", "step": "sumStep", "stepType": "STEP_ASSIGN", "state": "STATE_SUCCEEDED", "entryId": "6", "navigationInfo": { "parent": "5", "next": "7", "previous": "5" }, "stepEntryMetadata": { "progressType": "PROGRESS_TYPE_FOR", "progressNumber": "2" }, "variableData": { "variables": { "sum": 3, "v": 2 } } }, { "name": "projects/1051295516635/locations/us-central1/workflows/workflow-for-block/executions/0bc47b85-a399-4101-b629-1f623802e32d/stepEntries/7", "createTime": "2024-08-15T19:32:18.120894873Z", "updateTime": "2024-08-15T19:32:18.121003185Z", "routine": "main", "step": "returnStep", "stepType": "STEP_RETURN", "state": "STATE_SUCCEEDED", "entryId": "7", "navigationInfo": { "previous": "6" }, "variableData": { "variables": { "sum": 3 } } } ], "totalSize": 7 }
含有子工作流程呼叫的工作流程
工作流程
YAML
main: steps: - callStep: call: square args: x: 10 result: t - retStep: return: ${t} square: params: [x] steps: - assignStep: assign: - y: ${x*x} - retStep: return: ${y}
JSON
{ "main": { "steps": [ { "callStep": { "call": "square", "args": { "x": 10 }, "result": "t" } }, { "retStep": { "return": "${t}" } } ] }, "square": { "params": [ "x" ], "steps": [ { "assignStep": { "assign": [ { "y": "${x*x}" } ] } }, { "retStep": { "return": "${y}" } } ] } }
圖表
步驟項目
{ "stepEntries": [ { "name": "projects/1051295516635/locations/us-central1/workflows/workflow-subworkflow-call/executions/e203bc96-a1cf-47ba-b6de-f3d1b0909664/stepEntries/1", "createTime": "2024-08-15T19:37:44.162778920Z", "updateTime": "2024-08-15T19:37:44.168683007Z", "routine": "main", "step": "callStep", "stepType": "STEP_CALL", "state": "STATE_SUCCEEDED", "entryId": "1", "navigationInfo": { "children": [ "2", "3" ], "next": "2" }, "variableData": { "variables": { "t": 100 } } }, { "name": "projects/1051295516635/locations/us-central1/workflows/workflow-subworkflow-call/executions/e203bc96-a1cf-47ba-b6de-f3d1b0909664/stepEntries/2", "createTime": "2024-08-15T19:37:44.168598736Z", "updateTime": "2024-08-15T19:37:44.168657969Z", "routine": "square", "step": "assignStep", "stepType": "STEP_ASSIGN", "state": "STATE_SUCCEEDED", "entryId": "2", "navigationInfo": { "parent": "1", "next": "3", "previous": "1" }, "variableData": { "variables": { "y": 100, "x": 10 } } }, { "name": "projects/1051295516635/locations/us-central1/workflows/workflow-subworkflow-call/executions/e203bc96-a1cf-47ba-b6de-f3d1b0909664/stepEntries/3", "createTime": "2024-08-15T19:37:44.168659349Z", "updateTime": "2024-08-15T19:37:44.168676547Z", "routine": "square", "step": "retStep", "stepType": "STEP_RETURN", "state": "STATE_SUCCEEDED", "entryId": "3", "navigationInfo": { "parent": "1", "next": "4", "previous": "2" }, "variableData": { "variables": { "x": 10, "y": 100 } } }, { "name": "projects/1051295516635/locations/us-central1/workflows/workflow-subworkflow-call/executions/e203bc96-a1cf-47ba-b6de-f3d1b0909664/stepEntries/4", "createTime": "2024-08-15T19:37:44.168693503Z", "updateTime": "2024-08-15T19:37:44.168702324Z", "routine": "main", "step": "retStep", "stepType": "STEP_RETURN", "state": "STATE_SUCCEEDED", "entryId": "4", "navigationInfo": { "previous": "3" }, "variableData": { "variables": { "t": 100 } } } ], "totalSize": 4 }
含有失敗步驟項目的工作流程
工作流程
YAML
- tryStep: try: return: ${1 / 0} except: return: 0
JSON
[ { "tryStep": { "try": { "return": "${1 / 0}" }, "except": { "return": 0 } } } ]
圖表
步驟項目
{ "stepEntries": [ { "name": "projects/1051295516635/locations/us-central1/workflows/workflow-failed-step/executions/a19d20d1-e446-4d37-b548-8005297b7d3d/stepEntries/1", "createTime": "2024-08-15T19:42:51.415433810Z", "updateTime": "2024-08-15T19:42:51.416106923Z", "routine": "main", "step": "tryStep", "stepType": "STEP_TRY_RETRY_EXCEPT", "state": "STATE_SUCCEEDED", "entryId": "1", "navigationInfo": { "children": [ "2", "4" ], "next": "2" }, "variableData": {} }, { "name": "projects/1051295516635/locations/us-central1/workflows/workflow-failed-step/executions/a19d20d1-e446-4d37-b548-8005297b7d3d/stepEntries/2", "createTime": "2024-08-15T19:42:51.415439617Z", "updateTime": "2024-08-15T19:42:51.416065206Z", "routine": "main", "step": "tryStep", "stepType": "STEP_TRY", "state": "STATE_FAILED", "entryId": "2", "navigationInfo": { "children": [ "3" ], "parent": "1", "next": "3", "previous": "1" }, "variableData": {} }, { "name": "projects/1051295516635/locations/us-central1/workflows/workflow-failed-step/executions/a19d20d1-e446-4d37-b548-8005297b7d3d/stepEntries/3", "createTime": "2024-08-15T19:42:51.415441815Z", "updateTime": "2024-08-15T19:42:51.416064665Z", "routine": "main", "step": "tryStep.try", "stepType": "STEP_RETURN", "state": "STATE_FAILED", "exception": { "payload": "{\"message\":\"ZeroDivisionError: division by zero\",\"tags\":[\"ZeroDivisionError\",\"ArithmeticError\"]}" }, "entryId": "3", "navigationInfo": { "parent": "2", "next": "4", "previous": "2" }, "variableData": {} }, { "name": "projects/1051295516635/locations/us-central1/workflows/workflow-failed-step/executions/a19d20d1-e446-4d37-b548-8005297b7d3d/stepEntries/4", "createTime": "2024-08-15T19:42:51.416071869Z", "updateTime": "2024-08-15T19:42:51.416106840Z", "routine": "main", "step": "tryStep", "stepType": "STEP_EXCEPT", "state": "STATE_SUCCEEDED", "entryId": "4", "navigationInfo": { "children": [ "5" ], "parent": "1", "next": "5", "previous": "3" }, "variableData": {} }, { "name": "projects/1051295516635/locations/us-central1/workflows/workflow-failed-step/executions/a19d20d1-e446-4d37-b548-8005297b7d3d/stepEntries/5", "createTime": "2024-08-15T19:42:51.416087217Z", "updateTime": "2024-08-15T19:42:51.416106742Z", "routine": "main", "step": "tryStep.except", "stepType": "STEP_RETURN", "state": "STATE_SUCCEEDED", "entryId": "5", "navigationInfo": { "parent": "4", "previous": "4" }, "variableData": {} } ], "totalSize": 5 }