Monitora l'integrità e le prestazioni dell'ambiente con le metriche chiave

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

Questa pagina descrive come monitorare l'integrità e le prestazioni complessive dell'ambiente Cloud Composer con le metriche chiave nella dashboard di monitoraggio.

Introduzione

Questo tutorial si concentra sulle metriche di monitoraggio di Cloud Composer chiave che possono fornire una buona panoramica dell'integrità e delle prestazioni a livello di ambiente.

Cloud Composer offre più metriche che descrivono lo stato complessivo dell'ambiente. Le linee guida per il monitoraggio riportate in questo tutorial si basano sulle metriche esposte nella dashboard di monitoraggio del tuo ambiente Cloud Composer.

In questo tutorial scoprirai le metriche chiave che fungono da indicatori principali dei problemi relativi al rendimento e all'integrità del tuo ambiente, nonché le linee guida per interpretare ogni metrica in azioni correttive per mantenere l'ambiente in buono stato. Inoltre, configurerai regole di avviso per ogni metrica, eseguirai il DAG di esempio e utilizzerai queste metriche e questi avvisi per ottimizzare il rendimento del tuo ambiente.

Obiettivi

Costi

Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:

Al termine di questo tutorial, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per maggiori dettagli, consulta la sezione Pulizia.

Prima di iniziare

Questa sezione descrive le azioni necessarie prima di iniziare il tutorial.

Creare e configurare un progetto

Per questo tutorial, hai bisogno di un Google Cloud progetto. Configura il progetto nel seguente modo:

  1. Nella console Google Cloud, seleziona o crea un progetto:

    Vai al selettore di progetti

  2. Verifica che la fatturazione sia attivata per il tuo progetto. Scopri come verificare se la fatturazione è attivata per un progetto.

  3. Assicurati che l' Google Cloud utente del progetto disponga dei seguenti ruoli per creare le risorse necessarie:

    • Amministratore ambienti e oggetti Storage (roles/composer.environmentAndStorageObjectAdmin)
    • Amministratore di Compute (roles/compute.admin)
    • Editor di monitoraggio (roles/monitoring.editor)

Abilita le API per il tuo progetto

Enable the Cloud Composer API.

Enable the API

Crea l'ambiente Cloud Composer

Crea un ambiente Cloud Composer 2.

Nell'ambito di questa procedura, devi concedere il ruolo Cloud Composer v2 API Service Agent Extension (roles/composer.ServiceAgentV2Ext) all'account agente di servizio Composer. Cloud Composer utilizza questo account per eseguire operazioni nel tuo Google Cloud progetto.

Esplora le metriche chiave per l'integrità e le prestazioni a livello di ambiente

Questo tutorial si concentra sulle metriche chiave che possono darti una buona panoramica dell'integrità e del rendimento complessivi del tuo ambiente.

La dashboard di monitoraggio nella console Google Cloud contiene una serie di metriche e grafici che consentono di monitorare le tendenze nel tuo ambiente e identificare i problemi relativi ai componenti di Airflow e alle risorse Cloud Composer.

Ogni ambiente Cloud Composer ha la propria dashboard di monitoraggio.

