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

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

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 si concentra sulle principali metriche di monitoraggio 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 imparerai 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 per mantenere l'ambiente integro. Inoltre, configurerai regole di avviso per ogni metrica, eseguirai il DAG di esempio e utilizzerai queste metriche e 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, potrai evitare la fatturazione continua eliminando le risorse che hai creato. Per maggiori dettagli, vedi Pulizia.

Prima di iniziare

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

Creare e configurare un progetto

Per questo tutorial è necessario un progetto Google Cloud. 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 è abilitata per un progetto.

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

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

Abilita le API per il 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, concedi il ruolo dell'estensione dell'agente di servizio API Cloud Composer v2 (roles/composer.ServiceAgentV2Ext) all'account dell'agente di servizio Composer. Cloud Composer usa l'account per eseguire operazioni nel progetto Google Cloud.

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

Questo tutorial si concentra sulle metriche chiave che possono fornire una buona panoramica dell'integrità e delle prestazioni complessive del tuo ambiente.

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

Ogni ambiente Cloud Composer ha la propria dashboard Monitoring.

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

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

    Vai ad Ambienti

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

  3. Vai alla scheda Monitoring.

  4. Seleziona la sezione Panoramica, individua la voce 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 integrità dell'ambiente indica che l'ambiente è integro, mentre lo stato dell'ambiente non integro è indicato con il colore rosso.

    • Ogni 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 di un processo esterno o della manutenzione), lo stato di integrità è False.

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

    • Questa cronologia 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 in rosso.

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

  6. Nella voce Integrità 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 sull'utilizzo della memoria del database indica l'utilizzo della memoria da parte delle istanze del database Cloud SQL dell'ambiente rispetto al limite di memoria totale del database disponibile.

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

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

    • Lo scheduler è considerato in stato non 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 l'elemento Attività Zombie terminate nella dashboard e osserva la metrica Attività Zombie terminate.

    • Questo grafico indica il numero di attività zombie terminate in una piccola finestra temporale. 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 termina periodicamente le attività zombie, il che si riflette 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 container possono influire sulla disponibilità del tuo servizio o di altri servizi downstream che lo utilizzano come dipendenza.

Scopri benchmark e 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 l'eliminazione dei pod o la chiusura dei worker perché l'ambiente è sovraccarico o presenta malfunzionamenti. Le aree rosse nella cronologia di integrità dell'ambiente di solito sono correlate alle aree rosse nelle altre barre di integrità 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 che esistono problemi di connettività al database Airflow, che potrebbero essere dovuti a un arresto anomalo o a un tempo di inattività del database dovuto al sovraccarico del database (ad esempio a causa di un elevato utilizzo di CPU o memoria o di una latenza maggiore durante la connessione al database). Questi sintomi molto spesso sono causati da DAG non ottimali, ad esempio quando i DAG utilizzano molte variabili Airflow o di ambiente definite a livello globale. Identifica la causa principale esaminando le metriche di utilizzo delle risorse del database SQL. Puoi anche esaminare i log dello scheduler per individuare eventuali errori relativi alla connettività del database.

  • Utilizzo di CPU e memoria del database

    • Oltre l'80% dell'utilizzo medio di CPU o 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 memoria o della CPU del database.

  • 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 (opzione consigliata).

  • Attività zombie interrotte

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

    • Il motivo più comune delle attività zombie è la carenza di risorse di CPU o memoria nel cluster dell'ambiente. Esamina i grafici di utilizzo delle risorse worker e assegna altre risorse ai worker oppure aumenta il timeout delle attività zombie in modo che lo scheduler aspetti più a lungo prima di considerare un'attività una zombie.

  • Riavvii dei container worker

    • Più di un riavvio in 24 ore

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

Crea canali di notifica

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

Per ulteriori 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 le metriche da monitorare nella dashboard Monitoraggio e fai clic sull'icona a forma di campana nell'angolo dell'elemento della metrica. Si apre 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 e configura la sezione Configura trigger 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 al criterio di avviso, compila il campo Nome criterio di avviso. Utilizza un nome descrittivo per ogni metrica. Utilizza il valore "Assegna un nome al criterio di avviso" come descritto nella configurazione dei criteri di avviso per la metrica.

  7. Fai clic su Avanti.

  8. Rivedi 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: 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 vera
  • Configura trigger di avviso:

    • Tipi di condizioni: soglia
    • Attivazione dell'avviso: Qualsiasi serie temporale viola
    • 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 - Integrità del database
  • 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 vera
  • Configura trigger di avviso:

    • Tipi di condizioni: soglia
    • Attivazione dell'avviso: Qualsiasi serie temporale viola
    • 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 dei criterio di avviso

  • Nome metrica: Ambiente Cloud Composer - Utilizzo CPU di 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 trigger di avviso:

    • Tipi di condizioni: soglia
    • Attivazione dell'avviso: Qualsiasi serie temporale viola
    • Posizione soglia: sopra la soglia
    • Valore soglia: 80
    • Nome condizione: condizione di utilizzo CPU del database
  • Configura le notifiche e finalizza l'avviso:

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

