Monitora l'integrità e le prestazioni dell'ambiente con le metriche chiave nella dashboard di Monitoring

Cloud Composer 1 | Cloud Composer 2

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

Introduzione

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

Cloud Composer offre varie metriche che descrivono lo stato generale dell'ambiente. Le linee guida per il monitoraggio di questo tutorial si basano sulle metriche esposte nella dashboard di Monitoring del tuo ambiente Cloud Composer.

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

Obiettivi

Costi

Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:

Al termine di questo tutorial, puoi evitare di continuare la fatturazione eliminando le risorse che hai creato. Per maggiori dettagli, vedi Eseguire la pulizia.

Prima di iniziare

In questa sezione vengono descritte le azioni necessarie prima di iniziare il tutorial.

Creare e configurare un progetto

Per questo tutorial, devi avere un progetto Google Cloud. Configura il progetto nel seguente modo:

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

    Vai al Selettore progetto

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

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

    • Amministratore ambiente e oggetti di archiviazione (roles/composer.environmentAndStorageObjectAdmin)
    • Amministratore Compute (roles/compute.admin)
    • Monitoring Editor (roles/monitoring.editor)

Abilita le API per il tuo progetto

Attiva l'API Cloud Composer.

Abilita l'API

Crea il tuo ambiente Cloud Composer

Crea un ambiente Cloud Composer 2.

Nell'ambito di questa procedura, concederai il ruolo Estensione agente di servizio API Cloud Composer v2 (roles/composer.ServiceAgentV2Ext) all'account agente di servizio Composer. Cloud Composer usa questo account per eseguire operazioni nel tuo progetto Google Cloud.

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

Questo tutorial è incentrato sulle metriche chiave che possono offrirti una buona panoramica dell'integrità e delle prestazioni complessive del tuo ambiente.

La dashboard di Monitoring nella console Google Cloud contiene una varietà di metriche e grafici che consentono di monitorare le tendenze nel tuo ambiente e identificare i problemi con i componenti Airflow e le risorse Cloud Composer.