Acquisisci familiarità con le metriche chiave riportate di seguito e individua ciascuna metrica nella dashboard Monitoraggio:

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

    Vai ad Ambienti

  2. Nell'elenco degli ambienti, fai clic sul nome dell'ambiente. Viene visualizzata la pagina Dettagli dell'ambiente.

  3. Vai alla scheda Monitoraggio.

  4. Seleziona la sezione Panoramica, individua l'elemento Panoramica dell'ambiente nella dashboard e osserva la metrica Integrità ambiente (DAG di monitoraggio di Airflow).

    • Questa cronologia mostra l'integrità dell'ambiente Cloud Composer. Il colore verde della barra di integrità dell'ambiente indica che l'ambiente è integro, mentre lo stato di non integrità dell'ambiente è indicato in rosso.

    • Ogni pochi minuti, Cloud Composer esegue un DAG di verifica dell'attività denominato airflow_monitoring. Se l'esecuzione del DAG di attività termina correttamente, lo stato di salute è True. Se l'esecuzione del DAG di attività non va a buon fine (ad esempio, per eliminazione dei pod, interruzione di processi esterni o manutenzione), lo stato di salute è False.

  5. Seleziona la sezione Database SQL, individua l'elemento Integrità del database nella dashboard e osserva la metrica Integrità del database.

    • Questa sequenza temporale mostra lo stato della connessione all'istanza Cloud SQL del tuo ambiente. La barra verde dello stato del database indica la connettività, mentre i problemi di connessione sono indicati in rosso.

    • Il pod di monitoraggio di Airflow esegue ping al database periodicamente e segnala lo stato di salute come True se è possibile stabilire una connessione o come False in caso contrario.

  6. Nell'elemento Integrità del database, osserva le metriche Utilizzo CPU del database e Utilizzo memoria del database.

    • Il grafico Utilizzo CPU database indica l'utilizzo dei core della CPU da parte delle istanze del database Cloud SQL del tuo ambiente rispetto al limite di CPU totale del database disponibile.

    • Il grafico Utilizzo della memoria del database indica l'utilizzo della memoria da parte delle istanze del database Cloud SQL del tuo ambiente rispetto al limite di memoria totale del database disponibile.

  7. Seleziona la sezione Pianificatori, individua l'elemento Heartbeat pianificatore nella dashboard e osserva la metrica Heartbeat pianificatore.

    • Questa cronologia mostra l'integrità dello scheduler di Airflow. Controlla se sono presenti aree rosse per identificare i problemi dello scheduler di Airflow. Se il tuo ambiente ha più di uno scheduler, lo stato del heartbeat è corretto purché almeno uno degli scheduler risponda.

    • Il programmatore è considerato non funzionante se l'ultimo heartbeat è stato ricevuto più di 30 secondi (valore predefinito) prima dell'ora corrente.

  8. Seleziona la sezione Statistiche DAG, individua l'elemento Attività zombie interrotte nella dashboard e osserva la metrica Attività zombie interrotte.

    • Questo grafico indica il numero di attività zombie interrotte in una piccola finestra temporale. Le attività zombie sono spesso causate dall'interruzione esterna delle procedure di Airflow (ad esempio quando viene interrotto il processo di un'attività).

    • Lo scheduler di Airflow interrompe periodicamente le attività zombie, come riportato in questo grafico.

  9. Seleziona la sezione Worker, individua l'elemento Riavvii dei container worker nella dashboard e osserva la metrica Riavvii dei container worker.

    • Un grafico indica il numero totale di riavvii per i singoli container worker. Troppi riavvii dei contenitori possono influire sulla disponibilità del tuo servizio o di altri servizi a valle che lo utilizzano come dipendenza.

Scopri i benchmark e le possibili azioni correttive per le metriche chiave

L'elenco seguente descrive i valori di benchmark che possono indicare problemi e fornisce le azioni correttive che puoi intraprendere per risolverli.

Creare canali di notifica

Per creare un canale di notifica via email, segui le istruzioni riportate in Creare un canale di notifica.

Per saperne di più sui canali di notifica, consulta la pagina relativa alla gestione dei canali di notifica.

Crea criteri di avviso

Crea criteri di avviso in base ai benchmark forniti nelle sezioni precedenti di questo tutorial per monitorare continuamente i valori delle metriche e ricevere notifiche quando queste violano una condizione.

Console

Puoi configurare avvisi per ogni metrica presentata nella dashboard Monitoraggio facendo clic sull'icona a forma di campana nell'angolo dell'elemento corrispondente:

Creare un avviso per una metrica visualizzata nella dashboard di monitoraggio
Figura 1. Crea un avviso per una metrica visualizzata nella dashboard di monitoraggio (fai clic per ingrandire)
  1. Individua ogni metrica da monitorare nella dashboard Monitoring e fai clic sull'icona a forma di campana nell'angolo dell'elemento della metrica. Viene visualizzata la pagina Crea criterio di avviso.

  2. Nella sezione Trasforma i dati:

    1. Configura la sezione All'interno di ogni serie temporale come descritto nella configurazione dei criteri di avviso per la metrica.

    2. Fai clic su Avanti, quindi configura la sezione Configura l'attivatore di avviso come descritto nella configurazione dei criteri di avviso per la metrica.

  3. Fai clic su Avanti.

  4. Configura le notifiche. Espandi il menu Canali di notifica e seleziona i canali di notifica che hai creato nel passaggio precedente.

  5. Fai clic su OK.

  6. Nella sezione Assegna un nome alla policy di avviso, compila il campo Nome criterio di avviso. Utilizza un nome descrittivo per ogni metrica. Utilizza il valore "Nome del criterio di avviso" come descritto nella configurazione dei criteri di avviso per la metrica.

  7. Fai clic su Avanti.

  8. Esamina il criterio di avviso e fai clic su Crea criterio.

Metrica Integrità ambiente (DAG di monitoraggio di Airflow): configurazioni dei criteri di avviso

  • Nome metrica: Ambiente Cloud Composer - Integro
  • API: composer.googleapis.com/environment/healthy
  • Filtri:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Trasforma i dati > All'interno di ogni serie temporale:

    • Finestra temporale continua: personalizzata
    • Valore personalizzato: 4
    • Unità personalizzate: ore
    • Funzione finestra temporale continua: frazione true
  • Configura l'attivatore di avvisi:

    • Tipi di condizioni: Soglia
    • Attivatore di avvisi: qualsiasi violazione della serie temporale
    • Posizione soglia: sotto la soglia
    • Valore soglia: 90
    • Nome condizione: Condizione di integrità dell'ambiente
  • Configura le notifiche e finalizza l'avviso:

    • Assegna un nome al criterio di avviso: Integrità ambiente Airflow

Metrica di salute del database: configurazioni dei criteri di avviso

  • Nome metrica: Ambiente Cloud Composer - Database integro
  • API: composer.googleapis.com/environment/database_health
  • Filtri:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Trasforma i dati > All'interno di ogni serie temporale:

    • Finestra temporale continua: personalizzata
    • Valore personalizzato: 4
    • Unità personalizzate: ore
    • Funzione finestra temporale continua: frazione true
  • Configura l'attivatore di avvisi:

    • Tipi di condizioni: Soglia
    • Attivatore di avvisi: qualsiasi violazione della serie temporale
    • Posizione soglia: sotto la soglia
    • Valore soglia: 95
    • Nome condizione: Condizione di integrità del database
  • Configura le notifiche e finalizza l'avviso:

    • Assegna un nome alla policy di avviso: Integrità del database Airflow

Metrica Utilizzo CPU del database - Configurazioni dei criteri di avviso

  • Nome metrica: Ambiente Cloud Composer - Utilizzo della CPU del database
  • API: composer.googleapis.com/environment/database/cpu/utilization
  • Filtri:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Trasforma i dati > All'interno di ogni serie temporale:

    • Finestra temporale continua: personalizzata
    • Valore personalizzato: 12
    • Unità personalizzate: ore
    • Funzione finestra temporale continua: media
  • Configura l'attivatore di avvisi:

    • Tipi di condizioni: Soglia
    • Attivatore di avvisi: qualsiasi violazione della serie temporale
    • Posizione soglia: sopra la soglia
    • Valore soglia: 80
    • Nome condizione: condizione di utilizzo della CPU del database
  • Configura le notifiche e finalizza l'avviso:

    • Assegna al criterio di avviso il nome Utilizzo CPU del database Airflow.

Metrica Utilizzo CPU del database - Configurazioni dei criteri di avviso

  • Nome metrica: Ambiente Cloud Composer - Utilizzo della memoria del database
  • API: composer.googleapis.com/environment/database/memory/utilization
  • Filtri:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Trasforma i dati > All'interno di ogni serie temporale:

    • Finestra temporale continua: personalizzata
    • Valore personalizzato: 12
    • Unità personalizzate: ore
    • Funzione finestra temporale continua: media
  • Configura l'attivatore di avvisi:

    • Tipi di condizioni: Soglia
    • Attivatore di avvisi: qualsiasi violazione della serie temporale
    • Posizione soglia: sopra la soglia
    • Valore soglia: 80
    • Nome condizione: condizione di utilizzo della memoria del database
  • Configura le notifiche e finalizza l'avviso:

    • Assegna un nome al criterio di avviso: Utilizzo memoria database Airflow