Metrica di utilizzo della CPU del database - configurazioni dei criterio di avviso

  • Nome metrica: ambiente Cloud Composer - Utilizzo memoria 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 trigger di avviso:

    • Tipi di condizioni: soglia
    • Attivazione dell'avviso: Qualsiasi serie temporale viola
    • Posizione soglia: sopra la soglia
    • Valore soglia: 80
    • Nome condizione: condizione di utilizzo memoria del database
  • Configura le notifiche e finalizza l'avviso:

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

Metrica degli heartbeat dello scheduler - configurazioni dei 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 trigger di avviso:

    • Tipi di condizioni: soglia
    • Attivazione dell'avviso: Qualsiasi serie temporale viola
    • 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 Esplora metriche.
    • Nome condizione: condizione heartbeat dello scheduler

  • Configura le notifiche e finalizza l'avviso:

    • Denomina il criterio di avviso: Heartbeat dello scheduler Airflow

Metrica relativa alle attività Zombie terminate: 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 trigger di avviso:

    • Tipi di condizioni: soglia
    • Attivazione dell'avviso: Qualsiasi serie temporale viola
    • Posizione soglia: sopra la soglia
    • Valore soglia: 1
    • Nome condizione: condizione di attività Zombie
  • Configura le notifiche e finalizza l'avviso:

    • Assegna al criterio di avviso il nome Airflow Zombie Tasks

Metrica relativa ai 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 trigger di avviso:

    • Tipi di condizioni: soglia
    • Attivazione dell'avviso: Qualsiasi serie temporale viola
    • Posizione soglia: sopra la soglia
    • Valore soglia: 1
    • Nome condizione: condizione di attività Zombie
  • Configura le notifiche e finalizza l'avviso:

    • Assegna al criterio di avviso il nome 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 computer locale.
  2. Sostituisci quanto segue:

    • PROJECT_ID: l'ID progetto del tuo progetto. Ad esempio: example-project.
    • EMAIL_ADDRESS: l'indirizzo email che deve ricevere una notifica nel caso in cui venga attivato un avviso.
    • ENVIRONMENT_NAME: il nome dell'ambiente Cloud Composer. Ad esempio, example-composer-environment.
    • CLUSTER_NAME: il nome del cluster di ambiente, che puoi trovare 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 memory_consumption_dag.py di esempio fornito in questo tutorial imita l'utilizzo intensivo della memoria da parte dei worker. Il DAG contiene 4 attività, ciascuna delle quali scrive i dati in una stringa di esempio, utilizzando 380 MB di memoria. Il DAG di esempio è pianificato per essere eseguito ogni 2 minuti e inizierà automaticamente dopo che lo caricherai nel tuo ambiente Composer.

Carica il seguente DAG di esempio nell'ambiente che hai 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 Alert con un oggetto che inizi con [ALERT]. Il contenuto di questo messaggio contiene i dettagli dell'incidente del criterio di avviso.

  2. Fai clic sul pulsante Visualizza incidente nella notifica via email. Verrai reindirizzato 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 create hanno superato la soglia di 1, il che significa che Airflow ha rilevato e interrotto più di 1 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 terminato circa 20 attività zombie nei primi 10 minuti dall'esecuzione del DAG di esempio.

  4. Secondo i benchmark e le azioni correttive, il motivo più comune delle attività zombie è la mancanza di memoria o CPU dei worker. Identifica la causa principale delle attività zombi 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 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 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 portato al raggiungimento del limite di memoria allocabile, che corrisponde 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 l'ambiente e valuta le sue prestazioni

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

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

  2. Alloca memoria worker aggiuntiva:

    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 alcuni minuti per il riavvio del worker.

  3. Apri la scheda 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 state visualizzate nuove attività zombie dopo aver aggiornato i limiti delle risorse 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 principali metriche di 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 Monitoring e hai ottimizzato l'ambiente assegnando più memoria ai tuoi worker. Tuttavia, ti consigliamo di 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 account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure 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, riutilizzare i progetti può aiutarti a evitare di superare i limiti di quota.

Console

  1. Eliminare l'ambiente Cloud Composer. Puoi anche eliminare il bucket dell'ambiente durante questa procedura.
  2. Elimina ogni criterio di avviso 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. 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