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

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

Introduzione

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

Cloud Composer offre diverse metriche che descrivono il funzionamento lo stato desiderato 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 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 è attivata 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 di Compute (roles/compute.admin)
    • Editor di Monitoring (roles/monitoring.editor)

Abilita le API per il 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 l'estensione agente di servizio API Cloud Composer v2 (roles/composer.ServiceAgentV2Ext) all'agente di servizio Composer . Cloud Composer utilizza questo account per eseguire operazioni nel tuo 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 darti una buona panoramica dell'integrità e del rendimento complessivi del tuo ambiente.

La dashboard di Monitoring in La console Google Cloud contiene una varietà di metriche e grafici che consentono il monitoraggio delle tendenze nel tuo ambiente e l'identificazione dei problemi con Airflow e le risorse di 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 Monitoraggio:

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

  4. Seleziona la sezione Panoramica e individua l'elemento Panoramica dell'ambiente su della dashboard e osserva Metrica Integrità dell'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 un ambiente non integro è indicato in 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 salute è True. Se l'esecuzione del DAG di attività non riesce (ad esempio, a causa dell'eliminazione dei pod, della chiusura 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 sequenza temporale mostra lo stato della connessione all'istanza Cloud SQL del tuo ambiente. La barra di stato del database verde 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. Nella voce Integrità del database, osserva i campi Utilizzo della CPU del database e Metriche relative all'utilizzo della memoria del database.

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

    • Il grafico di utilizzo della memoria del database indica l'utilizzo della memoria da parte le istanze di database Cloud SQL del tuo ambiente e limite totale di memoria disponibile del database.

  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 ci sono 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 e individua le Attività Zombie terminate sulla dashboard e osserva la metrica Attività Zombie terminate.

    • 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. Un numero eccessivo di riavvii dei container può influire sulla disponibilità dei del tuo servizio o di altri servizi downstream che lo usano come dipendenza.

Scopri benchmark e 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.

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

    • Rapporto di successo inferiore al 90% in una finestra di 4 ore

    • Gli errori possono comportare l'eliminazione dei pod o la chiusura dei worker, dell'ambiente di rete è sovraccarico o presenta malfunzionamenti. Le aree rosse nella cronologia della salute dell'ambiente sono in genere correlate alle aree rosse nelle altre barre della salute dei singoli componenti dell'ambiente. Identifica la causa principale tramite esaminando altre metriche nella dashboard di Monitoring.

  • Integrità del database

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

    • Gli errori indicano che ci sono problemi di connettività ad Airflow causata da un arresto anomalo o da un tempo di inattività del database il database è sovraccarico (ad esempio, a causa di un elevato numero di CPU o memoria utilizzo o latenza più elevata durante la connessione al database). Questi sintomi il più delle volte sono causate da DAG non ottimali, ad esempio quando i DAG utilizzano molte variabili Airflow o di ambiente definite a livello globale. Identifica la radice la causa esaminando le metriche di utilizzo delle risorse di database SQL. Puoi anche esaminare i log dello scheduler per individuare eventuali errori relativi alla connettività del database.

  • Utilizzo della CPU e della memoria del database

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

    • Il database potrebbe essere sovraccaricato. Analizza la correlazione tra il tuo DAG e picchi di utilizzo della CPU o della memoria del database.

  • Heartbeat dello scheduler

    • Rapporto di successo inferiore al 90% in una finestra 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à zombie ogni 24 ore

    • Il motivo più comune delle attività zombie è la carenza di risorse di CPU o memoria nel cluster del tuo ambiente. Rivedi l'utilizzo delle risorse worker grafici e assegna più risorse ai lavoratori aumenta il timeout delle attività zombie in modo che lo scheduler aspetti più a lungo prima di considerare un'attività 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 dei worker e alloca più memoria o spazio di archiviazione ai worker. Se la causa non è la mancanza di risorse, consulta la sezione sulla risoluzione dei problemi relativi al riavvio dei worker e utilizza le query di logging per scoprire i motivi dei riavvii dei worker.

Creare canali di notifica

Segui le istruzioni riportate in Crea un canale di notifica per creare un canale di notifica via email.

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 basati sui benchmark forniti nella precedente di questo tutorial per monitorare continuamente i valori delle metriche ricevono notifiche quando queste metriche 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 in la 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 nell' passaggio precedente.

  5. Fai clic su OK.

  6. Nella sezione Assegna un nome al criterio di avviso, inserisci 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. 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 true
  • 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 un nome al criterio di avviso: Integrità ambiente Airflow

Metrica di salute del database: configurazioni dei criteri 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 true
  • 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 un nome al criterio 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
    • 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 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
    • Attivazione dell'avviso: Qualsiasi serie temporale viola
    • 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 il nome Utilizzo memoria 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 l'attivatore di avvisi:

    • 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 i valori _scheduler_heartbeat_count_mean in Editor di query di Esplora metriche.
    • 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 dei criteri 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 avvisi:

    • Tipi di condizioni: Soglia
    • Attivazione dell'avviso: Qualsiasi serie temporale viola
    • 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
    • Attivazione dell'avviso: Qualsiasi serie temporale viola
    • Posizione soglia: sopra la soglia
    • Valore soglia: 1
    • Nome condizione: Condizione 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 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 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 la notifica in caso di viene attivato l'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 > 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 che consentono di analizzare i dati e visualizzare 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. L'esempio Il DAG è pianificato per essere eseguito ogni 2 minuti e inizierà automaticamente dopo averlo 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,
        )

Interpreta avvisi e metriche in Monitoraggio

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

  1. Controlla la tua casella di posta elettronica per verificare di aver ricevuto una notifica da Google Cloud Alerting con l'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. Rivedi i dettagli dell'avviso incidente:

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

    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)
    di Gemini Advanced.

    Il grafico indica che Airflow ha ucciso circa 20 attività zombie appena i 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 tuoi worker.

    Apri la sezione Worker nella dashboard di Monitoring ed esamina il worker Metriche di utilizzo di CPU e memoria:

    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 è stato inferiore al 50% del limite totale disponibile, quindi la CPU disponibile è sufficiente. Il grafico Utilizzo di memoria totale worker mostra che l'esecuzione il DAG di esempio ha raggiunto il limite di memoria allocabile che equivale quasi il 75% del limite di memoria totale mostrato nel grafico. (GKE prenota il 25% dei primi 4 GiB di memoria 100 MiB di memoria aggiuntivi su ogni nodo per gestire l'eliminazione 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 valuta le sue prestazioni

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

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

  2. Alloca memoria worker aggiuntiva:

    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, utilizzare 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)
di Gemini Advanced.

Riepilogo

In questo tutorial hai appreso i concetti di integrità e le metriche delle prestazioni, come configurare i criteri di avviso per ogni metrica per 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 quanto 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 usati in questo tutorial, elimina il progetto che contiene le risorse o mantenere il progetto ed eliminare 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. Eliminare 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, potrebbe voler mantenere alcune API abilitate e IAM ancora assegnate (se hai aggiunto queste definizioni script Terraform).
  2. Esegui terraform destroy.
  3. Elimina manualmente il bucket dell'ambiente. Cloud Composer non lo elimina automaticamente. Puoi farlo da nella console Google Cloud o in Google Cloud CLI.

Passaggi successivi