Ogni ambiente Cloud Composer ha la propria dashboard di monitoraggio.

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

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

    Vai a Ambienti

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

  3. Vai alla scheda Monitoring.

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

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

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

  5. Seleziona la sezione Database SQL, individua la voce Stato 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 di integrità del database verde indica la connettività, mentre gli errori di connessione sono indicati con colore rosso.

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

  6. Nell'elemento Stato del database, osserva le metriche Utilizzo della CPU del database e Utilizzo memoria del database.

    • Il grafico di utilizzo della CPU del database indica l'utilizzo dei core della CPU da parte delle istanze del database Cloud SQL del tuo ambiente rispetto al limite totale di CPU 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 totale di memoria del database disponibile.

  7. Seleziona la sezione Scheduler, individua la voce Scheduler heartbeat nella dashboard e osserva la metrica Scheduler Heartbeat.

    • Questa sequenza temporale mostra l'integrità dello scheduler Airflow. Controlla la presenza di aree rosse per identificare problemi dello scheduler Airflow. Se il tuo ambiente ha più scheduler, lo stato del battito cardiaco è integro purché almeno uno degli scheduler risponda.

    • Lo scheduler non è considerato integro se l'ultimo battito cardiaco è stato ricevuto più di 30 secondi (valore predefinito) prima dell'ora corrente.

  8. Seleziona la sezione Statistiche DAG, individua la voce Attività zombie terminate nella dashboard e osserva la metrica Attività zombie terminate.

    • Il grafico indica il numero di attività zombie terminate in un breve periodo. Le attività Zombie sono spesso causate dalla terminazione esterna dei processi Airflow (ad esempio quando il processo di un'attività viene interrotto).

    • Lo scheduler Airflow uccide periodicamente le attività zombie, come indicato 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 singoli container worker. Troppi riavvii di container possono influire sulla disponibilità del servizio o di altri servizi downstream che li utilizzano come dipendenza.

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

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

  • Integrità dell'ambiente (DAG di monitoraggio di Airflow)

    • Percentuale di successo inferiore al 90% in un periodo di 4 ore

    • Gli errori possono indicare la rimozione dei pod o le terminazioni dei worker perché l'ambiente è sovraccarico o presenta malfunzionamenti. Le aree rosse nella sequenza temporale di salute dell'ambiente sono solitamente correlate alle aree rosse nelle altre barre di stato dei singoli componenti dell'ambiente. Identifica la causa principale esaminando altre metriche nella dashboard di Monitoring.

  • Integrità del database

    • Percentuale di successo inferiore al 95% in un periodo di 4 ore

    • Gli errori indicano la presenza di problemi di connettività al database Airflow, che potrebbero essere il risultato di un arresto anomalo o di un tempo di inattività del database a causa del sovraccarico (ad esempio a causa di un utilizzo elevato della CPU o della memoria oppure di una latenza maggiore durante la connessione al database). Questi sintomi molto frequentemente sono causati da DAG non ottimali, ad esempio quando i DAG utilizzano molte variabili di ambiente o Airflow definite a livello globale. Identifica la causa principale esaminando le metriche di utilizzo delle risorse di database SQL. Puoi anche controllare i log dello scheduler per individuare errori relativi alla connettività del database.

  • Utilizzo di CPU e memoria del database

    • Oltre l'80% di utilizzo medio della CPU o della memoria in un periodo di 12 ore

    • Il database potrebbe essere sovraccarico. Analizza la correlazione tra le esecuzioni dei DAG e i picchi di utilizzo della CPU del database o della memoria.

  • Heartbeat dello scheduler

    • Percentuale di successo inferiore al 90% in un periodo di 4 ore

    • Assegna più risorse allo scheduler o aumenta il numero di scheduler da 1 a 2 (consigliato).

  • Attività zombie interrotte

    • Più di un'attività di zombie nelle 24 ore

    • Il motivo più comune delle attività zombie è la carenza di risorse di CPU o memoria nel cluster del tuo ambiente. Esamina i grafici sull'utilizzo delle risorse dei worker e assegna più risorse ai tuoi worker oppure aumenta il timeout delle attività zombie in modo che lo scheduler attenda più a lungo prima di considerare un'attività come uno zombie.

  • Riavvii dei container worker

    • Più di un riavvio ogni 24 ore

    • Il motivo più comune è la mancanza di memoria o spazio di archiviazione del worker. Esamina il consumo delle risorse worker e alloca più memoria o spazio di archiviazione ai tuoi worker. Se la causa non è la mancanza di risorse, cerca la risoluzione dei problemi di riavvio dei worker e utilizza le query di Logging per scoprire i motivi dei riavvii dei worker.

Crea canali di notifica

Segui le istruzioni descritte in Creare un canale di notifica per creare un canale di notifica via email.

Per maggiori informazioni sui canali di notifica, consulta Gestire i canali di notifica.

Crea criteri di avviso

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

Console

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

Crea 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 tutte le metriche da monitorare nella dashboard Monitoraggio e fai clic sull'icona a forma di campana nell'angolo della metrica. Viene visualizzata la pagina Crea criterio di avviso.

  2. Nella sezione Trasforma i dati:

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

    2. Fai clic su Avanti, poi configura la sezione Configura trigger di avviso come descritto nella configurazione dei criteri di avviso per la metrica.

  3. Tocca 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 al criterio di avviso, compila il campo Nome criterio di avviso. Assegna un nome descrittivo a ogni metrica. Utilizza il valore "Assegna un nome al criterio di avviso" come descritto nella configurazione dei criteri di avviso per la metrica.

  7. Tocca Avanti.

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

Metrica di integrità dell'ambiente (DAG di monitoraggio di Airflow) - Configurazioni criterio di avviso

  • Nome metrica: Ambiente Cloud Composer - Integro
  • API: Composerr.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 vera
  • Configura l'attivatore di avviso:

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

    • Assegna al criterio di avviso il nome: Airflow Environment Health

Metrica di integrità del database - Configurazioni dei criterio di avviso

  • Nome metrica: Ambiente Cloud Composer - Database integro
  • API: Composerr.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 vera
  • Configura l'attivatore di avviso:

    • Tipi di condizioni: soglia
    • Attivazione dell'avviso: qualsiasi serie temporale viola le
    • Posizione soglia: sotto la soglia
    • Valore soglia: 95
    • Nome condizione: condizione di integrità del database
  • Configura le notifiche e finalizza l'avviso:

    • Assegna al criterio di avviso il nome: Integrità del database Airflow

Metrica di utilizzo della CPU del database - Configurazioni criterio di avviso

  • Nome metrica: Ambiente Cloud Composer - Utilizzo CPU database
  • API: Composerr.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 avviso:

    • Tipi di condizioni: soglia
    • Attivazione dell'avviso: qualsiasi serie temporale viola le
    • 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 un nome al criterio di avviso: Utilizzo CPU del database Airflow

Metrica di utilizzo della CPU del database - Configurazioni criterio di avviso

  • Nome metrica: Ambiente Cloud Composer - Utilizzo memoria database
  • API: Composerr.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 avviso:

    • Tipi di condizioni: soglia
    • Attivazione dell'avviso: qualsiasi serie temporale viola le
    • 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 al criterio di avviso un nome: Utilizzo memoria del database Airflow

Metrica Heartbeat dello scheduler - Configurazioni criterio di avviso

  • Nome metrica: Ambiente Cloud Composer - Heartbeat dello scheduler
  • 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 avviso:

    • Tipi di condizioni: soglia
    • Attivazione dell'avviso: qualsiasi serie temporale viola le
    • 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 al criterio di avviso il nome: Heartbeat dello scheduler Airflow

Metrica Attività zombie interrotte: configurazioni criterio di avviso

  • Nome metrica: Ambiente Cloud Composer - Attività zombie terminate
  • 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 avviso:

    • Tipi di condizioni: soglia
    • Attivazione dell'avviso: qualsiasi serie temporale viola le
    • 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: Airflow Zombie Tasks

Metrica dei riavvii dei container worker - configurazioni criterio di avviso

  • Nome metrica: Ambiente Cloud Composer - Attività zombie terminate
  • 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 avviso:

    • Tipi di condizioni: soglia
    • Attivazione dell'avviso: qualsiasi serie temporale viola le
    • 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: Airflow Zombie Tasks

Terraform

Esegui uno script Terraform che crei un canale di notifica via email e carichi 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 inviare una notifica nel caso in cui venga attivato un avviso.
    • ENVIRONMENT_NAME: nome del tuo ambiente Cloud Composer. Ad esempio, example-composer-environment.
    • CLUSTER_NAME: il nome del cluster di ambiente, disponibile in Configurazione dell'ambiente > Risorse > Cluster GKE 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 l'utilizzo intensivo della memoria dei worker. Il DAG contiene quattro attività, ciascuna delle quali scrive dati in una stringa di esempio, occupando 380 MB di memoria. L'esecuzione del DAG di esempio è pianificata ogni 2 minuti e inizierà automaticamente una volta caricato nel tuo 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,
        )

