실행 단계 기록 보기

지정된 워크플로 실행 기록을 단계 항목 목록으로 검색할 수 있습니다. 각 단계 항목은 워크플로를 분석, 디버깅, 최적화할 때 도움이 될 수 있는 정보를 제공합니다. 예를 들어 실제로 실행된 단계를 확인하고 단계의 기간 및 성공 여부를 확인할 수 있습니다. 이는 크거나 복잡한 비선형 워크플로(예: 여러 병렬 브랜치가 있는 워크플로)를 디버깅할 때 특히 유용합니다.

단계 항목은 소스 코드의 실제 단계(예: assign 또는 call) 또는 안내 블록(예: for 루프 또는 try/retry/except 블록)을 나타냅니다. 단계 유형의 전체 목록은 StepType을 참조하세요.

단계 항목을 검색하는 방법

Workflow Executions REST API에 요청을 보내거나 Google Cloud 콘솔을 통해 단계 항목을 검색할 수 있습니다.

  • Google Cloud 콘솔 - 이 문서의 콘솔에서 단계 항목 보기를 참조하세요.

    콘솔은 단계 항목과 세부정보를 나열하는 것 외에도 실행 단계를 그래픽으로 표시하여 워크플로 실행 경로를 쉽게 보고 분석할 수 있습니다.

  • Workflow Executions REST API—이 문서의 단계 항목 검색단계 항목 나열을 참조하세요.

단계 항목 정보

단계 항목에는 다음 정보가 포함됩니다. 자세한 내용은 이 문서의 예시를 참조하세요.

이름 단계 항목의 전체 리소스 이름으로, 다음과 같은 형식의 고유 ID이며 여기서 STEPENTRY_ID는 증가하는 카운터입니다.
projects/PROJECT_NUMBER/locations/LOCATION/workflows/WORKFLOW_ID/executions/EXECUTION_ID/stepEntries/STEPENTRY_ID
예:
projects/123456789012/locations/us-central1/workflows/myFirstWorkflow/executions/ae8a66a1-cefa-4d16-8a2f-d50c712d8ef1/stepEntries/2
생성 및 업데이트 시간 단계 항목의 생성 시간 및 최근 업데이트의 타임스탬프입니다. 단계 항목이 완료된 경우 updateTime은 완료 시간을 나타냅니다.
루틴 및 단계 이름 단계 항목이 속한 루틴 및 단계의 이름입니다. 루틴 이름은 YAML 또는 JSON 소스 코드에 정의된 하위 워크플로 이름입니다. 최상위 루틴 이름은 main입니다.
상태 및 진행률 유형 단계 항목의 상태(예: 항목의 성공 또는 실패, 단계 항목이 진행 중인 경우 및 진행 유형)입니다. 상태와 진행률 유형의 전체 목록은 StateProgressType을 참조하세요.
탐색 정보 워크플로의 계층 구조와 흐름을 더 잘 이해할 수 있는 단계 항목의 위치(예: 현재 단계 항목의 앞이나 뒤에 오는 단계 항목 또는 단계 항목의 상위 또는 하위 요소)입니다. 자세한 내용은 NavigationInfo를 참조하세요.
메타데이터 하위 스레드(예: STEP_PARALLEL_BRANCHSTEP_PARALLEL_BRANCH_ENTRY) 또는 for 루프의 반복(예: STEP_FORSTEP_FOR_ITERATION)을 나타내는 ID를 포함하는 반복 단계 항목과 관련된 데이터입니다. 자세한 내용은 StepEntryMetadata를 참조하세요.
예외 예외와 관련이 있으며 단계 항목이 실패한 이유에 대한 설명을 제공하는 페이로드입니다.

콘솔에서 단계 항목 보기

