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
failed
no 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_NAME
pelo 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 trabalhoEXECUTION_ID
: o ID exclusivo da execução
Este comando devolve um resultado semelhante ao seguinte:
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-ac2argument
: os argumentos de tempo de execução transmitidos ao fluxo de trabalho, se existiremendTime
: quando a execução terminouerror
: a mensagem de erro apresentada como parte da exceção que resultou na falha da execuçãoname
: 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çãostartTime
: quando a execução começoustate
: indica o estado final do fluxo de trabalhostatus
: o passo do fluxo de trabalho atual ou final da execuçãoworkflowRevisionID
: 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