Visualizzare la cronologia dei passaggi di esecuzione

Puoi recuperare la cronologia di un'esecuzione del flusso di lavoro specificata come elenco di voci del passaggio. Ogni voce del passaggio fornisce informazioni che possono aiutarti durante l'analisi, il debugging o l'ottimizzazione di un flusso di lavoro. Ad esempio, puoi verificare quali passaggi sono stati effettivamente eseguiti e determinare la durata e il successo di un passaggio. Ciò può essere particolarmente utile per il debug di un flusso di lavoro non lineare grande o complicato (ad esempio con molti rami paralleli).

Una voce del passaggio rappresenta un passaggio effettivo nel codice sorgente (ad esempio assign o call) o un blocco di istruzioni (ad esempio un ciclo for o un blocco try/retry/except). Per un elenco completo dei tipi di passaggio, consulta StepType.

Come recuperare le voci dei passaggi

Puoi recuperare le voci dei passaggi inviando una richiesta all'API REST Workflow Executions o tramite la console Google Cloud:

Informazioni sull'inserimento del passaggio

Una voce del passaggio include le seguenti informazioni. Per maggiori dettagli, consulta la sezione Esempi di questo documento.

Nome Nome completo della risorsa della voce del passaggio, che è un ID univoco con il seguente formato, dove STEPENTRY_ID è un contatore crescente:
projects/PROJECT_NUMBER/locations/LOCATION/workflows/WORKFLOW_ID/executions/EXECUTION_ID/stepEntries/STEPENTRY_ID
Ad esempio:
projects/123456789012/locations/us-central1/workflows/myFirstWorkflow/executions/ae8a66a1-cefa-4d16-8a2f-d50c712d8ef1/stepEntries/2
Ore di creazione e aggiornamento Timestamp relativi all'ora di creazione della voce del passaggio e al suo ultimo aggiornamento. Se la voce di un passaggio è stata completata, updateTime indica l'ora di completamento.
Nomi di routine e passaggi Nomi della routine e del passaggio a cui appartiene la voce del passaggio. Un nome routine è il nome del sottoworkflow definito nel codice sorgente YAML o JSON. Il nome della routine di primo livello è main.
Stato e tipo di avanzamento Stato della voce del passaggio, ad esempio se la voce è andata a buon fine o meno o se è in corso e il tipo di avanzamento. Per un elenco completo degli stati e dei tipi di avanzamento, consulta State e ProgressType.
Informazioni di navigazione Posizione della voce del passaggio per comprendere meglio la gerarchia e il flusso del flusso di lavoro, ad esempio quali voci del passaggio vengono visualizzate prima o dopo la voce del passaggio corrente o quali sono le voci principali o secondarie della voce del passaggio. Per maggiori dettagli, vedi NavigationInfo.
Metadati Dati relativi a una voce di passaggio iterativo, incluso un ID che indica il thread secondario (ad es. whichSTEP_PARALLEL_BRANCH_ENTRY inSTEP_PARALLEL_BRANCH) o l'iterazione di un loop for (ad es. whichSTEP_FOR_ITERATION inSTEP_FOR). Per maggiori dettagli, consulta StepEntryMetadata.
Eccezioni Payload relativo a eventuali eccezioni e che fornisce una descrizione del motivo per cui una voce del passaggio non è riuscita.

Visualizzare le voci dei passaggi nella console