Metrica Heartbeat dello scheduler: configurazioni dei criteri di avviso

  • Nome metrica: Ambiente Cloud Composer - Heartbeat del programmatore
  • API: composer.googleapis.com/environment/scheduler_heartbeat_count
  • Filtri:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Trasforma i dati > All'interno di ogni serie temporale:

    • Finestra temporale continua: personalizzata
    • Valore personalizzato: 4
    • Unità personalizzate: ore
    • Funzione finestra temporale continua: conteggio
  • Configura l'attivatore di avvisi:

    • Tipi di condizioni: Soglia
    • Attivatore di avvisi: qualsiasi violazione della serie temporale
    • Posizione soglia: sotto la soglia
    • Valore soglia: 216

      1. Puoi ottenere questo numero eseguendo una query che aggrega il valore_scheduler_heartbeat_count_mean nell'editor di query di Metrics Explorer.
    • Nome condizione: Condizione heartbeat dello scheduler

  • Configura le notifiche e finalizza l'avviso:

    • Assegna un nome al criterio di avviso: Heartbeat dello scheduler di Airflow

Metrica Attività zombie interrotte: configurazioni dei criteri di avviso

  • Nome metrica: Ambiente Cloud Composer - Attività zombie interrotte
  • API: composer.googleapis.com/environment/zombie_task_killed_count
  • Filtri:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Trasforma i dati > All'interno di ogni serie temporale:

    • Finestra temporale continua: 1 giorno
    • Funzione finestra temporale continua: somma
  • Configura l'attivatore di avvisi:

    • Tipi di condizioni: Soglia
    • Attivatore di avvisi: qualsiasi violazione della serie temporale
    • Posizione soglia: sopra la soglia
    • Valore soglia: 1
    • Nome condizione: Condizione attività zombie
  • Configura le notifiche e finalizza l'avviso:

    • Assegna un nome al criterio di avviso: Attività zombie Airflow

Metrica Riavvii dei container worker - configurazioni dei criteri di avviso

  • Nome metrica: Ambiente Cloud Composer - Attività zombie interrotte
  • API: composer.googleapis.com/environment/zombie_task_killed_count
  • Filtri:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Trasforma i dati > All'interno di ogni serie temporale:

    • Finestra temporale continua: 1 giorno
    • Funzione finestra temporale continua: somma
  • Configura l'attivatore di avvisi:

    • Tipi di condizioni: Soglia
    • Attivatore di avvisi: qualsiasi violazione della serie temporale
    • Posizione soglia: sopra la soglia
    • Valore soglia: 1
    • Nome condizione: Condizione attività zombie
  • Configura le notifiche e finalizza l'avviso:

    • Assegna un nome al criterio di avviso: Attività zombie Airflow

Terraform

Esegui uno script Terraform che crea un canale di notifica via email e carica i criteri di avviso per le metriche chiave fornite in questo tutorial in base ai rispettivi benchmark:

  1. Salva il file Terraform di esempio sul tuo computer locale.
  2. Sostituisci quanto segue:

    • PROJECT_ID: l'ID progetto del tuo progetto. Ad esempio: example-project.
    • EMAIL_ADDRESS: l'indirizzo email a cui deve essere inviata una notifica in caso di attivazione di un avviso.
    • ENVIRONMENT_NAME: il nome del tuo ambiente Cloud Composer. Ad esempio, example-composer-environment.
    • CLUSTER_NAME: il nome del cluster dell'ambiente che puoi trovare in Configurazione dell'ambiente > Risorse > GKE cluster nella console Google Cloud.
