Supervisa flujos de trabajo

En esta página, se proporciona información para ayudarte a supervisar las implementaciones y ejecuciones del flujo de trabajo.

Accede a los registros de implementación y eliminación de flujos de trabajo

Puedes acceder a los registros de errores relacionados con la implementación y eliminación de un flujo de trabajo en la consola de Google Cloud.

  1. En la consola de Google Cloud, ve a la página Workflows.

    Ir a Workflows

  2. Haz clic en el nombre del flujo de trabajo para mostrar la página Detalles del flujo de trabajo.

  3. Haz clic en la pestaña Registros.

  4. Para filtrar los registros por gravedad, en la lista Predeterminado, selecciona el tipo de registro que se mostrará.

Accede a los resultados de la ejecución del flujo de trabajo

Puedes acceder a los resultados de ejecución del flujo de trabajo en la consola de Google Cloud o mediante gcloud CLI.

Console

  1. En la consola de Google Cloud, ve a la página Workflows.

    Ir a Workflows

  2. Si deseas acceder a los resultados de la ejecución de un flujo de trabajo, haz clic en el nombre del flujo de trabajo para ir a la página Detalles del flujo de trabajo.

  3. Si quieres obtener detalles sobre una ejecución en particular, en la pestaña Ejecuciones, haz clic en el ID de ejecución de la lista para ir a la página Detalles de la ejecución.

  4. En la pestaña Resumen, cada ejecución tiene la siguiente información:

    • Estado de ejecución: Indica el estado final del flujo de trabajo, incluido el paso actual o final.
    • Inicio de la ejecución: Indica cuándo comenzó la ejecución.
    • Finalización de la ejecución: Cuando finalizó la ejecución
    • Duración de la ejecución: Es el tiempo total transcurrido. Esto puede ser un indicio de errores de red o problemas de conectividad.
    • Nombre del flujo de trabajo: Es el nombre del flujo de trabajo.
    • Revisión del flujo de trabajo: Es la revisión actual en el momento de la ejecución.
    • Nivel de registro de llamadas: El nivel de registro de llamadas que se aplica durante la ejecución. En este documento, consulta Registro de llamadas.
    • Entrada: Los argumentos del entorno de ejecución que se pasan al flujo de trabajo, si corresponde
    • Resultado: El resultado del flujo de trabajo Si la ejecución falló, incluye la excepción que generó el error en la ejecución. En este documento, consulta los mensajes de error de ejecución.
  5. Para ver el historial de ejecuciones de flujos de trabajo como una lista de entradas de pasos, haz clic en la pestaña Pasos. Para obtener más información, consulta Visualiza el historial de pasos de ejecución.

  6. Para ver los registros de la ejecución de un flujo de trabajo, haz clic en la pestaña Registros.

  7. Para filtrar los registros de ejecución, usa el campo Filtro en la parte superior de la tabla. Por ejemplo, para mostrar solo los intentos de ejecución fallidos, ingresa failed en el campo de texto del filtro.

gcloud

  1. Para ver una lista completa de las ejecuciones de un flujo de trabajo, ingresa el siguiente comando:

    gcloud workflows executions list WORKFLOW_NAME
    

    Reemplaza WORKFLOW_NAME por el nombre de tu flujo de trabajo. Copia el ID de la ejecución que te interesa.

  2. Para ver los registros de ejecución de un flujo de trabajo, ingresa el siguiente comando:

    gcloud workflows executions describe \
        --workflow=WORKFLOW_NAME \
        EXECUTION_ID
    

    Reemplaza lo siguiente:

    • WORKFLOW_NAME: Es el nombre del flujo de trabajo.
    • EXECUTION_ID: El ID único de la ejecución

    Este comando muestra un resultado similar al siguiente:

    argument: 'null'
    endTime: '2022-07-19T12:40:07.070039707Z'
    error:
     context: |-
        The argument of 'in' must be a dict or an array; got: null
        in step "checkSearchTermInInput", routine "main", line: 12
     payload: "{"message":"The argument of 'in' must be a dict or an array; got: null"
    ,"tags":["TypeError"]}" stackTrace: elements: - position: column: '26' length: '24' line: '12' routine: main step: checkSearchTermInInput name: projects/1051295516635/locations/us-central1/workflows/myFirstWorkflow/executions/17ffc89c-0a27-4d2f-8356-e681d949a3d3 startTime: '2022-07-19T12:40:07.024823663Z' state: FAILED status: currentSteps: - routine: main step: checkSearchTermInInput workflowRevisionId: 000001-ac2
    En el resultado, se incluye la siguiente información:

    • argument: Son los argumentos del entorno de ejecución que se pasan al flujo de trabajo, si corresponde.
    • endTime: Cuando finalizó la ejecución
    • error: Es el mensaje de error que se arroja como parte de la excepción que generó el error de la ejecución.
    • name: Es el nombre completo de la ejecución, incluido el nombre del proyecto, la ubicación del flujo de trabajo, el nombre del flujo de trabajo y el ID de ejecución.
    • startTime: Cuándo comenzó la ejecución
    • state: Indica el estado final del flujo de trabajo.
    • status: El paso actual o final del flujo de trabajo de la ejecución
    • workflowRevisionID: Es la revisión actual en el momento de la ejecución.