Google Cloud 콘솔에서 특정 워크플로 실행의 단계 항목을 볼 수 있습니다.

  1. Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.

    Workflows로 이동

  2. 워크플로 이름을 클릭하여 워크플로 세부정보 페이지로 이동합니다.

  3. 특정 실행에 대한 세부정보를 보려면 실행 ID를 클릭합니다.

    요약 탭에는 실행 실패로 이어진 예외를 포함하여 전체 실행 관련 정보가 제공됩니다. 자세한 내용은 실행 오류 메시지를 참조하세요.

  4. 워크플로 실행 기록을 단계 항목 목록으로 보려면 단계 탭을 클릭합니다.

    워크플로 실행의 모든 단계 항목이 나열됩니다.

  5. 단계 항목을 필터링하려면 테이블 상단의 필터 필드를 사용하여 속성과 값을 선택합니다(예: State: Failed).

  6. 상위, 하위, 다음, 이전 단계 항목의 링크를 표시하려면 특정 단계 항목을 클릭합니다.

    링크를 클릭하면 다른 링크가 자동으로 업데이트됩니다. 예를 들어 상위는 클릭한 단계 항목의 상위 요소에 연결됩니다.

  7. 시각화 패널은 워크플로 단계를 그래픽으로 표시하고 워크플로 경로를 이해하는 데 도움이 됩니다.

    시각화 패널 예시

    다이어그램을 클릭하여 확대:

    실패한 단계의 워크플로를 표시하는 시각화 패널

    시각화는 단계 항목과 다를 수 있습니다. 예를 들어 for 블록은 시각화에서 단일 구성요소로 표현됩니다. 하지만 반복 횟수에 따라 여러 단계 항목이 있을 수 있습니다.

    패널에서 다음 작업을 할 수 있습니다.

    • 시각화 확대 또는 축소
    • 상위 단계 항목 접기 또는 펼치기
    • 단계 항목을 클릭하고 이전 및 다음 항목 보기
    • 녹색 체크표시 또는 빨간색 느낌표로 표시된 성공 및 실패한 단계 항목 확인
    • 펼치기 화살표를 클릭하여 시각화 패널 닫기, 다시 클릭하여 패널 열기

단계 항목을 검색하기 전에

단계 항목을 검색하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 Workflows 관리자(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": "2023-10-19T13:49:56.522717646Z",
  "updateTime": "2023-10-19T13:49:56.525439354Z",
  "routine": "main",
  "step": "checkSearchTermInInput",
  "stepType": "STEP_CONDITION",
  "state": "STATE_SUCCEEDED",
  "entryId": "2",
  "navigationInfo": {
    "children": [
      "3"
    ],
    "parent": "1",
    "next": "3",
    "previous": "1"
  }
}

단계 항목을 나열하기 전에

단계 항목을 나열하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 Workflows 관리자(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": "2023-10-19T13:49:56.522705770Z",
      "updateTime": "2023-10-19T13:49:56.525439429Z",
      "routine": "main",
      "step": "checkSearchTermInInput",
      "stepType": "STEP_SWITCH",
      "state": "STATE_SUCCEEDED",
      "entryId": "1",
      "navigationInfo": {
        "children": [
          "2"
        ],
        "next": "2"
      }
    },
    {
      "name": "projects/PROJECT_NUMBER/locations/LOCATION/workflows/WORKFLOW_ID/executions/EXECUTION_ID/stepEntries/2",
      "createTime": "2023-10-19T13:49:56.522717646Z",
      "updateTime": "2023-10-19T13:49:56.525439354Z",
      "routine": "main",
      "step": "checkSearchTermInInput",
      "stepType": "STEP_CONDITION",
      "state": "STATE_SUCCEEDED",
      "entryId": "2",
      "navigationInfo": {
        "children": [
          "3"
        ],
        "parent": "1",
        "next": "3",
        "previous": "1"
      }
    },
    {
      "name": "projects/PROJECT_NUMBER/locations/LOCATION/workflows/WORKFLOW_ID/executions/EXECUTION_ID/stepEntries/3",
      "createTime": "2023-10-19T13:49:56.525379814Z",
      "updateTime": "2023-10-19T13:49:56.525439285Z",
      "routine": "main",
      "step": "checkSearchTermInInput.condition1",
      "stepType": "STEP_ASSIGN",
      "state": "STATE_SUCCEEDED",
      "entryId": "3",
      "navigationInfo": {
        "parent": "2",
        "next": "4",
        "previous": "2"
      }
    },
    {
      "name": "projects/PROJECT_NUMBER/locations/LOCATION/workflows/WORKFLOW_ID/executions/EXECUTION_ID/stepEntries/4",
      "createTime": "2023-10-19T13:49:56.525440360Z",
      "updateTime": "2023-10-19T13:49:56.716973793Z",
      "routine": "main",
      "step": "readWikipedia",
      "stepType": "STEP_CALL",
      "state": "STATE_SUCCEEDED",
      "entryId": "4",
      "navigationInfo": {
        "next": "5",
        "previous": "3"
      }
    },
    {
      "name": "projects/PROJECT_NUMBER/locations/LOCATION/workflows/WORKFLOW_ID/executions/EXECUTION_ID/stepEntries/5",
      "createTime": "2023-10-19T13:49:56.717263008Z",
      "updateTime": "2023-10-19T13:49:56.717353199Z",
      "routine": "main",
      "step": "returnOutput",
      "stepType": "STEP_RETURN",
      "state": "STATE_SUCCEEDED",
      "entryId": "5",
      "navigationInfo": {
        "previous": "4"
      }
    }
  ],
  "totalSize": 5
}