resource "google_monitoring_notification_channel" "basic" {
  project      = "PROJECT_ID"
  display_name = "Test Notification Channel"
  type         = "email"
  labels = {
    email_address = "EMAIL_ADDRESS"
  }
  # force_delete = false
}

resource "google_monitoring_alert_policy" "environment_health_metric" {
  project      = "PROJECT_ID"
  display_name = "Airflow Environment Health"
  combiner     = "OR"
  notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
  conditions {
    display_name = "Environment health condition"
    condition_threshold {
      filter     = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/healthy\" AND resource.label.environment_name=\"ENVIRONMENT_NAME\""
      duration   = "60s"
      comparison = "COMPARISON_LT"
      threshold_value = 0.9
      aggregations {
        alignment_period   = "14400s"
        per_series_aligner = "ALIGN_FRACTION_TRUE"
      }
    }
  }

}

resource "google_monitoring_alert_policy" "database_health_metric" {
  project      = "PROJECT_ID"
  display_name = "Airflow Database Health"
  combiner     = "OR"
  notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
  conditions {
    display_name = "Database health condition"
    condition_threshold {
      filter     = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/database_health\" AND resource.label.environment_name=\"ENVIRONMENT_NAME\""
      duration   = "60s"
      comparison = "COMPARISON_LT"
      threshold_value = 0.95
      aggregations {
        alignment_period   = "14400s"
        per_series_aligner = "ALIGN_FRACTION_TRUE"
      }
    }
  }
}

resource "google_monitoring_alert_policy" "alert_database_cpu_usage" {
  project      = "PROJECT_ID"
  display_name = "Airflow Database CPU Usage"
  combiner     = "OR"
  notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
  conditions {
    display_name = "Database CPU usage condition"
    condition_threshold {
      filter     = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/database/cpu/utilization\" AND resource.label.environment_name=\"ENVIRONMENT_NAME\""
      duration   = "60s"
      comparison = "COMPARISON_GT"
      threshold_value = 80
      aggregations {
        alignment_period   = "43200s"
        per_series_aligner = "ALIGN_MEAN"
      }
    }
  }
}

resource "google_monitoring_alert_policy" "alert_database_memory_usage" {
  project      = "PROJECT_ID"
  display_name = "Airflow Database Memory Usage"
  combiner     = "OR"
  notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
  conditions {
    display_name = "Database memory usage condition"
    condition_threshold {
      filter     = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/database/memory/utilization\" AND resource.label.environment_name=\"ENVIRONMENT_NAME\""
      duration   = "60s"
      comparison = "COMPARISON_GT"
      threshold_value = 80
      aggregations {
        alignment_period   = "43200s"
        per_series_aligner = "ALIGN_MEAN"
      }
    }
  }
}

resource "google_monitoring_alert_policy" "alert_scheduler_heartbeat" {
  project      = "PROJECT_ID"
  display_name = "Airflow Scheduler Heartbeat"
  combiner     = "OR"
  notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
  conditions {
    display_name = "Scheduler heartbeat condition"
    condition_threshold {
      filter     = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/scheduler_heartbeat_count\" AND resource.label.environment_name=\"ENVIRONMENT_NAME\""
      duration   = "60s"
      comparison = "COMPARISON_LT"
      threshold_value = 216 // Threshold is 90% of the average for composer.googleapis.com/environment/scheduler_heartbeat_count metric in an idle environment
      aggregations {
        alignment_period   = "14400s"
        per_series_aligner = "ALIGN_COUNT"
      }
    }
  }
}

resource "google_monitoring_alert_policy" "alert_zombie_task" {
  project      = "PROJECT_ID"
  display_name = "Airflow Zombie Tasks"
  combiner     = "OR"
  notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
  conditions {
    display_name = "Zombie tasks condition"
    condition_threshold {
      filter     = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/zombie_task_killed_count\" AND  resource.label.environment_name=\"ENVIRONMENT_NAME\""
      duration   = "60s"
      comparison = "COMPARISON_GT"
      threshold_value = 1
      aggregations {
        alignment_period   = "86400s"
        per_series_aligner = "ALIGN_SUM"
      }
    }
  }
}

