Puedes recuperar el historial de la ejecución de un flujo de trabajo específico como una lista de entradas de paso. Cada entrada de paso proporciona información que puede ayudarte a analizar, optimizar o depurar un flujo de trabajo. Por ejemplo, puedes confirmar qué pasos se ejecutaron realmente y puedes determinar la duración y el éxito de un paso. Esto puede ser muy útil cuando se depura un flujo de trabajo no lineal grande o complicado (por ejemplo, uno con muchas ramas paralelas).
Una entrada de paso representa un paso real en el código fuente (por ejemplo, assign
o call
) o un bloque de instrucciones (por ejemplo, un bucle for
o un bloque try/retry/except
). Para obtener una lista completa de los tipos de pasos, consulta StepType.
Cómo recuperar entradas de pasos
Para recuperar entradas de pasos, puedes enviar una solicitud a la API de REST de ejecuciones de Workflow o a través de la consola de Google Cloud:
Consola de Google Cloud: en este documento, consulta Consulta las entradas de pasos en la consola.
Además de enumerar las entradas de los pasos y sus detalles, la consola proporciona una representación gráfica de los pasos de ejecución, lo que facilita la visualización y el análisis de la ruta de acceso de la ejecución de un flujo de trabajo.
API de REST de ejecuciones de flujos de trabajo: en este documento, consulta Recupera una entrada de paso y Enumera las entradas de pasos.
Información para ingresar los pasos
La entrada de un paso incluye la siguiente información. Para obtener más detalles, en este documento, consulta Ejemplos.
Nombre | Es el nombre completo del recurso de la entrada del paso, que es un ID único con el siguiente formato, y en el que STEPENTRY_ID es un contador creciente: . Por ejemplo:
|
Horas de creación y actualización | Marcas de tiempo para la hora de creación de la entrada del paso y su actualización
más reciente. Si se completó la entrada de un paso, updateTime indica el tiempo de finalización.
|
Nombres de pasos y rutina | Nombres de la rutina y el paso al que pertenece la entrada del paso. El
nombre de una rutina es el nombre del subflujo de trabajo definido en el código fuente YAML o
JSON. El nombre de la rutina de nivel superior es main .
|
Estado y tipo de progreso | Estado de la entrada del paso (por ejemplo, si la entrada se realizó correctamente o falló, o si una entrada de paso está en curso y el tipo de progreso) Para obtener una lista completa de los estados y tipos de progreso, consulta State y ProgressType. |
Información de navegación | Posición de la entrada del paso para que puedas comprender mejor la jerarquía y el flujo del flujo de trabajo (por ejemplo, qué entradas de paso están antes o después de la entrada del paso actual, o cuáles son elementos superiores o secundarios de la entrada del paso). Para obtener más información, consulta NavigationInfo. |
Metadatos | Datos relacionados con una entrada de paso iterativa, incluido un ID que indica el subproceso secundario (por ejemplo, qué STEP_PARALLEL_BRANCH_ENTRY en STEP_PARALLEL_BRANCH ) o la iteración de un bucle for (por ejemplo, qué STEP_FOR_ITERATION en STEP_FOR ). Para obtener más información, consulta StepEntryMetadata.
|
Excepciones | Es una carga útil relacionada con cualquier excepción y que proporciona una descripción de por qué falló una entrada de paso. |
Visualiza las entradas de pasos en la consola
Puedes ver las entradas de los pasos de la ejecución de un flujo de trabajo específico en la consola de Google Cloud.
En la consola de Google Cloud, ve a la página Workflows.
Haz clic en el nombre del flujo de trabajo para ir a la página Detalles del flujo de trabajo.
Para obtener detalles sobre una ejecución en particular, haz clic en su ID de ejecución.
En la pestaña Summary, se proporciona información sobre la ejecución general, incluida cualquier excepción que haya generado la falla de la ejecución. Para obtener más información, consulta Mensajes de error de ejecución.
Para ver el historial de ejecución del flujo de trabajo como una lista de entradas de pasos, haz clic en la pestaña Pasos.
Se enumeran todas las entradas de paso para la ejecución del flujo de trabajo.
Para filtrar las entradas de los pasos, usa el campo Filter en la parte superior de la tabla para seleccionar una propiedad y un valor, por ejemplo,
State: Failed
.Para mostrar vínculos de cualquier entrada de paso Parent, Child, Next y Previous, haz clic en una entrada de paso específica.
Si haces clic en un vínculo, los demás vínculos se actualizarán automáticamente. Por ejemplo, Parent se vinculará con el elemento superior de la entrada del paso en la que hiciste clic.
El panel Visualization proporciona una representación gráfica de los pasos en el flujo de trabajo y te ayuda a comprender su ruta.
Ten en cuenta que la visualización puede diferir de las entradas del paso. Por ejemplo, un bloque
for
se representa como un solo componente en la visualización. Sin embargo, según la cantidad de iteraciones, puede haber varias entradas de paso.En el panel, puedes hacer lo siguiente:
- Acerca o aleja la visualización
- Contraer o expandir las entradas de pasos superiores
- Hacer clic en la entrada de un paso y ver las entradas anteriores y siguientes
- Confirmar las entradas de pasos exitosas y fallidas como lo indica una marca de verificación verde o un signo de exclamación rojo
- Para cerrar el panel Visualization, haz clic en la flecha de expansión . Vuelve a hacer clic en ella para abrir el panel.
Antes de recuperar una entrada de paso
Si quieres obtener los permisos que necesitas para recuperar una entrada de paso,
pídele a tu administrador que te otorgue el
rol de IAM de Administrador de flujos de trabajo (workflows.stepEntries.get
)
en tu proyecto.
Para obtener más información sobre cómo otorgar roles, consulta Cómo administrar el acceso.
Es posible que también puedas obtener los permisos necesarios a través de funciones personalizadas o, también, otras funciones predefinidas.
Recupera una entrada de paso
Para recuperar una entrada de paso de la ejecución de un flujo de trabajo determinado, usa el método projects.locations.workflows.executions.stepEntries.get
.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
PROJECT_NUMBER
: Es el número de proyecto de Google Cloud que aparece en la página Configuración de IAM y administración.LOCATION
: Es la región en la que se implementa el flujo de trabajo, por ejemplo,us-central1
.WORKFLOW_ID
: Es el nombre definido por el usuario para el flujo de trabajo, por ejemplo,myFirstWorkflow
.EXECUTION_ID
: Es el ID único para la ejecución de un flujo de trabajo que se muestra después de ejecutar un flujo de trabajo.STEPENTRY_ID
: Es el ID único de una entrada de paso, por ejemplo,1
.
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{ "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" } }
Antes de enumerar las entradas de pasos
Si quieres obtener los permisos que necesitas para enumerar las entradas de pasos,
pídele a tu administrador que te otorgue el
rol de IAM de Administrador de flujos de trabajo (workflows.stepEntries.list
)
en tu proyecto.
Para obtener más información sobre cómo otorgar roles, consulta Cómo administrar el acceso.
Es posible que también puedas obtener los permisos necesarios a través de funciones personalizadas o, también, otras funciones predefinidas.
Enumerar entradas de pasos
Para enumerar las entradas de paso de la ejecución de un flujo de trabajo determinado, usa el método projects.locations.workflows.executions.stepEntries.list
. De forma predeterminada, los resultados se muestran en orden ascendente de createTime
de las entradas del paso.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
PROJECT_NUMBER
: Es el número de proyecto de Google Cloud que aparece en la página Configuración de IAM y administración.LOCATION
: Es la región en la que se implementa el flujo de trabajo, por ejemplo,us-central1
.WORKFLOW_ID
: Es el nombre definido por el usuario para el flujo de trabajo, por ejemplo,myFirstWorkflow
.EXECUTION_ID
: Es el ID único para la ejecución de un flujo de trabajo que se muestra después de ejecutar un flujo de trabajo.
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{ "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 }
Ejemplos
Flujo de trabajo con un bloque for
Flujo de trabajo
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}" } } ]
Diagrama
Entradas de pasos
{ "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 }
Flujo de trabajo con una llamada al subflujo de trabajo
Flujo de trabajo
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}" } } ] } }
Diagrama
Entradas de pasos
{ "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 }
Flujo de trabajo con una entrada de paso con errores
Flujo de trabajo
YAML
- tryStep: try: return: ${1 / 0} except: return: 0
JSON
[ { "tryStep": { "try": { "return": "${1 / 0}" }, "except": { "return": 0 } } } ]
Diagrama
Entradas de pasos
{ "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 }
¿Qué sigue?
- Descripción general de la depuración
- Supervisa flujos de trabajo
- Soluciona problemas
- Problemas conocidos de Workflows