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

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

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

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, 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 account Google Cloud progetto. Configura il progetto nel seguente modo:

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

    Vai al selettore di progetti

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

  3. Assicurati che l'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 tuo progetto

Enable the Cloud Composer API.

Enable the API

crea il tuo 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 monitoraggio nella console Google Cloud contiene una serie di metriche e grafici che consentono di monitorare le tendenze nel tuo ambiente e identificare i problemi relativi ai componenti di Airflow e alle risorse Cloud Composer.

Ogni ambiente Cloud Composer dispone di un proprio Fitbit.com.

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 del tuo ambiente. Viene visualizzata la pagina Dettagli dell'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à di Cloud Composer completamente gestito di Google Cloud. 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 verifica dell'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, per eliminazione dei pod, interruzione di processi esterni o manutenzione), lo stato di salute è False.

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

    • Questa sequenza temporale mostra lo stato della connessione all'istanza Cloud SQL del tuo ambiente. La barra 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 Utilizzo CPU database indica l'utilizzo dei core CPU da parte delle istanze del database Cloud SQL del tuo ambiente rispetto al limite di CPU totale 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 scheduler e individua l'heartbeat dello scheduler sulla dashboard e osserva la metrica Scheduler Heartbeat.

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

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

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

    • Il grafico indica il numero di attività zombie uccise in un piccolo finestra temporale. Le attività Zombie sono spesso causate dalla chiusura esterna dei processi Airflow (come l'interruzione del processo di un'attività).

    • Lo scheduler Airflow elimina periodicamente 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 contenitori possono influire sulla disponibilità del tuo servizio o di altri servizi a valle che lo utilizzano come dipendenza.
di Gemini Advanced.

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

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

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

    • Tasso 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

    • Percentuale 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 vengono più spesso causati da DAG non ottimali, ad esempio quando i DAG utilizzano molte variabili di 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 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 le esecuzioni del DAG e gli 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 all'organizzatore o aumenta il numero di organizzatori 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 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 di spazio di archiviazione per i worker. Esamina il consumo delle risorse dei worker e alloca più memoria o spazio di archiviazione ai worker. Se il motivo non è la mancanza di risorse, esamina le risoluzione dei problemi di riavvio del worker e utilizza Logging delle query per scoprire i motivi del riavvio del worker.

Crea canali di notifica

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

Per ulteriori informazioni sui canali di notifica, vedi Gestisci 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 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)
di Gemini Advanced.
  1. Trova ogni metrica che vuoi monitorare nella e fai clic sull'icona a forma di campana nell'angolo dell'elemento della metrica. La 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, quindi configura la sezione Configura l'attivatore di avviso come descritto nella configurazione dei criteri di avviso per la metrica.

  3. Fai clic su Avanti.

  4. Configura le notifiche. Espandi il menu Canali di notifica e seleziona i canali di notifica che hai creato nell' 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 campo 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 Integrità ambiente (DAG di monitoraggio di Airflow): configurazioni dei criteri di avviso

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

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

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

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

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

Metrica di salute del database: configurazioni dei criteri di avviso

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

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

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

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

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

Metrica di utilizzo della CPU del database - configurazioni dei criterio 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 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 della CPU del database
  • Configura le notifiche e finalizza l'avviso:

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

Metrica di utilizzo della CPU del database - configurazioni dei criterio 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 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 database Airflow

Metrica degli heartbeat dello scheduler - configurazioni dei criterio di avviso

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

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

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

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

      1. Puoi ottenere questo numero eseguendo una query che aggrega 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 relativa alle attività Zombie terminate: configurazioni criterio 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

Metrica Riavvii dei container worker - 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

Terraform

Eseguire uno script Terraform che crea un canale di notifica via email e caricalo di avviso per le metriche chiave fornite in questo tutorial in base i 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 dell'ambiente che puoi trovare in Configurazione dell'ambiente > Risorse > GKE cluster nella console Google Cloud.
resource "google_monitoring_notification_channel" "basic" {
  project      = "PROJECT_ID"
  display_name = "Test Notification Channel"
  type         = "email"
  labels = {
    email_address = "EMAIL_ADDRESS"
  }
  # force_delete = false
}

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

}

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

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

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

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

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

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

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

Testa i criteri di avviso

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

Carica un DAG di esempio

Il DAG 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à, ognuna delle quali scrive i dati in una stringa di esempio, utilizzando 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,
        )

Interpretare avvisi e metriche in Monitoring

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]. 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. Stai reindirizzato 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 degli incidenti indica che le metriche create hanno superato la soglia di 1, il che significa che Airflow ha rilevato e ucciso più di 1 zombie dell'attività.

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

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

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

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

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

    Metriche di utilizzo di CPU e memoria dei worker
    Figura 4. Metriche relative all'utilizzo della CPU e della 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 totale memoria worker mostra che l'esecuzione del DAG di esempio ha comportato il raggiungimento del limite di memoria allocabile, pari a circa il 75% del limite di memoria totale mostrato nel grafico (GKE riserva il 25% delle prime 4 GB di memoria e un'ulteriore quantità di 100 MB di memoria su ogni nodo per gestire l'espulsione dei pod).

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

Ottimizza l'ambiente e 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, utilizza 3,25 GB.

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

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

Vai a Monitoring e verifica che non siano state visualizzate nuove attività zombie dopo il giorno ha 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 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 utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

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

    Go to Manage resources

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

Elimina singole risorse

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

Console

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

Terraform

  1. Assicurati che il tuo script Terraform non contenga voci per le risorse ancora richieste dal tuo 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. Eliminare 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