Monitora i flussi di lavoro

Questa pagina fornisce informazioni utili per monitorare i deployment dei flussi di lavoro e eseguite.

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 nella console Google Cloud.

  1. Nella console Google Cloud, vai alla pagina Workflows.

    Vai a Flussi di lavoro

  2. Fai clic sul nome del flusso di lavoro per visualizzare la pagina Dettagli del flusso di lavoro.

  3. Fai clic sulla scheda Log.

  4. Per filtrare i log in base alla gravità, seleziona nell'elenco Predefinito il tipo di log da visualizzare.

Accedi ai risultati di esecuzione del flusso di lavoro

Puoi accedere ai risultati dell'esecuzione del flusso di lavoro nella console Google Cloud o utilizzando l'interfaccia a riga di comando gcloud.

Console

  1. Nella console Google Cloud, vai alla pagina Flussi di lavoro.

    Vai a Flussi di lavoro

  2. Per accedere ai risultati di esecuzione di un flusso di lavoro, fai clic sul nome del flusso di lavoro per accedere alla pagina Dettagli del flusso di lavoro.

  3. Per informazioni dettagliate su una determinata esecuzione, nella scheda Esecuzioni fai clic su l'ID esecuzione nell'elenco per passare alla relativa pagina Dettagli esecuzione.

  4. Nella scheda Riepilogo, ogni esecuzione contiene le seguenti informazioni:

    • Stato esecuzione: indica lo stato finale del flusso di lavoro, che include passaggio corrente o finale del flusso di lavoro.
    • Inizio esecuzione: data di inizio dell'esecuzione.
    • Fine esecuzione: quando è terminata l'esecuzione.
    • Durata esecuzione: tempo totale trascorso. Ciò 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 registrazione delle chiamate: il livello di registrazione 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, include l'eccezione che ha causato l'errore. In questo documento, vedi Messaggi di errore di esecuzione.
  5. Per visualizzare la cronologia di esecuzione del flusso di lavoro come elenco di voci di passaggio, fai clic sull'icona Scheda Passaggi. Per ulteriori informazioni, vedi Visualizza la cronologia dei passaggi di esecuzione.

  6. Per visualizzare i log di un'esecuzione del flusso di lavoro, fai clic sulla scheda Log.

  7. 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

  1. 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 flusso di lavoro. Copia l'ID esecuzione che ti interessa.

  2. 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: il nome del flusso di lavoro
    • EXECUTION_ID: l'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-ac2
    L'output contiene le seguenti informazioni:

    • argument: gli eventuali argomenti di runtime passati al flusso di lavoro
    • endTime: al termine dell'esecuzione
    • error: il messaggio di errore generato nell'ambito dell'eccezione che ha comportato il fallimento dell'esecuzione
    • name: il nome completo dell'esecuzione, incluso il nome progetto, la posizione del flusso di lavoro, il nome del flusso di lavoro ID esecuzione
    • startTime: data di inizio dell'esecuzione
    • state: indica lo stato finale del flusso di lavoro
    • status: passaggio attuale o finale del flusso di lavoro dell'esecuzione
    • workflowRevisionID: 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 ricade in un try/except, il dell'esecuzione non riesce e una mappa degli errori (un dizionario JSON) che descrive l'errore restituito.

Gli errori generati durante l'esecuzione del flusso di lavoro contengono tag che consentono di identificare ha causato l'errore. Ad esempio, l'errore restituito da un connettore può avere due (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 relativi agli errori di accesso restituiti come stringa

Alcuni connettori e API HTTP serializzano gli errori come stringhe prima di restituirli gli errori. Puoi utilizzare funzioni di libreria standard per ripristinare un payload al errore originale. Ad esempio, per convertire una stringa di errore in una mappa, puoi utilizzare json.decode e text.encode:

json.decode(text.encode(ERROR_FROM_API))

Tag di errore

La tabella seguente descrive il significato dei diversi tag di errore.