Mapas de errores de ejecución

Cuando un flujo de trabajo arroja un error durante la ejecución que no está atrapado en un bloque try/except, la ejecución falla y se muestra un mapa de errores (un diccionario JSON) que describe el error.

Los errores que se producen durante la ejecución del flujo de trabajo contienen etiquetas que te ayudan a identificar qué causó el error. Por ejemplo, el error que muestra un conector puede tener dos claves (tags y message) similares a las siguientes:

{'tags': ['SystemError'], 'message': 'an error has occurred'}

Puede haber más de una etiqueta. Para verificar una etiqueta específica, puedes usar una expresión. Por ejemplo:

${'SystemError' in e.tags}

Datos de errores de acceso que se muestran como una cadena

Algunos conectores y APIs de HTTP serializarán los errores como cadenas antes de mostrarlos. Puedes usar las funciones estándar de la biblioteca para restablecer una carga útil al error original. Por ejemplo, para convertir una cadena de error en un mapa, puedes usar las funciones json.decode y text.encode:

json.decode(text.encode(ERROR_FROM_API))

Etiquetas de error

En la siguiente tabla, se describe el significado de las diferentes etiquetas de error.

Etiqueta Descripción
AuthError Se genera cuando falla la generación de credenciales para una solicitud HTTP.
ConnectionError Se genera cuando una conexión se establece de forma correcta con el extremo, pero hay un problema con la conexión durante la transferencia de datos. La conexión finaliza antes de que se reciba una respuesta completa y es posible que no se haya entregado un mensaje al extremo. Es posible que los reintentos no sean idempotentes.
ConnectionFailedError Se genera cuando no se establece una conexión con el extremo de API; por ejemplo, debido a un nombre de dominio incorrecto, a problemas de resolución de DNS o a otros problemas de red. Los reintentos son idempotentes.
HttpError Se genera cuando una solicitud HTTP falla con un estado de error de HTTP. Cuando se genera esta excepción, la respuesta es un mapa con los siguientes elementos:
  • tags: lista con string HttpError
  • message: Mensaje de error legible por humanos
  • code: Código de estado de respuesta HTTP
  • headers: Encabezados de respuesta
  • body: Cuerpo de la respuesta
IndexError Se genera cuando un subíndice de secuencia es un número entero fuera de rango.
KeyError Se genera cuando no se encuentra una clave de mapa en el conjunto de claves existentes.
OperationError Se genera cuando una operación de larga duración finaliza sin éxito.
ParallelNestingError Se genera cuando se supera la profundidad máxima que se pueden anidar pasos paralelos.
RecursionError Se genera cuando el intérprete detecta que se superó la profundidad máxima de la pila de llamadas.
ResourceLimitError Se genera cuando se agota algún límite de recursos. Cuando se genera internamente, este tipo de error no se puede detectar y causa una falla inmediata de la ejecución.
ResponseTypeError Se genera cuando una operación de larga duración muestra una respuesta del tipo incorrecto.
SystemError Se genera cuando el intérprete encuentra un error interno.
TimeoutError Se genera cuando se agota el tiempo de espera de una función del sistema a nivel del sistema.
TypeError Se genera cuando una operación o función se aplica a un objeto de tipo incompatible. El valor asociado es una string que proporciona detalles sobre el tipo que no coincide.
UnhandledBranchError Se genera cuando una o más ramas o iteraciones encuentran un error de entorno de ejecución no controlado hasta un número máximo.
ValueError Se genera cuando una operación o función recibe un argumento que tiene el tipo correcto, pero un valor incorrecto, y la situación no se describe con una excepción más precisa, como IndexError.
ZeroDivisionError Se genera cuando el segundo argumento de una operación de división o módulo es cero. El valor asociado es una string que indica el tipo de los operandos y la operación.