Puoi visualizzare le voci dei passaggi per un'esecuzione del flusso di lavoro specifica nella console Google Cloud.

  1. Nella console Google Cloud, vai alla pagina Workflows.

    Vai a Flussi di lavoro

  2. Fai clic sul nome del flusso di lavoro per accedere alla pagina Dettagli del flusso di lavoro.

  3. Per i dettagli di una determinata esecuzione, fai clic sul relativo ID esecuzione.

    Nella scheda Riepilogo vengono fornite informazioni sull'esecuzione complessiva, incluse eventuali eccezioni che hanno causato l'errore dell'esecuzione. Per ulteriori informazioni, consulta la sezione Mappe degli errori di esecuzione.

  4. Per visualizzare la cronologia di esecuzione del flusso di lavoro come elenco di voci di passaggio, fai clic sulla scheda Passaggi.

    Sono elencate tutte le voci dei passaggi per l'esecuzione del flusso di lavoro.

  5. Per filtrare le voci del passaggio, utilizza il campo Filtro nella parte superiore della tabella per selezionare una proprietà e un valore, ad esempio State: Failed.

  6. Per visualizzare i link per eventuali voci di passaggio Padre, Figli, Successivo e Precedente, fai clic su una voce di passaggio specifica.

    Se fai clic su un link, gli altri link vengono aggiornati automaticamente. Ad esempio, Padre si collegherà all'elemento principale della voce del passaggio su cui hai fatto clic.

  7. Il riquadro Visualizzazione fornisce una rappresentazione grafica dei passaggi del flusso di lavoro e ti aiuta a comprendere il percorso del flusso di lavoro.

    Esempio di riquadro di visualizzazione

    Fai clic sul diagramma per ingrandirlo:

    Riquadro di visualizzazione che mostra il flusso di lavoro con i passaggi non riusciti

    Tieni presente che la visualizzazione può essere diversa dalle voci dei passaggi. Ad esempio, un bloccofor viene rappresentato come un singolo componente nella visualizzazione. Tuttavia, a seconda del numero di iterazioni, possono essere presenti più voci di passaggio.

    Nel riquadro puoi:

    • Aumentare o diminuire lo zoom della visualizzazione
    • Comprimi o espandi le voci del passaggio principale
    • Fai clic su una voce del passaggio per visualizzare le voci precedenti e successive
    • Conferma le voci dei passaggi riusciti e non riusciti, come indicato da un segno di spunta verde o da un punto esclamativo rosso
    • Chiudi il riquadro Visualizzazione facendo clic sulla freccia di espansione ; fai di nuovo clic per aprirlo.

Prima di recuperare una voce del passaggio

Per ottenere le autorizzazioni necessarie per recuperare una voce del passaggio, chiedi all'amministratore di concederti il ruolo IAM Amministratore di flussi di lavoro (workflows.stepEntries.get) nel progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Recuperare una voce del passaggio

Per recuperare una voce del passaggio per una determinata esecuzione del flusso di lavoro, utilizza il metodo projects.locations.workflows.executions.stepEntries.get.

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • PROJECT_NUMBER: il numero del tuo progetto Google Cloud elencato nella pagina Impostazioni di IAM e amministrazione.
  • LOCATION: la regione in cui è stato eseguito il deployment del workflow, ad esempio us-central1.
  • WORKFLOW_ID: il nome definito dall'utente per il flusso di lavoro, ad esempio myFirstWorkflow.
  • EXECUTION_ID: l'ID univoco di un'esecuzione del flusso di lavoro restituito al termine dell'esecuzione.
  • STEPENTRY_ID: l'ID univoco di un inserimento di passaggio, ad esempio 1.

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "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"
  }
}

Prima di elencare le voci della procedura

Per ottenere le autorizzazioni necessarie per elencare le voci dei passaggi, chiedi all'amministratore di concederti il ruolo IAM Amministratore dei flussi di lavoro (workflows.stepEntries.list) nel progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Elenca le voci dei passaggi

Per elencare le voci dei passaggi per una determinata esecuzione del workflow, utilizza il metodo projects.locations.workflows.executions.stepEntries.list. Per impostazione predefinita, i risultati vengono restituiti in ordine crescente del valore createTime delle voci del passaggio.

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • PROJECT_NUMBER: il numero del tuo progetto Google Cloud elencato nella pagina Impostazioni di IAM e amministrazione.
  • LOCATION: la regione in cui è stato eseguito il deployment del workflow, ad esempio us-central1.
  • WORKFLOW_ID: il nome definito dall'utente per il flusso di lavoro, ad esempio myFirstWorkflow.
  • EXECUTION_ID: l'ID univoco di un'esecuzione del flusso di lavoro restituito al termine dell'esecuzione.

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "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
}

Esempi

Flusso di lavoro con un blocco for

Flusso di lavoro

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}"
    }
  }
]

Diagramma

Flusso di lavoro con un blocco for

Voci del passaggio

  {
  "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
}

Flusso di lavoro con una chiamata di flusso di lavoro secondario

Flusso di lavoro

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}"
        }
      }
    ]
  }
}

Diagramma

Flusso di lavoro con una chiamata di flusso di lavoro secondario

Voci del passaggio

{
  "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
}

Workflow con una voce del passaggio non riuscita

Flusso di lavoro

YAML

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

JSON

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

Diagramma

Workflow con una voce del passaggio non riuscita

Voci del passaggio

{
  "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
}

Passaggi successivi