Tag Descrizione
AuthError Viene sollevato quando la generazione delle credenziali per una richiesta HTTP non riesce.
ConnectionError Generato quando viene stabilita una connessione con l'endpoint ma c'è un problema con la connessione durante il trasferimento dei dati. La La connessione viene terminata prima della ricezione di una risposta completa e di un messaggio potrebbero non essere stati pubblicati nell'endpoint. I nuovi tentativi potrebbero non essere idempotente.
ConnectionFailedError Aumentato quando non viene stabilita una connessione con l'endpoint API. della ad esempio a causa di un nome di dominio errato, problemi di risoluzione DNS o altri problemi di rete. I nuovi tentativi sono idempotenti.
HttpError In primo piano quando Richiesta HTTP non riuscita con uno stato di errore HTTP. Quando viene sollevata questa eccezione, è una mappa con i seguenti elementi:
  • tags: elenco con stringa HttpError
  • message: messaggio di errore leggibile
  • code: codice di stato della risposta HTTP
  • headers: intestazioni della risposta
  • body - corpo della risposta
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 Aumentato quando il valore massimo la profondità al quale è possibile nidificare i passaggi paralleli è stata superata.
RecursionError Viene sollevato quando l'interprete rileva che la profondità massima dello stack delle chiamate è stata superata.
ResourceLimitError Aumentato quando è esaurito un limite di risorse. Quando vengono sollevate internamente, questo tipo di errore non può essere rilevato e ne provoca l'esecuzione immediata errore.
ResponseTypeError Assegnato quando un'operazione a lunga esecuzione restituisce una risposta dell'errore di testo.
SystemError Sollevato quando l'interprete trova un errore interno.
TimeoutError Viene generato quando una funzione di sistema scade a livello di sistema.
TypeError Viene sollevato quando un'operazione o una funzione viene applicata a un oggetto di tipo incompatibile. Il valore associato è una stringa che fornisce dettagli la mancata corrispondenza del tipo.
UnhandledBranchError Aumentati quando uno o più rami o iterazioni incontrano un un errore di runtime non gestito fino a numero massimo.
ValueError Aumentato quando un'operazione o una funzione riceve un argomento che ha è il tipo corretto ma un valore errato e la situazione non viene descritta da un'eccezione più precisa, come un IndexError.
ZeroDivisionError Aumentato quando il secondo argomento di una divisione o un'operazione modulo è zero. Il valore associato è una stringa che indica il tipo di gli operandi e l'operazione.

Puoi anche segnalare errori personalizzati utilizzando la sintassi raise.

Controllare lo stato delle esecuzioni

Esistono diversi comandi per controllare lo stato di un flusso di lavoro dell'esecuzione.

  • Per recuperare un elenco dei tentativi di esecuzione di un flusso di lavoro e dei 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 controllare lo stato di un tentativo di esecuzione e attendere che venga eseguito inserisci questo 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 il comando che consentono di analizzare i dati e visualizzare i risultati.

  • attendere il completamento dell'ultima esecuzione e poi restituire il risultato completa l'esecuzione, inserisci il comando seguente:

    gcloud workflows executions wait-last

    Se hai effettuato un precedente tentativo di esecuzione nella stessa sessione di gcloud, il valore il comando attende il completamento del tentativo di esecuzione 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 il seguente comando:

    gcloud workflows executions describe-last

    Se hai effettuato un precedente tentativo di esecuzione nella stessa sessione di gcloud, il valore restituisce i risultati dell'ultima esecuzione anche se è in esecuzione. In caso contrario tentativo precedente esiste, 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 di esecuzioni del flusso di lavoro restituite dal Metodo workflows.executions.list.

Puoi applicare un filtro nei seguenti campi:

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

Ad esempio, per filtrare in base a un'etichetta (labels."fruit":"apple"), puoi creare 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 dati
  • labels.%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 il flusso di lavoro eseguite in Cloud Logging.