También puedes generar errores personalizados con la sintaxis raise.

Verifica el estado de las ejecuciones

Hay varios comandos que te ayudan a verificar el estado de la ejecución de un flujo de trabajo.

  • Para recuperar una lista de intentos de ejecución de un flujo de trabajo y sus IDs, ingresa el siguiente comando:

    gcloud workflows executions list WORKFLOW_NAME
    

    Reemplaza WORKFLOW_NAME por el nombre del flujo de trabajo.

    El comando muestra un valor NAME que es similar al siguiente:

    projects/PROJECT_NUMBER/locations/REGION/workflows/WORKFLOW_NAME/executions/EXECUTION_ID

    Copia el ID de ejecución para usarlo en el siguiente comando.

  • Para verificar el estado de un intento de ejecución y esperar a que este finalice, ingresa el siguiente comando:

    gcloud workflows executions wait EXECUTION_ID
    

    Reemplaza EXECUTION_ID por el ID del intento de ejecución.

    El comando espera a que finalice el intento de ejecución y, luego, muestra los resultados.

  • Para esperar hasta que se complete la última ejecución y, luego, mostrar el resultado de la ejecución completada, ingresa el siguiente comando:

    gcloud workflows executions wait-last
    

    Si realizaste un intento de ejecución anterior en la misma sesión de gcloud, el comando espera a que finalice el intento de ejecución anterior y, luego, muestra los resultados de la ejecución completa. Si no existe un intento anterior, gcloud muestra el siguiente error:

    ERROR: (gcloud.workflows.executions.wait-last) [NOT FOUND] There are no cached executions available.
    
  • Para obtener el estado de la última ejecución, ingresa el siguiente comando:

    gcloud workflows executions describe-last
    

    Si realizaste un intento de ejecución anterior en la misma sesión de gcloud, el comando mostrará los resultados de la última ejecución, incluso si se está ejecutando. Si no existe un intento anterior, gcloud muestra el siguiente error:

    ERROR: (gcloud.beta.workflows.executions.describe-last) [NOT FOUND] There are no cached executions available.
    

Filtrar ejecuciones

Puedes aplicar filtros a la lista de ejecuciones de flujos de trabajo que muestra el método workflows.executions.list.

Puedes filtrar los siguientes campos:

  • duration
  • endTime
  • executionId
  • label
  • startTime
  • state
  • stepName
  • workflowRevisionId

Por ejemplo, para filtrar una etiqueta (labels."fruit":"apple"), puedes realizar una solicitud a la API similar a la siguiente:

GET https://workflowexecutions.googleapis.com/v1/projects/MY_PROJECT/locations/MY_LOCATION/workflows/MY_WORKFLOW/executions?view=full&filter=labels.%22fruit%22%3A%22apple%22"

Aquí:

  • view=full especifica una vista que define qué campos se deben completar en las ejecuciones que se muestran; en este caso, todos los datos.
  • labels.%22fruit%22%3A%22apple%22 es la sintaxis del filtro codificada en URL.

Para obtener más información, consulta Filtrado AIP-160.

Envía registros a Cloud Logging

Workflows genera registros de ejecución de forma automática para las ejecuciones de flujos de trabajo en Cloud Logging.

También puedes habilitar el registro de llamadas. O bien, puedes crear registros personalizados que usen la función sys.log en tu fuente. El registro de llamadas y los registros personalizados te permiten controlar cuándo se envían los registros a Logging durante la ejecución de un flujo de trabajo y pueden ser particularmente útiles cuando depuras tu flujo de trabajo.

Para obtener más detalles, incluidos los archivos de protocolo de registro engine_call y executions_system, consulta este repositorio de GitHub.

Registros de ejecución

Cada ejecución de flujo de trabajo activa automáticamente al menos dos registros de ejecución: uno al comienzo y otro al final.

Para obtener más información sobre los registros de la plataforma de Workflows que están disponibles en Logging, consulta los registros de la plataforma de Google Cloud.

Registro de llamadas

Puedes configurar una marca para que se registre cada paso de llamada durante la ejecución del flujo de trabajo y se muestren los nombres de los pasos, los nombres de las funciones, los argumentos de las funciones y las respuestas a las llamadas. También puedes registrar cualquier excepción que se detecte o que detenga una llamada.