resource "google_monitoring_alert_policy" "alert_worker_restarts" {
  project      = "PROJECT_ID"
  display_name = "Airflow Worker Restarts"
  combiner     = "OR"
  notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
  conditions {
    display_name = "Worker container restarts condition"
    condition_threshold {
      filter     = "resource.type = \"k8s_container\" AND (resource.labels.cluster_name = \"CLUSTER_NAME\" AND resource.labels.container_name = monitoring.regex.full_match(\"airflow-worker|base\") AND resource.labels.pod_name = monitoring.regex.full_match(\"airflow-worker-.*|airflow-k8s-worker-.*\")) AND metric.type = \"kubernetes.io/container/restart_count\""

      duration   = "60s"
      comparison = "COMPARISON_GT"
      threshold_value = 1
      aggregations {
        alignment_period   = "86400s"
        per_series_aligner = "ALIGN_RATE"
      }
    }
  }
}

Testa i criteri di avviso

Questa sezione descrive come testare i criteri di avviso creati e interpretare i risultati.

Carica un DAG di esempio

Il DAG di esempio memory_consumption_dag.py fornito in questo tutorial imita un utilizzo intensivo della memoria dei worker. Il DAG contiene 4 attività, ognuna delle quali scrive dati in una stringa di esempio, consumando 380 MB di memoria. Il DAG di esempio è pianificato per essere eseguito ogni 2 minuti e inizierà a funzionare automaticamente non appena lo caricherai nell'ambiente Composer.

Carica il seguente DAG di esempio nell'ambiente creato nei passaggi precedenti:

from datetime import datetime
import sys
import time

from airflow import DAG
from airflow.operators.python import PythonOperator


def ram_function():
    data = ""
    start = time.time()
    for i in range(38):
        data += "a" * 10 * 1000**2
        time.sleep(0.2)
        print(f"{i}, {round(time.time() - start, 4)}, {sys.getsizeof(data) / (1000 ** 3)}")
    print(f"Size={sys.getsizeof(data) / (1000 ** 3)}GB")
    time.sleep(30 - (time.time() - start))
    print(f"Complete in {round(time.time() - start, 2)} seconds!")


with DAG(
    dag_id="memory_consumption_dag",
    start_date=datetime(2023, 1, 1, 1, 1, 1),
    schedule="1/2 * * * *",
    catchup=False,
) as dag:
    for i in range(4):
        PythonOperator(
            task_id=f"task_{i+1}",
            python_callable=ram_function,
            retries=0,
            dag=dag,
        )

Interpreta avvisi e metriche in Monitoraggio

