Questa pagina fornisce informazioni per aiutarti a monitorare i deployment e le esecuzioni del flusso di lavoro.
Accedi ai log di deployment ed eliminazione dei flussi di lavoro
Puoi accedere ai log degli errori relativi al deployment e all'eliminazione di un flusso di lavoro nella console Google Cloud.
Nella console Google Cloud, vai alla pagina Flussi di lavoro.
Fai clic sul nome del flusso di lavoro per visualizzare la relativa pagina Dettagli flusso di lavoro.
Fai clic sulla scheda Log.
Per filtrare i log in base alla gravità, nell'elenco Predefinito, seleziona il tipo di log da visualizzare.
Accedi ai risultati di esecuzione del flusso di lavoro
Puoi accedere ai risultati di esecuzione del flusso di lavoro nella console Google Cloud o utilizzando gcloud CLI.
Console
Nella console Google Cloud, vai alla pagina Flussi di lavoro.
Per accedere ai risultati dell'esecuzione di un flusso di lavoro, fai clic sul nome del flusso di lavoro per andare alla pagina Dettagli flusso di lavoro.
Per informazioni dettagliate su una determinata esecuzione, nella scheda Esecuzioni fai clic sull'ID esecuzione nell'elenco per passare alla relativa pagina Dettagli esecuzione.
Nella scheda Riepilogo, ogni esecuzione contiene le seguenti informazioni:
- Stato di esecuzione: indica lo stato finale del flusso di lavoro, incluso il passaggio corrente o finale.
- Inizio esecuzione: data di inizio dell'esecuzione.
- Fine esecuzione: quando è terminata l'esecuzione.
- Durata esecuzione: tempo totale trascorso. Questo può indicare errori di rete o problemi di connettività.
- Nome flusso di lavoro: il nome del flusso di lavoro.
- Revisione del flusso di lavoro: la revisione corrente al momento dell'esecuzione.
- Livello di logging delle chiamate: il livello di logging delle chiamate applicato durante l'esecuzione. In questo documento, consulta l'argomento Registrazione chiamate.
- Input: gli argomenti di runtime passati al flusso di lavoro, se presenti.
- Output: l'output del flusso di lavoro. Se l'esecuzione non è riuscita, viene inclusa l'eccezione che ha causato l'errore. In questo documento, consulta Messaggi di errore di esecuzione.
Per visualizzare la cronologia di esecuzione del flusso di lavoro come elenco di voci dei passaggi, fai clic sulla scheda Passaggi. Per ulteriori informazioni, consulta Visualizzare la cronologia dei passaggi di esecuzione.
Per visualizzare i log per l'esecuzione di un flusso di lavoro, fai clic sulla scheda Log.
Per filtrare i log di esecuzione, utilizza il campo Filtro nella parte superiore della tabella. Ad esempio, per visualizzare solo i tentativi di esecuzione non riusciti, inserisci
failed
nel campo di testo del filtro.
gcloud
Per visualizzare un elenco completo delle esecuzioni di un flusso di lavoro, inserisci il seguente comando:
gcloud workflows executions list WORKFLOW_NAME
Sostituisci
WORKFLOW_NAME
con il nome del tuo flusso di lavoro. Copia l'ID esecuzione dell'esecuzione che ti interessa.Per visualizzare i log di esecuzione di un flusso di lavoro, inserisci il seguente comando:
gcloud workflows executions describe \ --workflow=WORKFLOW_NAME \ EXECUTION_ID
Sostituisci quanto segue:
WORKFLOW_NAME
: nome del flusso di lavoroEXECUTION_ID
: ID univoco dell'esecuzione
Questo comando restituisce un output simile al seguente:
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
: gli eventuali argomenti di runtime passati al flusso di lavoroendTime
: al termine dell'esecuzioneerror
: il messaggio di errore generato come parte dell'eccezione che ha provocato l'errore dell'esecuzionename
: il nome completo dell'esecuzione, inclusi il nome del progetto, la posizione del flusso di lavoro, il nome del flusso di lavoro e l'ID di esecuzionestartTime
: data di inizio dell'esecuzionestate
: indica lo stato finale del flusso di lavorostatus
: passaggio attuale o finale del flusso di lavoro dell'esecuzioneworkflowRevisionID
: la revisione corrente al momento dell'esecuzione
Mappe degli errori di esecuzione
Quando durante l'esecuzione un flusso di lavoro genera un errore che non è rilevato in un
blocco try/except
, l'esecuzione non riesce e viene restituita una mappa di errori (un dizionario JSON) che descrive l'errore.
Gli errori generati durante l'esecuzione del flusso di lavoro contengono tag che consentono di identificare la causa dell'errore. Ad esempio, l'errore restituito da un connettore può avere due chiavi (tags
e message
) simili alle seguenti:
{'tags': ['SystemError'], 'message': 'an error has occurred'}
Può essere presente più di un tag. Per verificare un tag specifico, puoi utilizzare un'espressione. Ad esempio:
${'SystemError' in e.tags}
Dati sugli errori di accesso restituiti come stringa
Alcuni connettori e API HTTP serializzano gli errori come stringhe prima di restituire gli errori. Puoi utilizzare le funzioni di libreria standard per ripristinare l'errore originale di un payload. Ad esempio, per convertire una stringa di errore in una mappa, puoi utilizzare
le funzioni json.decode
e text.encode
:
json.decode(text.encode(ERROR_FROM_API))
Tag di errore
Nella tabella seguente viene descritto il significato dei diversi tag di errore.
Tag | Descrizione |
---|---|
AuthError | Aumentato quando la generazione delle credenziali per una richiesta HTTP non va a buon fine. |
ConnectionError | Generato quando viene stabilita correttamente una connessione con l'endpoint, ma si è verificato un problema di connessione durante il trasferimento di dati. La connessione viene terminata prima della ricezione di una risposta completa e un messaggio potrebbe non essere stato recapitato all'endpoint. I nuovi tentativi potrebbero non essere idempotenti. |
ConnectionFailedError | Generato quando non viene stabilita una connessione con l'endpoint API, ad esempio a causa di un nome di dominio errato, di problemi di risoluzione DNS o di altri problemi di rete. I nuovi tentativi sono idempotenti. |
HttpError | Aumentato quando una richiesta HTTP non va a buon fine con uno stato di errore HTTP. Quando viene sollevata questa eccezione, la
risposta è una mappa con i seguenti elementi:
|
IndexError | Aumentato quando un pedice di sequenza è un numero intero fuori intervallo. |
KeyError | Aumentato quando una chiave della mappa non viene trovata nel set di chiavi esistenti. |
OperationError | Aumentato quando un'operazione a lunga esecuzione non viene completata correttamente. |
ParallelNestingError | Aumentata quando viene superata la profondità massima di nidificazione dei passi paralleli. |
RecursionError | Aumentata quando l'interprete rileva che la profondità massima dello stack di chiamate è stata superata. |
ResourceLimitError | Aumentato quando è esaurito un limite di risorse. Se generato internamente, questo tipo di errore non può essere rilevato e causa l'errore immediato di esecuzione. |
ResponseTypeError | Assegnato quando un'operazione a lunga esecuzione restituisce una risposta del tipo errato. |
SystemError | Sollevato quando l'interprete trova un errore interno. |
TimeoutError | Aumentato quando una funzione di sistema scade a livello di sistema. |
TypeError | Rilevato quando un'operazione o una funzione viene applicata a un oggetto di tipo incompatibile. Il valore associato è una stringa che fornisce dettagli sulla mancata corrispondenza del tipo. |
UnhandledBranchError | Aumentato quando uno o più rami o iterazioni riscontrano un errore di runtime non gestito fino a un numero massimo. |
ValueError | Rilevato quando un'operazione o una funzione riceve un argomento con il tipo corretto, ma con un valore errato e la situazione non è descritta da un'eccezione più precisa, ad esempio IndexError . |
ZeroDivisionError | Aumentato quando il secondo argomento di un'operazione di divisione o modulo è zero. Il valore associato è una stringa che indica il tipo di operandi e l'operazione. |
Puoi anche segnalare errori personalizzati
utilizzando la sintassi raise
.
Controllare lo stato delle esecuzioni
Esistono diversi comandi per aiutarti a controllare lo stato di un'esecuzione di un flusso di lavoro.
Per recuperare un elenco dei tentativi di esecuzione di un flusso di lavoro e i relativi ID, inserisci il seguente comando:
gcloud workflows executions list WORKFLOW_NAME
Sostituisci
WORKFLOW_NAME
con il nome del flusso di lavoro.Il comando restituisce un valore
NAME
simile al seguente:projects/PROJECT_NUMBER/locations/REGION/workflows/WORKFLOW_NAME/executions/EXECUTION_ID
Copia l'ID esecuzione da utilizzare nel comando successivo.
Per verificare lo stato di un tentativo di esecuzione e attendere il suo completamento, inserisci il seguente comando:
gcloud workflows executions wait EXECUTION_ID
Sostituisci
EXECUTION_ID
con l'ID del tentativo di esecuzione.Il comando attende il completamento del tentativo di esecuzione, quindi restituisce i risultati.
Per attendere il completamento dell'ultima esecuzione e poi restituire il risultato dell'esecuzione, inserisci il seguente comando:
gcloud workflows executions wait-last
Se hai effettuato un tentativo di esecuzione precedente nella stessa sessione
gcloud
, il comando attende il completamento di quello precedente, quindi restituisce i risultati dell'esecuzione completata. Se non esistono tentativi precedenti,gcloud
restituisce il seguente errore:ERROR: (gcloud.workflows.executions.wait-last) [NOT FOUND] There are no cached executions available.
Per ottenere lo stato dell'ultima esecuzione, inserisci questo comando:
gcloud workflows executions describe-last
Se hai già eseguito un tentativo di esecuzione nella stessa sessione
gcloud
, il comando restituisce i risultati dell'ultima esecuzione anche se è in esecuzione. Se non esistono tentativi precedenti,gcloud
restituisce il seguente errore:ERROR: (gcloud.beta.workflows.executions.describe-last) [NOT FOUND] There are no cached executions available.
Filtra esecuzioni
Puoi applicare filtri all'elenco delle esecuzioni del flusso di lavoro restituite dal
metodo workflows.executions.list
.
Puoi applicare un filtro nei seguenti campi:
duration
endTime
executionId
label
startTime
state
stepName
workflowRevisionId
Ad esempio, per filtrare in base a un'etichetta (labels."fruit":"apple"
), puoi effettuare
una richiesta API simile alla seguente:
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"
Dove:
view=full
specifica una vista che definisce i campi da compilare nelle esecuzioni restituite; in questo caso, tutti i datilabels.%22fruit%22%3A%22apple%22
è la sintassi del filtro con codifica URL
Per ulteriori informazioni, vedi Filtro AIP-160.
Invia log a Cloud Logging
Workflows genera automaticamente log di esecuzione per l'esecuzione dei flussi di lavoro in Cloud Logging.
Puoi anche attivare il logging delle chiamate. In alternativa, puoi creare log personalizzati che utilizzano
la funzione sys.log
nell'origine. Il logging delle chiamate e i log personalizzati consentono di controllare quando i log vengono inviati a Logging durante l'esecuzione di un flusso di lavoro e possono essere particolarmente utili durante il debug del flusso di lavoro.
Per maggiori dettagli, inclusi i proto file di logging engine_call
e executions_system
, consulta questo repository GitHub.
Log di esecuzione
Ogni esecuzione di un flusso di lavoro attiva automaticamente almeno due log di esecuzione: uno all'inizio di un'esecuzione e uno alla fine.
Per ulteriori informazioni sui log della piattaforma Workflows disponibili in Logging, consulta Log della piattaforma Google Cloud.
Registrazione chiamate
Puoi impostare un flag in modo che ogni passaggio di chiamata durante l'esecuzione del flusso di lavoro venga registrato e vengano restituiti nomi di passaggio, nomi di funzione, argomenti di funzione e risposte di chiamata. In alternativa, puoi registrare tutte le eccezioni rilevate o che interrompono una chiamata.
Vengono registrati solo i passaggi di chiamata espliciti, ad esempio chiamate a flussi di lavoro secondari o
funzioni di libreria. Le chiamate dall'interno di espressioni o all'interno di funzioni di libreria
standard (ad esempio, http.post
in sys.log
) e dall'interno dei connettori
non vengono registrate.
Le intestazioni delle richieste HTTP Authorization
vengono oscurate dai log per le chiamate HTTP.
Quando applichi il logging delle chiamate a una definizione di flusso di lavoro o all'esecuzione di un flusso di lavoro, puoi specificare il livello di logging richiesto. Il livello di log di esecuzione ha la precedenza su qualsiasi livello di log del flusso di lavoro, a meno che il livello di log di esecuzione non sia specificato (impostazione predefinita); in questo caso, viene applicato il livello di log del flusso di lavoro.
Tieni presente che il limite di dimensione delle voci di log impostato da Cloud Logging si applica anche al logging delle chiamate.
Log personalizzati
Per creare una voce di log in Logging durante l'esecuzione di un flusso di lavoro, definisci un passaggio nel flusso di lavoro che effettui una chiamata alla funzione sys.log
della libreria standard:
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}" } } ]
Quando crei una voce di log, definisci quanto segue:
TEXT
: obbligatorio. Il testo da registrare. Se devi registrare i valori di una mappa, utilizza${json.encode_to_string(myMap)}
.SEVERITY
: facoltativo. Il livello di gravità della voce di log. Ad esempio,INFO
,WARNING
oCRITICAL
.
Per ulteriori informazioni, consulta il riferimento sulle funzioni sys.log
.
Autorizzazioni obbligatorie
Per applicare il logging delle chiamate o inviare log personalizzati a Logging, è necessario associare un flusso di lavoro a un account di servizio che includa l'autorizzazione logging.logEntries.create
(ad esempio, il ruolo roles/logging.logWriter
). Se devi modificare l'account di servizio aggiornato con il tuo flusso di lavoro, consulta Aggiornare un flusso di lavoro.
Per saperne di più sulla creazione di account di servizio e sull'assegnazione dei ruoli, vedi Gestire l'accesso a progetti, cartelle e organizzazioni.
Visualizza log del flusso di lavoro
Puoi visualizzare i log in Workflows o in Logging. Per visualizzare i log per un singolo flusso di lavoro, utilizza la scheda Log in Workflows. Per ottenere una visualizzazione aggregata dei log per tutti i flussi di lavoro, utilizza la pagina Esplora log in Logging.
Visualizza i log in Workflows
Per visualizzare i log di un flusso di lavoro in Workflows, segui questi passaggi:
Nella console Google Cloud, vai alla pagina Workflows:
Per accedere ai log di un flusso di lavoro, fai clic sul nome per passare alla pagina Dettagli.
Per visualizzare i log, fai clic su Log.
Per filtrare i log in base alla gravità, nell'elenco Predefinito, seleziona il tipo di log da visualizzare. Per impostazione predefinita, vengono mostrati i log con tutti i livelli di gravità.
La scheda Log nella pagina Dettagli di un flusso di lavoro mostra i seguenti tipi di log:
Log inviati a Logging
Log di controllo di qualsiasi operazione eseguita sul flusso di lavoro, come gli aggiornamenti alla definizione del flusso di lavoro
Visualizza i log in Logging
Per visualizzare i log in Logging, segui questi passaggi:
Nella console Google Cloud, vai alla pagina Esplora log:
In Query Builder, fai clic su Risorsa e inserisci
workflow
. Seleziona Cloud Workflow (Flusso di lavoro Cloud) dall'elenco e fai clic su Add (Aggiungi).Fai clic su Esegui query.
Per scoprire di più sulla visualizzazione dei log in Logging, consulta Utilizzare Esplora log.