Interpretare avvisi e metriche in Monitoring

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

  1. Controlla la tua casella di posta email per verificare di aver ricevuto una notifica da Google Cloud Alerting con oggetto che inizia con [ALERT]. Il contenuto di questo messaggio contiene i dettagli dell'incidente relativo ai criteri di avviso.

  2. Fai clic sul pulsante Visualizza incidente nella notifica via email. Ti reindirizzeremo a Metrics Explorer. Esamina i dettagli dell'incidente di avviso:

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

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

  3. Nel tuo ambiente Cloud Composer, vai alla scheda Monitoring, apri la sezione Statistiche DAG e trova 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 dall'esecuzione del DAG di esempio.

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

    Apri la sezione Worker nella dashboard di Monitoring ed esamina le metriche di utilizzo di CPU e memoria dei worker:

    Metriche di utilizzo di CPU e memoria da parte dei worker
    Figura 4.Metriche di utilizzo di CPU e memoria dei worker (fai clic per ingrandire)

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

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

Ottimizza il tuo ambiente e valutane le prestazioni

In base all'analisi dell'utilizzo delle risorse worker, devi allocare più memoria ai worker per tutte le attività nel DAG.

  1. Nel tuo ambiente Composer, apri la scheda DAG, fai clic sul nome del DAG di esempio (memory_consumption_dag), quindi fai clic su Metti in pausa DAG.

  2. Alloca memoria aggiuntiva del worker:

    1. Nella scheda Configurazione ambiente, individua la configurazione Risorse > Carichi di lavoro 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 qualche minuto per il riavvio del worker.

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

Vai a Monitoring e verifica che non siano visualizzate nuove attività zombie dopo aver aggiornato i limiti delle risorse worker:

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

Riepilogo

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

Esegui la pulizia

Per evitare che al tuo account Google Cloud 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. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Elimina singole risorse

Se prevedi di esplorare più tutorial e guide rapide, puoi riutilizzare i progetti per evitare di superare i limiti di quota.

Console

  1. Elimina l'ambiente Cloud Composer. Durante questa procedura elimini anche il bucket dell'ambiente.
  2. Elimina ogni criterio di avviso che hai creato in Cloud Monitoring.

Terraform

  1. Assicurati che lo script Terraform non contenga voci per le risorse ancora necessarie per il tuo 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. Eliminare manualmente il bucket dell'ambiente. Cloud Composer non lo elimina automaticamente. Puoi farlo dalla console Google Cloud o da Google Cloud CLI.

Passaggi successivi