Solo se registran los pasos de llamada explícitos; por ejemplo, las llamadas a subflujos de trabajo o a funciones de la biblioteca. Las llamadas desde las expresiones o dentro de las funciones de la biblioteca estándar (por ejemplo, http.post en sys.log) y dentro de los conectores no se registran.

Los encabezados de solicitudes HTTP Authorization se ocultan de los registros de las llamadas HTTP.

Cuando aplicas el registro de llamadas a una definición de flujo de trabajo o a la ejecución de un flujo de trabajo, puedes especificar el nivel de registro requerido. El nivel de registro de ejecución tiene prioridad sobre cualquier nivel de registro de flujo de trabajo, a menos que no se especifique el nivel de registro de ejecución (el valor predeterminado); en ese caso, se aplica el nivel de registro de flujo de trabajo.

Ten en cuenta que el límite de tamaño de las entradas de registro que establece Cloud Logging también se aplica al registro de llamadas.

Registros personalizados

Para crear una entrada de registro en Logging durante la ejecución de un flujo de trabajo, define un paso en el flujo de trabajo que realice una llamada a la función sys.log de la biblioteca estándar:

YAML

  - step1:
      assign:
          - varA: "Hello"
          - varB: "World"
  - logStep:
      call: sys.log
      args:
          text: TEXT
          severity: SEVERITY 
  - step2:
      return: ${varA + " " + varB}
    

JSON

    [
      {
        "step1": {
          "assign": [
            {
              "varA": "Hello"
            },
            {
              "varB": "World"
            }
          ]
        }
      },
      {
        "logStep": {
          "call": "sys.log",
          "args": {
            "text": "TEXT",
            "severity": "SEVERITY"
          }
        }
      },
      {
        "step2": {
          "return": "${varA + " " + varB}"
        }
      }
    ]
      

Define lo siguiente cuando crees una entrada de registro:

  • TEXT: obligatorio. El texto que se registrará Si necesitas registrar los valores de un mapa, usa ${json.encode_to_string(myMap)}.
  • SEVERITY: es opcional. El nivel de gravedad de la entrada de registro. Por ejemplo, INFO, WARNING o CRITICAL.

Para obtener más información, consulta la referencia de la función sys.log.

Permisos necesarios

Para aplicar el registro de llamadas o enviar registros personalizados a Logging, un flujo de trabajo debe estar asociado con una cuenta de servicio que incluya el permiso logging.logEntries.create (por ejemplo, la función roles/logging.logWriter). Si necesitas cambiar la cuenta de servicio actualizada con tu flujo de trabajo, consulta Actualiza un flujo de trabajo. Para obtener más información sobre cómo crear cuentas de servicio y asignar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Ver registros de flujo de trabajo

Puedes ver los registros en Workflows o Logging. Para ver los registros de un solo flujo de trabajo, usa la pestaña Registros en Workflows. Para obtener una vista agregada de los registros de todos tus flujos de trabajo, usa la página Explorador de registros en Logging.

Ver registros en Workflows

Para ver los registros de un flujo de trabajo en Workflows, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página Workflows.

    Ir a Workflows

  2. Si deseas acceder a los registros de un flujo de trabajo, haz clic en el nombre del flujo de trabajo para ir a su página de Detalles.

  3. Para ver los registros, haz clic en Registros.

  4. Para filtrar los registros por gravedad, en la lista Predeterminado, selecciona el tipo de registro que se mostrará. De forma predeterminada, se muestran los registros de todos los niveles de gravedad.

En la pestaña Registros de la página Detalles de un flujo de trabajo, se muestran los siguientes tipos de registros:

  • Registros enviados a Logging

  • Registros de auditoría de cualquier operación realizada en el flujo de trabajo, como actualizaciones a la definición del flujo de trabajo

Visualiza registros en Logging

Para ver los registros en Logging, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página Explorador de registros:

    Ir al Explorador de registros

  2. En el Compilador de consultas, haz clic en Recurso y, luego, ingresa workflow. Selecciona Cloud Workflow de la lista y haz clic en Agregar.

    Registro de flujos de trabajo

  3. Haz clic en Ejecutar consulta.

Para obtener más información sobre cómo ver registros en Logging, consulta Usa el Explorador de registros.

¿Qué sigue?