Puoi anche attivare il logging delle chiamate. In alternativa, puoi creare log personalizzati che utilizzano la funzione sys.log nell'origine. La registrazione delle chiamate e i registri personalizzati consentono controlla l'invio dei log a Logging durante l'esecuzione di un flusso di lavoro e può essere particolarmente utile per il debug del flusso di lavoro.

Per maggiori dettagli, incluso il protocollo 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: una all'inizio di un'esecuzione e una alla fine.

Per ulteriori informazioni sui log della piattaforma Workflows che sono disponibili in Logging. Consulta i 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 vengono registrati e i nomi dei passaggi, dei nomi delle funzioni gli argomenti delle funzioni e le risposte di chiamata. In alternativa, puoi registrare qualsiasi eccezioni che vengono rilevate o che interrompono la chiamata.

Vengono registrati solo i passaggi di chiamata espliciti; ad esempio chiamate a flussi di lavoro secondari delle funzioni della libreria. Chiamate dall'interno di espressioni o dall'interno funzioni libreria (ad esempio, http.post in sys.log) e connettori interni non vengono registrati.

Le intestazioni delle richieste HTTP Authorization vengono oscurate dai log per le chiamate HTTP.

Quando applichi il logging delle chiamate a un definizione del flusso di lavoro o alla l'esecuzione di un flusso di lavoro, puoi specificare il livello di logging richiesto. Il livello di log dell'esecuzione prende la precedenza su qualsiasi livello di log del flusso di lavoro, a meno che il livello di log di esecuzione non sia specificato (valore predefinito); in questo caso, si applica 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 libreria standard sys.log :

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. Per Registra i valori di una mappa, usa ${json.encode_to_string(myMap)}.
  • SEVERITY: facoltativo. Il livello di gravità del log . Ad esempio, INFO, WARNING o CRITICAL.

Per ulteriori informazioni, consulta il riferimento sulle funzioni sys.log.

Autorizzazioni obbligatorie

Per applicare il logging delle chiamate o inviare log personalizzati a Logging, viene richiesto devono essere associati a un account di servizio che include Autorizzazione logging.logEntries.create (ad esempio, roles/logging.logWriter ). Se devi modificare l'account di servizio aggiornato con il flusso di lavoro, consulta Aggiornare un flusso di lavoro. Per saperne di più sulla creazione di account di servizio e sull'assegnazione dei ruoli, consulta 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 di un singolo flusso di lavoro, utilizza la scheda Log in Flussi di lavoro. Per ottenere una visualizzazione aggregata dei log di tutti dei tuoi flussi di lavoro, utilizza la pagina Esplora log in Logging.

Visualizzare i log in Workflows

Per visualizzare i log di un flusso di lavoro in Workflows, segui questi passaggi:

  1. Nella console Google Cloud, vai alla pagina Flussi di lavoro:

    Vai a Flussi di lavoro

  2. Per accedere ai log di un flusso di lavoro, fai clic sul nome del flusso di lavoro per alla relativa pagina Dettagli.

  3. Per visualizzare i log, fai clic su Log.

  4. Per filtrare i log in base alla gravità, seleziona nell'elenco Predefinito il tipo di log da visualizzare. Per impostazione predefinita, i log di qualsiasi livello di gravità i livelli di accesso.

La scheda Log della pagina Dettagli di un flusso di lavoro mostra i seguenti tipi dei log:

  • Log inviati a Logging

  • Log di controllo di qualsiasi operazione eseguita sul flusso di lavoro, come gli aggiornamenti definizione del flusso di lavoro

Visualizza i log in Logging

Per visualizzare i log in Logging, segui questi passaggi:

  1. Nella console Google Cloud, vai alla pagina Esplora log:

    Vai a Esplora log

  2. In Query Builder, fai clic su Risorsa e inserisci workflow. Seleziona Flusso di lavoro Cloud dall'elenco e fai clic su Aggiungi.

    Logging del flusso di lavoro

  3. Fai clic su Esegui query.

Per saperne di più sulla visualizzazione dei log in Logging, consulta Utilizzare Esplora log.

Passaggi successivi