Vous pouvez récupérer l'historique d'une exécution de workflow spécifiée sous la forme d'une liste d'entrées d'étape. Chaque entrée fournit des informations qui peuvent vous aider lors de l'analyse, du débogage ou de l'optimisation d'un workflow. Par exemple, vous pouvez confirmer les étapes qui ont été réellement exécutées, et déterminer la durée et la réussite d'une étape. Cela peut être particulièrement utile lors du débogage d'un workflow non linéaire volumineux ou complexe (avec de nombreuses branches parallèles, par exemple).
Une entrée d'étape représente une étape réelle dans le code source (par exemple, assign
ou call
) ou un bloc d'instructions (par exemple, une boucle for
ou un bloc try/retry/except
). Pour obtenir la liste complète des types d'étapes, consultez StepType.
Comment récupérer des entrées d'étape
Vous pouvez récupérer des entrées d'étape en envoyant une requête à l'API REST Workflow Executions ou via la console Google Cloud:
Console Google Cloud. Dans ce document, consultez la section Afficher les entrées des étapes dans la console.
En plus de répertorier les entrées d'étape et leurs détails, la console fournit une représentation graphique des étapes d'exécution, ce qui facilite la visualisation et l'analyse du chemin d'exécution d'un workflow.
API REST Workflow Executions : dans ce document, consultez les sections Récupérer une entrée d'étape et Répertorier les entrées d'étape.
Informations sur l'entrée de l'étape
Une entrée d'étape comprend les informations suivantes. Pour en savoir plus, consultez les exemples dans ce document.
Nom | Nom complet de la ressource de l'entrée d'étape, qui est un ID unique au format suivant, et où STEPENTRY_ID est un compteur croissant:
Exemple :
|
Heures de création et de mise à jour | Horodatage de l'heure de création de l'entrée de l'étape et de sa dernière mise à jour. Si une entrée d'étape est terminée, updateTime indique l'heure d'achèvement.
|
Noms des routines et des pas | Noms de la routine et de l'étape à laquelle appartient l'entrée d'étape. Un nom de routine est le nom du sous-workflow défini dans le code source YAML ou JSON. Le nom de la routine de premier niveau est main .
|
État et type de progression | État de l'entrée d'étape (par exemple, si l'entrée a réussi ou échoué, ou si une entrée d'étape est en cours et le type de progression). Pour obtenir la liste complète des états et des types de progression, consultez les sections État et ProgressType. |
Informations de navigation | Position de l'entrée d'étape afin que vous puissiez mieux comprendre la hiérarchie et le flux du workflow (par exemple, quelles entrées d'étape viennent avant ou après l'entrée actuelle, ou qui sont des parents ou des enfants de l'entrée d'étape). Pour en savoir plus, consultez NavigationInfo. |
Métadonnées | Données liées à une entrée d'étape itérative, incluant un ID qui indique le thread enfant (par exemple, quel STEP_PARALLEL_BRANCH_ENTRY dans STEP_PARALLEL_BRANCH ) ou l'itération d'une boucle for (par exemple, quelle STEP_FOR_ITERATION dans STEP_FOR ). Pour en savoir plus, consultez StepEntryMetadata.
|
Exceptions | Charge utile liée à toute exception et qui fournit une description de la raison de l'échec d'une entrée d'étape. |
Afficher les entrées d'étape dans la console
Vous pouvez afficher les entrées d'une exécution de workflow spécifique dans la console Google Cloud.
Dans la console Google Cloud, accédez à la page Workflows :
Cliquez sur le nom du workflow pour accéder à la page Détails du workflow.
Pour en savoir plus sur une exécution particulière, cliquez sur son ID.
L'onglet Summary (Résumé) fournit des informations sur l'exécution globale, y compris toute exception ayant entraîné l'échec de l'exécution. Pour en savoir plus, consultez la section Messages d'erreur d'exécution.
Pour afficher l'historique des exécutions du workflow sous la forme d'une liste d'entrées d'étape, cliquez sur l'onglet Étapes.
Toutes les entrées d'étape de l'exécution du workflow sont listées.
Pour filtrer les entrées de l'étape, utilisez le champ Filtrer en haut du tableau pour sélectionner une propriété et une valeur (par exemple,
State: Failed
).Pour afficher les liens des entrées d'étape Parent, Enfants, Suivant et Précédent, cliquez sur une entrée spécifique.
Si vous cliquez sur un lien, les autres liens sont automatiquement mis à jour. Par exemple, Parent est associé au parent de l'entrée de l'étape sur laquelle vous avez cliqué.
Le panneau Visualization (Visualisation) fournit une représentation graphique des étapes du workflow et vous aide à comprendre son cheminement.
Notez que la visualisation peut différer des entrées de l'étape. Par exemple, un bloc
for
est représenté comme un composant unique dans la visualisation. Toutefois, en fonction du nombre d'itérations, il peut y avoir plusieurs entrées d'étape.Vous pouvez effectuer les opérations suivantes dans le panneau:
- Faire un zoom avant ou arrière dans la visualisation
- Réduire ou développer les entrées de l'étape parente
- Cliquez sur une entrée d'étape et affichez ses entrées précédentes et suivantes.
- Confirmez les entrées d'étape réussies et ayant échoué, comme indiqué par une coche verte ou un point d'exclamation rouge.
- Fermez le panneau Visualisation en cliquant sur la flèche de développement . Cliquez à nouveau dessus pour l'ouvrir.
Avant de récupérer une entrée d'étape
Pour obtenir les autorisations dont vous avez besoin pour récupérer une entrée d'étape, demandez à votre administrateur de vous attribuer le rôle IAM d'administrateur de workflows (workflows.stepEntries.get
) sur votre projet.
Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
Récupérer une entrée d'étape
Pour récupérer une entrée d'étape pour une exécution de workflow donnée, utilisez la méthode projects.locations.workflows.executions.stepEntries.get
.
Avant d'utiliser les données de requête, effectuez les remplacements suivants:
PROJECT_NUMBER
: numéro de votre projet Google Cloud indiqué sur la page Paramètres IAM et administration.LOCATION
: région dans laquelle le workflow est déployé (par exemple,us-central1
).WORKFLOW_ID
: nom défini par l'utilisateur pour le workflow (par exemple,myFirstWorkflow
).EXECUTION_ID
: ID unique d'exécution d'un workflow qui est renvoyé après l'exécution d'un workflow.STEPENTRY_ID
: identifiant unique d'une entrée d'étape (par exemple,1
).
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "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" } }
Avant de lister les entrées d'étape
Pour obtenir les autorisations dont vous avez besoin pour répertorier les entrées d'étape, demandez à votre administrateur de vous attribuer le rôle IAM d'administrateur de workflows (workflows.stepEntries.list
) sur votre projet.
Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
Répertorier les entrées d'étape
Pour répertorier les entrées d'étape d'une exécution de workflow donnée, utilisez la méthode projects.locations.workflows.executions.stepEntries.list
. Par défaut, les résultats sont renvoyés dans l'ordre croissant du createTime
des entrées d'étape.
Avant d'utiliser les données de requête, effectuez les remplacements suivants:
PROJECT_NUMBER
: numéro de votre projet Google Cloud indiqué sur la page Paramètres IAM et administration.LOCATION
: région dans laquelle le workflow est déployé (par exemple,us-central1
).WORKFLOW_ID
: nom défini par l'utilisateur pour le workflow (par exemple,myFirstWorkflow
).EXECUTION_ID
: ID unique d'exécution d'un workflow qui est renvoyé après l'exécution d'un workflow.
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "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 }
Examples
Workflow avec un bloc for
Workflow
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}" } } ]
Diagramme
Entrées d'étape
{ "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 }
Workflow avec un appel de sous-workflow
Workflow
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}" } } ] } }
Diagramme
Entrées d'étape
{ "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 avec une entrée d'étape ayant échoué
Workflow
YAML
- tryStep: try: return: ${1 / 0} except: return: 0
JSON
[ { "tryStep": { "try": { "return": "${1 / 0}" }, "except": { "return": 0 } } } ]
Diagramme
Entrées d'étape
{ "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 }
Étapes suivantes
- Présentation du débogage
- Surveiller les workflows
- Résoudre les problèmes
- Problèmes connus concernant Workflows