Depois de executar um fluxo de trabalho, pode aceder aos resultados da execução do fluxo de trabalho na Google Cloud consola ou através da CLI do Google Cloud.
Consola
- Na Google Cloud consola, aceda à página Fluxos de trabalho. 
- Para aceder aos resultados da execução de um fluxo de trabalho, clique no nome do fluxo de trabalho para aceder à respetiva página de detalhes do fluxo de trabalho. 
- Para ver detalhes sobre uma execução específica, no separador Execuções, clique no ID de execução na lista para aceder à respetiva página Detalhes da execução. 
- No separador Resumo, cada execução tem as seguintes informações: - ID de execução: o identificador exclusivo da execução do fluxo de trabalho.
- Estado de execução: indica o estado final do fluxo de trabalho, incluindo o passo do fluxo de trabalho atual ou final.
- Execução criada: quando a execução foi iniciada.
- Início da execução: quando a execução começou a ser executada e a executar passos.
- Fim da execução: quando a execução terminou.
- Duração da execução: tempo total decorrido. Isto pode ser um indicador de erros de rede ou problemas de conetividade.
- Nome do fluxo de trabalho: o nome do fluxo de trabalho.
- Revisão do fluxo de trabalho: a revisão atual no momento da execução.
- Nível do registo de chamadas: o nível de registo de chamadas aplicado durante a execução. Para mais informações, consulte o artigo Registo de chamadas.
- Entrada: os argumentos de tempo de execução transmitidos ao fluxo de trabalho, se existirem.
- Saída: a saída do fluxo de trabalho. Se a execução falhou, inclui a exceção que levou à falha da execução. Neste documento, consulte os mapas de erros de execução.
 
- Para ver o histórico de execução do fluxo de trabalho como uma lista de entradas de passos, clique no separador Passos. Para mais informações, consulte o artigo Veja o histórico dos passos de execução. 
- Para ver os registos de uma execução do fluxo de trabalho, clique no separador Registos. 
- Para filtrar os registos de execução, use o campo Filtro na parte superior da tabela. Por exemplo, para apresentar apenas tentativas de execução falhadas, introduza - failedno campo de texto do filtro.
gcloud
- Para ver uma lista completa das execuções de um fluxo de trabalho, introduza o seguinte comando: - gcloud workflows executions list WORKFLOW_NAME- Substitua - WORKFLOW_NAMEpelo nome do fluxo de trabalho. Copie o ID de execução da execução que lhe interessa.
- Para ver os registos de execução de um fluxo de trabalho, introduza o seguinte comando: - gcloud workflows executions describe \ --workflow=WORKFLOW_NAME \ EXECUTION_ID- Substitua o seguinte: - WORKFLOW_NAME: o nome do fluxo de trabalho
- EXECUTION_ID: o ID exclusivo da execução
 - Este comando devolve um resultado semelhante ao seguinte: A saída contém as seguintes informações:- 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- argument: os argumentos de tempo de execução transmitidos ao fluxo de trabalho, se existirem
- endTime: quando a execução terminou
- error: a mensagem de erro apresentada como parte da exceção que resultou na falha da execução
- name: o nome completo da execução, incluindo o nome do projeto, a localização do fluxo de trabalho, o nome do fluxo de trabalho e o ID de execução
- startTime: quando a execução começou
- state: indica o estado final do fluxo de trabalho
- status: o passo do fluxo de trabalho atual ou final da execução
- workflowRevisionID: a revisão atual no momento da execução
 
Mapas de erros de execução
Quando um fluxo de trabalho gera um erro durante a execução que não é captado num bloco try/except, a execução falha e é devolvido um mapa de erros (um dicionário JSON) que descreve o erro.
Os erros gerados durante a execução do fluxo de trabalho contêm etiquetas para ajudar a identificar o que causou o erro. Por exemplo, o erro devolvido por um conetor pode ter duas chaves (tags e message) semelhantes às seguintes:
{'tags': ['SystemError'], 'message': 'an error has occurred'}
Pode haver mais do que uma etiqueta. Para verificar uma etiqueta específica, pode usar uma expressão. Por exemplo:
${'SystemError' in e.tags}
Dados de erro de acesso devolvidos como uma string
Alguns conetores e APIs HTTP serializam erros como strings antes de devolver os erros. Pode usar funções da biblioteca padrão para restaurar uma carga útil para o erro original. Por exemplo, para converter uma string de erro num mapa, pode usar as funções json.decode e text.encode:
json.decode(text.encode(ERROR_FROM_API))
Etiquetas de erro
A tabela seguinte descreve o significado das diferentes etiquetas de erro.
| Etiqueta | Descrição | 
|---|---|
| AuthError | Gerado quando a geração de credenciais para um pedido HTTP falha. | 
| ConnectionError | Gerado quando é estabelecida uma ligação com êxito ao ponto final, mas existe um problema com a ligação durante a transferência de dados. A ligação é terminada antes de ser recebida uma resposta completa e uma mensagem pode não ter sido entregue no ponto final. As novas tentativas podem não ser idempotentes. | 
| ConnectionFailedError | Gerado quando não é estabelecida uma ligação com o ponto final da API; por exemplo, devido a um nome de domínio incorreto, problemas de resolução de DNS ou outros problemas de rede. As novas tentativas são idempotentes. | 
| HttpError | Gerado quando um
        pedido HTTP falha
          com um estado de erro HTTP. Quando esta exceção é gerada, a resposta é um mapa com os seguintes elementos: 
 | 
| IndexError | Gerado quando um subscrito de sequência é um número inteiro fora do intervalo. | 
| KeyError | Gerado quando não é encontrada uma chave de mapa no conjunto de chaves existentes. | 
| OperationError | Gerado quando uma operação de longa duração termina sem êxito. | 
| ParallelNestingError | Gerado quando a profundidade máxima que os passos paralelos podem ser aninhados é excedida. | 
| RecursionError | Gerado quando o intérprete deteta que a profundidade máxima da pilha de chamadas foi excedida. | 
| ResourceLimitError | Gerado quando algum limite de recursos é esgotado. Quando gerado internamente, este tipo de erro não pode ser captado e causa uma falha de execução imediata. | 
| ResponseTypeError | Gerado quando uma operação de execução prolongada devolve uma resposta do tipo errado. | 
| SystemError | Gerado quando o intérprete encontra um erro interno. | 
| TimeoutError | Gerado quando uma função do sistema atinge o limite de tempo ao nível do sistema. | 
| TypeError | Gerado quando uma operação ou uma função é aplicada a um objeto de tipo incompatível. O valor associado é uma string que dá detalhes sobre a falha de correspondência de tipo. | 
| UnhandledBranchError | Gerado quando um ou mais ramos ou iterações encontram um erro de tempo de execução não processado até um número máximo. | 
| ValueError | Gerado quando uma operação ou uma função recebe um argumento que tem o tipo correto, mas um valor incorreto, e a situação não é descrita por uma exceção mais precisa, como um IndexError. | 
| ZeroDivisionError | Gerado quando o segundo argumento de uma operação de divisão ou módulo é zero. O valor associado é uma string que indica o tipo dos operandos e a operação. | 
Também pode gerar erros personalizados
usando a sintaxe raise.
O que se segue?
- Vista geral da depuração
- Problemas conhecidos dos fluxos de trabalho
- Envie registos de execução para o Cloud Logging
- Resolva problemas