Attendi circa 10 minuti dopo l'avvio del DAG di esempio e valuta i risultati del test:

  1. Controlla la tua casella di posta elettronica per verificare di aver ricevuto una notifica daGoogle Cloud Alerting con la riga dell'oggetto che inizia con [ALERT]. I contenuti di questo messaggio contengono i dettagli dell'incidente relativo alle norme relative agli avvisi.

  2. Fai clic sul pulsante Visualizza incidente nella notifica via email. Verrà visualizzato un messaggio che ti reindirizzerà a Metrics Explorer. Esamina i dettagli dell'evento di avviso:

    Dettagli dell'incidente di avviso
    Figura 2. Dettagli dell'incidente di avviso (fai clic per ingrandire)

    Il grafico delle metriche relative agli incidenti indica che le metriche che hai creato hanno superato la soglia di 1, il che significa che Airflow ha rilevato e ucciso più di un'attività zombie.

  3. Nel tuo ambiente Cloud Composer, vai alla scheda Monitoraggio, apri la sezione Statistiche DAG e individua il grafico Attività zombie terminate:

    Grafico delle attività zombie
    Figura 3. Grafico delle attività zombie (fai clic per ingrandire)

    Il grafico indica che Airflow ha interrotto circa 20 attività zombie solo nei primi 10 minuti di esecuzione del DAG di esempio.

  4. In base ai benchmark e alle azioni correttive, il motivo più comune per le attività zombie è la mancanza di memoria o CPU dei worker. Identifica la causa principale delle attività zombie analizzando l'utilizzo delle risorse dei worker.

    Apri la sezione Lavoratori nella dashboard di monitoraggio ed esamina le metriche sull'utilizzo della CPU e della memoria dei lavoratori:

    Metriche sull'utilizzo della CPU e della memoria dei worker
    Figura 4. Metriche relative all'utilizzo della CPU e della memoria dei worker (fai clic per ingrandire)

    Il grafico Utilizzo totale CPU worker indica che l'utilizzo della CPU dei worker è stato sempre inferiore al 50% del limite totale disponibile, pertanto la CPU disponibile è sufficiente. Il grafico Utilizzo totale memoria worker mostra che l'esecuzione del DAG di esempio ha comportato il raggiungimento del limite di memoria allocabile, pari a circa il 75% del limite di memoria totale mostrato nel grafico (GKE riserva il 25% delle prime 4 GB di memoria e altri 100 MB di memoria su ogni nodo per gestire l'espulsione dei pod).

    Puoi concludere che i worker non dispongono delle risorse di memoria necessarie per eseguire correttamente il DAG di esempio.

Ottimizza l'ambiente e valutane le prestazioni

In base all'analisi dell'utilizzo delle risorse dei worker, devi allocare più memoria ai worker affinché tutte le attività del DAG vengano completate.

  1. Nell'ambiente Composer, apri la scheda DAG, fai clic sul nome del DAG di esempio (memory_consumption_dag) e poi su Metti in pausa il DAG.

  2. Alloca memoria aggiuntiva per i worker:

    1. Nella scheda Configurazione dell'ambiente, individua la configurazione Risorse > Workload e fai clic su Modifica.

    2. Nell'elemento Worker, aumenta il limite di Memoria. In questo tutorial, utilizza 3,25 GB.

    3. Salva le modifiche e attendi alcuni minuti per il riavvio del worker.

  3. Apri la scheda DAG, fai clic sul nome del DAG di esempio (memory_consumption_dag) e poi su Riattiva il DAG.

Vai a Monitoraggio e verifica che non siano state visualizzate nuove attività zombie dopo aver aggiornato i limiti di risorse dei worker:

Grafico delle attività zombie dopo la modifica del limite di memoria
Figura 5. Grafico delle attività zombie dopo la modifica del limite di memoria (fai clic per ingrandire)

Riepilogo

In questo tutorial hai appreso le metriche principali relative a integrità e prestazioni a livello di ambiente, come configurare i criteri di avviso per ogni metrica e come interpretare ogni metrica in azioni correttive. Hai quindi eseguito un DAG di esempio, hai identificato la causa principale dei problemi di integrità dell'ambiente con l'aiuto di avvisi e grafici di monitoraggio e hai ottimizzato l'ambiente allocando più memoria ai tuoi worker. Tuttavia, è consigliabile ottimizzare i DAG per ridurre il consumo di risorse dei worker in primo luogo, perché non è possibile aumentare le risorse oltre una determinata soglia.

Esegui la pulizia

Per evitare che al tuo Google Cloud account vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse o mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Elimina singole risorse

Se intendi esplorare più tutorial e guide rapide, il riuso dei progetti ti aiuta a non superare i limiti di quota.

Console

  1. Elimina l'ambiente Cloud Composer. Inoltre, durante questa procedura viene eliminato il bucket dell'ambiente.
  2. Elimina tutti i criteri di avviso che hai creato in Cloud Monitoring.

Terraform

  1. Assicurati che lo script Terraform non contenga voci per le risorse ancora richieste dal progetto. Ad esempio, potresti voler mantenere alcune API abilitate e le autorizzazioni IAM ancora assegnate (se hai aggiunto queste definizioni allo script Terraform).
  2. Esegui terraform destroy.
  3. Elimina manualmente il bucket dell'ambiente. Cloud Composer non lo elimina automaticamente. Puoi farlo dalla console Google Cloud o da Google Cloud CLI.

Passaggi successivi