Visualizza la cronologia dei passaggi di esecuzione

Puoi recuperare la cronologia di un'esecuzione specificata di un flusso di lavoro sotto forma di elenco di voci dei passaggi. Ogni voce di passaggio fornisce informazioni che possono aiutarti durante l'analisi, il debug o l'ottimizzazione di un flusso di lavoro. Ad esempio, puoi confermare i passaggi effettivamente eseguiti e determinare la durata e l'esito positivo di un passaggio. Ciò può essere particolarmente utile durante il debug di un flusso di lavoro non lineare di grandi dimensioni o complicato (ad esempio con molti rami paralleli).

Una voce di passaggio rappresenta un passaggio effettivo nel codice sorgente (ad esempio assign o call) o un blocco di istruzioni (ad esempio un loop for o un blocco try/retry/except). Per un elenco completo dei tipi di passaggi, vedi 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'immissione del passaggio

Una voce relativa a un passaggio include le seguenti informazioni. Per maggiori dettagli, consulta la sezione Esempi in questo documento.

Nome Nome completo della risorsa della voce del passaggio, che corrisponde a un ID univoco con il formato seguente, 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
Orari di creazione e aggiornamento Timestamp dell'ora di creazione della voce del passaggio e del suo aggiornamento più recente. Se l'inserimento di un passaggio è stato completato, updateTime indica il tempo di completamento.
Nomi di routine e passi Nomi della routine e del passaggio a cui appartiene la voce del passaggio. Il nome di una routine è il nome del flusso di lavoro secondario 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 l'inserimento è riuscito o meno oppure se è in corso l'inserimento di un passaggio 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 in modo da poter comprendere meglio la gerarchia e il flusso del flusso di lavoro, ad esempio quali voci di passaggio vengono prima o dopo la voce del passaggio corrente oppure quali sono i principali o secondari della voce del passaggio. Per maggiori dettagli, consulta NavigationInfo.
Metadati Dati relativi a una voce di passaggio iterativa che includono un ID che indica il thread secondario (ad esempio, STEP_PARALLEL_BRANCH_ENTRY in STEP_PARALLEL_BRANCH) o l'iterazione di un loop for (ad esempio STEP_FOR_ITERATION in STEP_FOR). Per maggiori dettagli, consulta StepEntryMetadata.
Eccezioni Payload relativo a eventuali eccezioni e che fornisce una descrizione del motivo per cui l'immissione di un passaggio non è riuscita.

Visualizza le voci dei passaggi nella console

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

  1. Nella console Google Cloud, vai alla pagina Flussi di lavoro.

    Vai a Workflows

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

  3. Per informazioni dettagliate su una determinata esecuzione, fai clic sul relativo ID esecuzione.

    Nella scheda Riepilogo, vengono fornite informazioni sull'esecuzione complessiva, incluse eventuali eccezioni che hanno portato alla mancata esecuzione. Per ulteriori informazioni, consulta Messaggi di errore relativi all'esecuzione.

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

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

  5. Per filtrare le voci dei passaggi, 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 di qualsiasi voce dei passaggi Principale, Figlio, Successivo e Precedente, fai clic sulla voce di un passaggio specifico.

    Se fai clic su un link, gli altri link vengono aggiornati automaticamente. Ad esempio, Genitore rimanderà alla voce 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 comprenderne il percorso.

    Esempio di riquadro di visualizzazione

    Fai clic sul diagramma per ingrandirlo:

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

    Tieni presente che la visualizzazione può differire dalle voci dei passaggi. Ad esempio, un blocco for viene rappresentato come un singolo componente nella visualizzazione. Tuttavia, a seconda del numero di iterazioni, potrebbero essere presenti più voci relative ai passaggi.

    Nel riquadro puoi effettuare le seguenti operazioni:

    • Aumenta o diminuisci lo zoom della visualizzazione
    • Comprimi o espandi le voci dei passaggi principali
    • Fai clic sulla voce di un passaggio e visualizza le voci precedenti e successive
    • Conferma le voci dei passaggi riuscite e non riuscite, 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 aprire il riquadro

Prima di recuperare una voce di passaggio

Per ottenere le autorizzazioni necessarie per recuperare una voce di passaggio, chiedi all'amministratore di concederti il ruolo IAM Amministratore di Workflows (workflows.stepEntries.get) sul tuo progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Potresti anche essere in grado di ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Recupera una voce di passaggio

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

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

  • PROJECT_NUMBER: il numero del tuo progetto Google Cloud elencato nella pagina Impostazioni IAM e amministrazione.
  • LOCATION: la regione in cui viene eseguito il deployment del flusso di lavoro, ad esempio us-central1.
  • WORKFLOW_ID: nome definito dall'utente per il flusso di lavoro, ad esempio myFirstWorkflow.
  • EXECUTION_ID: l'ID univoco per l'esecuzione di un flusso di lavoro, che viene restituito dopo l'esecuzione di un flusso di lavoro.
  • STEPENTRY_ID: l'ID univoco di una voce 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 dei passaggi

Per ottenere le autorizzazioni necessarie per elencare le voci dei passaggi, chiedi all'amministratore di concederti il ruolo IAM Amministratore Workflows (workflows.stepEntries.list) sul tuo progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Potresti anche essere in grado di ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Elenco voci dei passaggi

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

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

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

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 il blocco for

Voci dei passaggi

  {
  "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 dei passaggi

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

Flusso di lavoro con voce di 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

Flusso di lavoro con voce di passaggio non riuscita

Voci dei passaggi

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