예시

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/200478149810/locations/us-central1/workflows/ck-for-block/executions/74785b43-5b9f-4adf-bde7-a9880d0e100a/stepEntries/1",
      "createTime": "2023-10-20T17:19:37.889232683Z",
      "updateTime": "2023-10-20T17:19:37.889275457Z",
      "routine": "main",
      "step": "assignStep",
      "stepType": "STEP_ASSIGN",
      "state": "STATE_SUCCEEDED",
      "entryId": "1",
      "navigationInfo": {
        "next": "2"
      }
    },
    {
      "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/74785b43-5b9f-4adf-bde7-a9880d0e100a/stepEntries/2",
      "createTime": "2023-10-20T17:19:37.889276124Z",
      "updateTime": "2023-10-20T17:19:37.889474759Z",
      "routine": "main",
      "step": "forStep",
      "stepType": "STEP_FOR",
      "state": "STATE_SUCCEEDED",
      "entryId": "2",
      "navigationInfo": {
        "children": [
          "3",
          "5"
        ],
        "next": "3",
        "previous": "1"
      }
    },
    {
      "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/74785b43-5b9f-4adf-bde7-a9880d0e100a/stepEntries/3",
      "createTime": "2023-10-20T17:19:37.889313107Z",
      "updateTime": "2023-10-20T17:19:37.889382353Z",
      "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"
      }
    },
    {
      "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/74785b43-5b9f-4adf-bde7-a9880d0e100a/stepEntries/4",
      "createTime": "2023-10-20T17:19:37.889317653Z",
      "updateTime": "2023-10-20T17:19:37.889382265Z",
      "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"
      }
    },
    {
      "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/74785b43-5b9f-4adf-bde7-a9880d0e100a/stepEntries/5",
      "createTime": "2023-10-20T17:19:37.889383134Z",
      "updateTime": "2023-10-20T17:19:37.889474707Z",
      "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"
      }
    },
    {
      "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/74785b43-5b9f-4adf-bde7-a9880d0e100a/stepEntries/6",
      "createTime": "2023-10-20T17:19:37.889384893Z",
      "updateTime": "2023-10-20T17:19:37.889474649Z",
      "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"
      }
    },
    {
      "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/74785b43-5b9f-4adf-bde7-a9880d0e100a/stepEntries/7",
      "createTime": "2023-10-20T17:19:37.889475882Z",
      "updateTime": "2023-10-20T17:19:37.889483477Z",
      "routine": "main",
      "step": "returnStep",
      "stepType": "STEP_RETURN",
      "state": "STATE_SUCCEEDED",
      "entryId": "7",
      "navigationInfo": {
        "previous": "6"
      }
    }
  ],
  "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/200478149810/locations/us-central1/workflows/ck-for-block/executions/69da2159-1039-4f88-8d8a-12baf398f372/stepEntries/1",
      "createTime": "2023-10-21T15:25:55.406007695Z",
      "updateTime": "2023-10-21T15:25:55.412984492Z",
      "routine": "main",
      "step": "callStep",
      "stepType": "STEP_CALL",
      "state": "STATE_SUCCEEDED",
      "entryId": "1",
      "navigationInfo": {
        "children": [
          "2",
          "3"
        ],
        "next": "2"
      }
    },
    {
      "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/69da2159-1039-4f88-8d8a-12baf398f372/stepEntries/2",
      "createTime": "2023-10-21T15:25:55.412921902Z",
      "updateTime": "2023-10-21T15:25:55.412967631Z",
      "routine": "square",
      "step": "assignStep",
      "stepType": "STEP_ASSIGN",
      "state": "STATE_SUCCEEDED",
      "entryId": "2",
      "navigationInfo": {
        "parent": "1",
        "next": "3",
        "previous": "1"
      }
    },
    {
      "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/69da2159-1039-4f88-8d8a-12baf398f372/stepEntries/3",
      "createTime": "2023-10-21T15:25:55.412968712Z",
      "updateTime": "2023-10-21T15:25:55.412978913Z",
      "routine": "square",
      "step": "retStep",
      "stepType": "STEP_RETURN",
      "state": "STATE_SUCCEEDED",
      "entryId": "3",
      "navigationInfo": {
        "parent": "1",
        "next": "4",
        "previous": "2"
      }
    },
    {
      "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/69da2159-1039-4f88-8d8a-12baf398f372/stepEntries/4",
      "createTime": "2023-10-21T15:25:55.412992302Z",
      "updateTime": "2023-10-21T15:25:55.412998396Z",
      "routine": "main",
      "step": "retStep",
      "stepType": "STEP_RETURN",
      "state": "STATE_SUCCEEDED",
      "entryId": "4",
      "navigationInfo": {
        "previous": "3"
      }
    }
  ],
  "totalSize": 4
}

