Monitoraggio dei flussi di lavoro

Questa pagina fornisce informazioni utili per monitorare i deployment e le esecuzioni dei flussi 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.

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

    Vai a Workflows

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

  3. Fai clic sulla scheda Log.

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

Accedi ai risultati dell'esecuzione del flusso di lavoro

Puoi accedere ai risultati dell'esecuzione del flusso di lavoro nella console Google Cloud o utilizzando gcloud CLI.

Console

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

    Vai a Workflows

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

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

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

    • Stato di esecuzione: indica lo stato finale del flusso di lavoro, incluso il passaggio attuale o finale del flusso di lavoro.
    • Inizio esecuzione: quando è iniziata l'esecuzione.
    • Fine esecuzione: quando è terminata l'esecuzione.
    • Durata dell'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, vedi Registro 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 dell'esecuzione. In questo documento, consulta Messaggi di errore relativi all'esecuzione.
  5. Per visualizzare la cronologia di esecuzione del flusso di lavoro come elenco di voci dei passaggi, fai clic sulla scheda Passaggi. Per maggiori informazioni, consulta Visualizzare la cronologia dei passaggi di esecuzione.

  6. Per visualizzare i log per l'esecuzione di un 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: 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 argomenti di runtime passati al flusso di lavoro, se presenti
    • endTime: quando è terminata l'esecuzione
    • error: il messaggio di errore generato come parte dell'eccezione che ha causato un errore di esecuzione
    • name: 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 esecuzione
    • startTime: data di inizio dell'esecuzione
    • state: indica lo stato finale del flusso di lavoro
    • status: la fase attuale o finale del flusso di lavoro di 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 viene rilevato in un blocco try/except, l'esecuzione non riesce e viene restituita una mappa degli 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. 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ò esserci più di un tag. Per verificare la presenza di un tag specifico, puoi utilizzare un'espressione. Ad esempio:

${'SystemError' in e.tags}

Dati sull'errore di accesso restituiti come stringa

Alcuni connettori e API HTTP serializzano gli errori come stringhe prima di restituirli. Puoi utilizzare le funzioni standard della libreria per ripristinare un payload all'errore originale. 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

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

Tag Descrizione
AuthError Valore impostato quando la generazione di credenziali per una richiesta HTTP non va a buon fine.
ConnectionError Creato quando una connessione viene stabilita correttamente con l'endpoint, ma si verifica un problema con la connessione durante il trasferimento di dati. La connessione viene terminata prima della ricezione di una risposta completa e potrebbe non essere stato recapitato un messaggio all'endpoint. I nuovi tentativi potrebbero non essere idempotenti.
ConnectionFailedError Messaggio sollevato quando non viene stabilita una connessione con l'endpoint API, 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 Azione richiesta 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:
  • tags: elenco con la 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 della sequenza è un numero intero fuori intervallo.
KeyError Aumentato quando non viene trovata una chiave mappa nel set di chiavi esistenti.
OperationError Valore impostato al termine di un'operazione a lunga esecuzione non riuscito.
ParallelNestingError Aumentata quando viene superata la profondità massima che è possibile nidificare i passaggi paralleli.
RecursionError Assegnato quando l'interprete rileva che la profondità massima dello stack di chiamate è stata superata.
ResourceLimitError Aumentato quando si esaurisce il limite di risorse. Se viene sollevato internamente, questo tipo di errore non può essere rilevato e causa un errore immediato di esecuzione.
ResponseTypeError Aumentato quando un'operazione a lunga esecuzione restituisce una risposta di tipo errato.
SystemError Valore impostato quando l'interprete rileva un errore interno.
TimeoutError Aumentato quando si verifica il timeout di una funzione di sistema a livello di sistema.
TypeError Determinato 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 Aumentato quando un'operazione o una funzione riceve un argomento con il tipo corretto e un valore errato e la situazione non è descritta da un'eccezione più precisa, ad esempio IndexError.
ZeroDivisionError Aumentato quando il secondo argomento di una divisione o di un'operazione 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 controllare lo stato dell'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 per utilizzarlo nel comando successivo.

  • Per controllare lo stato di un tentativo di esecuzione e attendere il completamento del tentativo, 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 e poi restituisce i risultati.

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

    gcloud workflows executions wait-last
    

    Se hai eseguito un tentativo di esecuzione precedente nella stessa sessione gcloud, il comando attende il completamento del tentativo di esecuzione precedente e poi 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 visualizzare lo stato dell'ultima esecuzione, inserisci il seguente comando:

    gcloud workflows executions describe-last
    

    Se hai eseguito un tentativo precedente 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.
    

Invia i log a Cloud Logging

Workflows genera automaticamente log di esecuzione per le esecuzioni 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 di GitHub.

Log di esecuzione

Ogni esecuzione di 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 venga registrato durante l'esecuzione del flusso di lavoro e che vengano restituiti nomi dei passaggi, nomi di funzioni, argomenti di funzione e risposte alle chiamate. In alternativa, puoi registrare eventuali eccezioni rilevate o che interrompono una chiamata.

Vengono registrati solo i passaggi di chiamata espliciti, ad esempio le chiamate ai flussi di lavoro secondari o alle funzioni di libreria. Le chiamate dall'interno delle espressioni o dalle funzioni di libreria standard (ad esempio http.post in sys.log) e dai connettori interni non vengono registrate.

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

Quando applichi il logging delle chiamate a una definizione del flusso di lavoro o all'esecuzione di un flusso di lavoro, puoi specificare il livello di logging richiesto. Il livello di log dell'esecuzione ha la precedenza su qualsiasi livello di log del flusso di lavoro, a meno che non sia specificato il livello di log dell'esecuzione (valore predefinito); 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 del 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 o CRITICAL.

Per ulteriori informazioni, consulta la documentazione di riferimento delle 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 in base al 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 relativi a un singolo flusso di lavoro, utilizza la scheda Log in Workflows. Per ottenere una visualizzazione aggregata dei log di 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:

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

    Vai a Workflows

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

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

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

  • Audit log relativi a qualsiasi operazione eseguita sul flusso di lavoro, ad esempio gli aggiornamenti alla 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 scoprire di più sulla visualizzazione dei log in Logging, consulta Utilizzare Esplora log.

Passaggi successivi