실패한 단계 항목이 있는 워크플로

워크플로

YAML

- tryStep:
    try:
      return: ${1 / 0}
    except:
      return: 0

JSON

[
  {
    "tryStep": {
      "try": {
        "return": "${1 / 0}"
      },
      "except": {
        "return": 0
      }
    }
  }
]

다이어그램

실패한 단계 항목이 있는 워크플로

단계 항목

{
  "stepEntries": [
    {
      "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/8ec49dae-ab0c-4b55-b1c4-b809244be913/stepEntries/1",
      "createTime": "2023-10-20T18:06:50.395938752Z",
      "updateTime": "2023-10-20T18:06:50.396525946Z",
      "routine": "main",
      "step": "tryStep",
      "stepType": "STEP_TRY_RETRY_EXCEPT",
      "state": "STATE_SUCCEEDED",
      "entryId": "1",
      "navigationInfo": {
        "children": [
          "2",
          "4"
        ],
        "next": "2"
      }
    },
    {
      "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/8ec49dae-ab0c-4b55-b1c4-b809244be913/stepEntries/2",
      "createTime": "2023-10-20T18:06:50.395942598Z",
      "updateTime": "2023-10-20T18:06:50.396497992Z",
      "routine": "main",
      "step": "tryStep",
      "stepType": "STEP_TRY",
      "state": "STATE_FAILED",
      "entryId": "2",
      "navigationInfo": {
        "children": [
          "3"
        ],
        "parent": "1",
        "next": "3",
        "previous": "1"
      }
    },
    {
      "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/8ec49dae-ab0c-4b55-b1c4-b809244be913/stepEntries/3",
      "createTime": "2023-10-20T18:06:50.395944871Z",
      "updateTime": "2023-10-20T18:06:50.396497499Z",
      "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"
      }
    },
    {
      "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/8ec49dae-ab0c-4b55-b1c4-b809244be913/stepEntries/4",
      "createTime": "2023-10-20T18:06:50.396506860Z",
      "updateTime": "2023-10-20T18:06:50.396525900Z",
      "routine": "main",
      "step": "tryStep",
      "stepType": "STEP_EXCEPT",
      "state": "STATE_SUCCEEDED",
      "entryId": "4",
      "navigationInfo": {
        "children": [
          "5"
        ],
        "parent": "1",
        "next": "5",
        "previous": "3"
      }
    },
    {
      "name": "projects/200478149810/locations/us-central1/workflows/ck-for-block/executions/8ec49dae-ab0c-4b55-b1c4-b809244be913/stepEntries/5",
      "createTime": "2023-10-20T18:06:50.396516994Z",
      "updateTime": "2023-10-20T18:06:50.396525818Z",
      "routine": "main",
      "step": "tryStep.except",
      "stepType": "STEP_RETURN",
      "state": "STATE_SUCCEEDED",
      "entryId": "5",
      "navigationInfo": {
        "parent": "4",
        "previous": "4"
      }
    }
  ],
  "totalSize": 5
}

다음 단계