Cloud Composer 1 | Cloud Composer 2
Questa pagina descrive come monitorare l'integrità e le prestazioni complessive dell'ambiente Cloud Composer con le metriche chiave nella dashboard di Monitoring.
Introduzione
Questo tutorial è incentrato sulle metriche di monitoraggio principali di Cloud Composer che possono fornire una buona panoramica dell'integrità e delle prestazioni a livello di ambiente.
Cloud Composer offre varie metriche che descrivono lo stato generale dell'ambiente. Le linee guida per il monitoraggio di questo tutorial si basano sulle metriche esposte nella dashboard di Monitoring del tuo ambiente Cloud Composer.
In questo tutorial scoprirai le metriche chiave che fungono da indicatori principali dei problemi relativi alle prestazioni e all'integrità del tuo ambiente, nonché le linee guida per interpretare ogni metrica in azioni correttive al fine di mantenere l'ambiente integro. Configurerai anche le regole di avviso per ogni metrica, eseguirai il DAG di esempio e utilizzerai queste metriche e questi avvisi per ottimizzare le prestazioni del tuo ambiente.
Obiettivi
Costi
Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:
Al termine di questo tutorial, puoi evitare di continuare la fatturazione eliminando le risorse che hai creato. Per maggiori dettagli, vedi Eseguire la pulizia.
Prima di iniziare
In questa sezione vengono descritte le azioni necessarie prima di iniziare il tutorial.
Creare e configurare un progetto
Per questo tutorial, devi avere un progetto Google Cloud. Configura il progetto nel seguente modo:
Nella console Google Cloud, seleziona o crea un progetto:
Verifica che la fatturazione sia attivata per il tuo progetto. Scopri come verificare se la fatturazione è abilitata per un progetto.
Assicurati che l'utente del progetto Google Cloud disponga dei seguenti ruoli per creare le risorse necessarie:
- Amministratore ambiente e oggetti di archiviazione
(
roles/composer.environmentAndStorageObjectAdmin
) - Amministratore Compute (
roles/compute.admin
) - Monitoring Editor (
roles/monitoring.editor
)
- Amministratore ambiente e oggetti di archiviazione
(
Abilita le API per il tuo progetto
Attiva l'API Cloud Composer.
Crea il tuo ambiente Cloud Composer
Crea un ambiente Cloud Composer 2.
Nell'ambito di questa procedura,
concederai il ruolo Estensione agente di servizio API Cloud Composer v2
(roles/composer.ServiceAgentV2Ext
) all'account
agente di servizio Composer. Cloud Composer usa questo account per eseguire operazioni
nel tuo progetto Google Cloud.
Esplora le metriche chiave per integrità e prestazioni a livello di ambiente
Questo tutorial è incentrato sulle metriche chiave che possono offrirti una buona panoramica dell'integrità e delle prestazioni complessive del tuo ambiente.
La dashboard di Monitoring nella console Google Cloud contiene una varietà di metriche e grafici che consentono di monitorare le tendenze nel tuo ambiente e identificare i problemi con i componenti Airflow e le risorse Cloud Composer.
Ogni ambiente Cloud Composer ha la propria dashboard di monitoraggio.
Acquisisci familiarità con le metriche principali riportate di seguito e individua ciascuna metrica nella dashboard di Monitoring:
Nella console Google Cloud, vai alla pagina Ambienti.
Nell'elenco degli ambienti, fai clic sul nome dell'ambiente. Viene visualizzata la pagina Dettagli ambiente.
Vai alla scheda Monitoring.
Seleziona la sezione Panoramica, individua l'elemento Panoramica dell'ambiente nella dashboard e osserva la metrica Integrità dell'ambiente (DAG di monitoraggio di Airflow).
Questa sequenza temporale mostra l'integrità dell'ambiente Cloud Composer. Il colore verde della barra di stato dell'ambiente indica che l'ambiente è integro, mentre lo stato non sano è indicato con colore rosso.
A intervalli di pochi minuti, Cloud Composer esegue un DAG di attività denominato
airflow_monitoring
. Se l'esecuzione del DAG di attività termina correttamente, lo stato di integrità èTrue
. Se l'esecuzione del DAG di attività non va a buon fine (ad esempio, a causa dell'eliminazione dei pod, della terminazione dei processi esterni o della manutenzione), lo stato di integrità èFalse
.
Seleziona la sezione Database SQL, individua la voce Stato del database nella dashboard e osserva la metrica Integrità del database.
Questa sequenza temporale mostra lo stato della connessione all'istanza Cloud SQL del tuo ambiente. La barra di integrità del database verde indica la connettività, mentre gli errori di connessione sono indicati con colore rosso.
Il pod di monitoraggio Airflow invia periodicamente un ping al database e segnala lo stato di integrità come
True
se è possibile stabilire una connessione o comeFalse
in caso contrario.
Nell'elemento Stato del database, osserva le metriche Utilizzo della CPU del database e Utilizzo memoria del database.
Il grafico di utilizzo della CPU del database indica l'utilizzo dei core della CPU da parte delle istanze del database Cloud SQL del tuo ambiente rispetto al limite totale di CPU del database disponibile.
Il grafico Utilizzo della memoria del database indica l'utilizzo della memoria da parte delle istanze del database Cloud SQL del tuo ambiente rispetto al limite totale di memoria del database disponibile.
Seleziona la sezione Scheduler, individua la voce Scheduler heartbeat nella dashboard e osserva la metrica Scheduler Heartbeat.
Questa sequenza temporale mostra l'integrità dello scheduler Airflow. Controlla la presenza di aree rosse per identificare problemi dello scheduler Airflow. Se il tuo ambiente ha più scheduler, lo stato del battito cardiaco è integro purché almeno uno degli scheduler risponda.
Lo scheduler non è considerato integro se l'ultimo battito cardiaco è stato ricevuto più di 30 secondi (valore predefinito) prima dell'ora corrente.
Seleziona la sezione Statistiche DAG, individua la voce Attività zombie terminate nella dashboard e osserva la metrica Attività zombie terminate.
Il grafico indica il numero di attività zombie terminate in un breve periodo. Le attività Zombie sono spesso causate dalla terminazione esterna dei processi Airflow (ad esempio quando il processo di un'attività viene interrotto).
Lo scheduler Airflow uccide periodicamente le attività zombie, come indicato in questo grafico.
Seleziona la sezione Worker, individua l'elemento Riavvii dei container worker nella dashboard e osserva la metrica Riavvii dei container worker.
- Un grafico indica il numero totale di riavvii per singoli container worker. Troppi riavvii di container possono influire sulla disponibilità del servizio o di altri servizi downstream che li utilizzano come dipendenza.
Impara i benchmark e le possibili azioni correttive per le metriche chiave
Il seguente elenco descrive i valori di benchmark che possono indicare problemi e fornisce azioni correttive che puoi intraprendere per risolverli.
Integrità dell'ambiente (DAG di monitoraggio di Airflow)
Percentuale di successo inferiore al 90% in un periodo di 4 ore
Gli errori possono indicare la rimozione dei pod o le terminazioni dei worker perché l'ambiente è sovraccarico o presenta malfunzionamenti. Le aree rosse nella sequenza temporale di salute dell'ambiente sono solitamente correlate alle aree rosse nelle altre barre di stato dei singoli componenti dell'ambiente. Identifica la causa principale esaminando altre metriche nella dashboard di Monitoring.
Integrità del database
Percentuale di successo inferiore al 95% in un periodo di 4 ore
Gli errori indicano la presenza di problemi di connettività al database Airflow, che potrebbero essere il risultato di un arresto anomalo o di un tempo di inattività del database a causa del sovraccarico (ad esempio a causa di un utilizzo elevato della CPU o della memoria oppure di una latenza maggiore durante la connessione al database). Questi sintomi molto frequentemente sono causati da DAG non ottimali, ad esempio quando i DAG utilizzano molte variabili di ambiente o Airflow definite a livello globale. Identifica la causa principale esaminando le metriche di utilizzo delle risorse di database SQL. Puoi anche controllare i log dello scheduler per individuare errori relativi alla connettività del database.
Utilizzo di CPU e memoria del database
Oltre l'80% di utilizzo medio della CPU o della memoria in un periodo di 12 ore
Il database potrebbe essere sovraccarico. Analizza la correlazione tra le esecuzioni dei DAG e i picchi di utilizzo della CPU del database o della memoria.
Puoi ridurre il carico del database tramite DAG più efficienti con query e connessioni in esecuzione ottimizzate o distribuendo il carico in modo più uniforme nel tempo.
In alternativa, puoi allocare più CPU o memoria al database. Le risorse di database sono controllate dalla proprietà delle dimensioni dell'ambiente del tuo ambiente, e l'ambiente deve essere scalato a una dimensione maggiore.
Heartbeat dello scheduler
Percentuale di successo inferiore al 90% in un periodo di 4 ore
Assegna più risorse allo scheduler o aumenta il numero di scheduler da 1 a 2 (consigliato).
Attività zombie interrotte
Più di un'attività di zombie nelle 24 ore
Il motivo più comune delle attività zombie è la carenza di risorse di CPU o memoria nel cluster del tuo ambiente. Esamina i grafici sull'utilizzo delle risorse dei worker e assegna più risorse ai tuoi worker oppure aumenta il timeout delle attività zombie in modo che lo scheduler attenda più a lungo prima di considerare un'attività come uno zombie.
Riavvii dei container worker
Più di un riavvio ogni 24 ore
Il motivo più comune è la mancanza di memoria o spazio di archiviazione del worker. Esamina il consumo delle risorse worker e alloca più memoria o spazio di archiviazione ai tuoi worker. Se la causa non è la mancanza di risorse, cerca la risoluzione dei problemi di riavvio dei worker e utilizza le query di Logging per scoprire i motivi dei riavvii dei worker.
Crea canali di notifica
Segui le istruzioni descritte in Creare un canale di notifica per creare un canale di notifica via email.
Per maggiori informazioni sui canali di notifica, consulta Gestire i canali di notifica.
Crea criteri di avviso
Crea criteri di avviso basati sui benchmark forniti nelle sezioni precedenti di questo tutorial per monitorare continuamente i valori delle metriche e ricevere notifiche quando queste metriche violano una condizione.
Console
Puoi configurare avvisi per ogni metrica presentata nella dashboard di Monitoring facendo clic sull'icona a forma di campana nell'angolo dell'elemento corrispondente:
![Crea un avviso per una metrica visualizzata nella dashboard di monitoraggio](https://cloud.google.com/static/composer/docs/images/monitoring-dashboard-alert.png?hl=it)
Individua tutte le metriche da monitorare nella dashboard Monitoraggio e fai clic sull'icona a forma di campana nell'angolo della metrica. Viene visualizzata la pagina Crea criterio di avviso.
Nella sezione Trasforma i dati:
Configura la sezione In ogni serie temporale come descritto nella configurazione dei criteri di avviso per la metrica.
Fai clic su Avanti, poi configura la sezione Configura trigger di avviso come descritto nella configurazione dei criteri di avviso per la metrica.
Tocca Avanti.
Configura le notifiche. Espandi il menu Canali di notifica e seleziona i canali di notifica che hai creato nel passaggio precedente.
Fai clic su Ok.
Nella sezione Assegna un nome al criterio di avviso, compila il campo Nome criterio di avviso. Assegna un nome descrittivo a ogni metrica. Utilizza il valore "Assegna un nome al criterio di avviso" come descritto nella configurazione dei criteri di avviso per la metrica.
Tocca Avanti.
Esamina il criterio di avviso e fai clic su Crea criterio.
Metrica di integrità dell'ambiente (DAG di monitoraggio di Airflow) - Configurazioni criterio di avviso
- Nome metrica: Ambiente Cloud Composer - Integro
- API: Composerr.googleapis.com/environment/healthy
Filtri:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Trasforma i dati > All'interno di ogni serie temporale:
- Finestra temporale continua: personalizzata
- Valore personalizzato: 4
- Unità personalizzate: ore
- Funzione finestra temporale continua: frazione vera
Configura l'attivatore di avviso:
- Tipi di condizioni: soglia
- Attivazione dell'avviso: qualsiasi serie temporale viola le
- Posizione soglia: sotto la soglia
- Valore soglia: 90
- Nome condizione: Condizione di integrità dell'ambiente
Configura le notifiche e finalizza l'avviso:
- Assegna al criterio di avviso il nome: Airflow Environment Health
Metrica di integrità del database - Configurazioni dei criterio di avviso
- Nome metrica: Ambiente Cloud Composer - Database integro
- API: Composerr.googleapis.com/environment/database_health
Filtri:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Trasforma i dati > All'interno di ogni serie temporale:
- Finestra temporale continua: personalizzata
- Valore personalizzato: 4
- Unità personalizzate: ore
- Funzione finestra temporale continua: frazione vera
Configura l'attivatore di avviso:
- Tipi di condizioni: soglia
- Attivazione dell'avviso: qualsiasi serie temporale viola le
- Posizione soglia: sotto la soglia
- Valore soglia: 95
- Nome condizione: condizione di integrità del database
Configura le notifiche e finalizza l'avviso:
- Assegna al criterio di avviso il nome: Integrità del database Airflow
Metrica di utilizzo della CPU del database - Configurazioni criterio di avviso
- Nome metrica: Ambiente Cloud Composer - Utilizzo CPU database
- API: Composerr.googleapis.com/environment/database/cpu/utilization
Filtri:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Trasforma i dati > All'interno di ogni serie temporale:
- Finestra temporale continua: personalizzata
- Valore personalizzato: 12
- Unità personalizzate: ore
- Funzione finestra temporale continua: media
Configura l'attivatore di avviso:
- Tipi di condizioni: soglia
- Attivazione dell'avviso: qualsiasi serie temporale viola le
- Posizione soglia: sopra la soglia
- Valore soglia: 80
- Nome condizione: condizione di utilizzo della CPU del database
Configura le notifiche e finalizza l'avviso:
- Assegna un nome al criterio di avviso: Utilizzo CPU del database Airflow
Metrica di utilizzo della CPU del database - Configurazioni criterio di avviso
- Nome metrica: Ambiente Cloud Composer - Utilizzo memoria database
- API: Composerr.googleapis.com/environment/database/memory/utilization
Filtri:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Trasforma i dati > All'interno di ogni serie temporale:
- Finestra temporale continua: personalizzata
- Valore personalizzato: 12
- Unità personalizzate: ore
- Funzione finestra temporale continua: media
Configura l'attivatore di avviso:
- Tipi di condizioni: soglia
- Attivazione dell'avviso: qualsiasi serie temporale viola le
- Posizione soglia: sopra la soglia
- Valore soglia: 80
- Nome condizione: condizione di utilizzo della memoria del database
Configura le notifiche e finalizza l'avviso:
- Assegna al criterio di avviso un nome: Utilizzo memoria del database Airflow
Metrica Heartbeat dello scheduler - Configurazioni criterio di avviso
- Nome metrica: Ambiente Cloud Composer - Heartbeat dello scheduler
- API: Composer.googleapis.com/environment/scheduler_heartbeat_count
Filtri:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Trasforma i dati > All'interno di ogni serie temporale:
- Finestra temporale continua: personalizzata
- Valore personalizzato: 4
- Unità personalizzate: ore
- Funzione finestra temporale continua: conteggio
Configura l'attivatore di avviso:
- Tipi di condizioni: soglia
- Attivazione dell'avviso: qualsiasi serie temporale viola le
- Posizione soglia: sotto la soglia
Valore soglia: 216
- Puoi ottenere questo numero eseguendo una query che aggrega il valore
_scheduler_heartbeat_count_mean
nell'editor di query di Metrics Explorer.
- Puoi ottenere questo numero eseguendo una query che aggrega il valore
Nome condizione: condizione Heartbeat dello scheduler
Configura le notifiche e finalizza l'avviso:
- Assegna al criterio di avviso il nome: Heartbeat dello scheduler Airflow
Metrica Attività zombie interrotte: configurazioni criterio di avviso
- Nome metrica: Ambiente Cloud Composer - Attività zombie terminate
- API: Composer.googleapis.com/environment/zombie_task_killed_count
Filtri:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Trasforma i dati > All'interno di ogni serie temporale:
- Finestra temporale continua: 1 giorno
- Funzione finestra temporale continua: somma
Configura l'attivatore di avviso:
- Tipi di condizioni: soglia
- Attivazione dell'avviso: qualsiasi serie temporale viola le
- Posizione soglia: sopra la soglia
- Valore soglia: 1
- Nome condizione: condizione Attività zombie
Configura le notifiche e finalizza l'avviso:
- Assegna un nome al criterio di avviso: Airflow Zombie Tasks
Metrica dei riavvii dei container worker - configurazioni criterio di avviso
- Nome metrica: Ambiente Cloud Composer - Attività zombie terminate
- API: Composer.googleapis.com/environment/zombie_task_killed_count
Filtri:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Trasforma i dati > All'interno di ogni serie temporale:
- Finestra temporale continua: 1 giorno
- Funzione finestra temporale continua: somma
Configura l'attivatore di avviso:
- Tipi di condizioni: soglia
- Attivazione dell'avviso: qualsiasi serie temporale viola le
- Posizione soglia: sopra la soglia
- Valore soglia: 1
- Nome condizione: condizione Attività zombie
Configura le notifiche e finalizza l'avviso:
- Assegna un nome al criterio di avviso: Airflow Zombie Tasks
Terraform
Esegui uno script Terraform che crei un canale di notifica via email e carichi criteri di avviso per le metriche chiave fornite in questo tutorial in base ai rispettivi benchmark:
- Salva il file Terraform di esempio sul tuo computer locale.
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto del tuo progetto. Ad esempio:example-project
.EMAIL_ADDRESS
: l'indirizzo email a cui inviare una notifica nel caso in cui venga attivato un avviso.ENVIRONMENT_NAME
: nome del tuo ambiente Cloud Composer. Ad esempio,example-composer-environment
.CLUSTER_NAME
: il nome del cluster di ambiente, disponibile in Configurazione dell'ambiente > Risorse > Cluster GKE nella console Google Cloud.
resource "google_monitoring_notification_channel" "basic" {
project = "PROJECT_ID"
display_name = "Test Notification Channel"
type = "email"
labels = {
email_address = "EMAIL_ADDRESS"
}
# force_delete = false
}
resource "google_monitoring_alert_policy" "environment_health_metric" {
project = "PROJECT_ID"
display_name = "Airflow Environment Health"
combiner = "OR"
notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
conditions {
display_name = "Environment health condition"
condition_threshold {
filter = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/healthy\" AND resource.label.environment_name=\"ENVIRONMENT_NAME\""
duration = "60s"
comparison = "COMPARISON_LT"
threshold_value = 0.9
aggregations {
alignment_period = "14400s"
per_series_aligner = "ALIGN_FRACTION_TRUE"
}
}
}
}
resource "google_monitoring_alert_policy" "database_health_metric" {
project = "PROJECT_ID"
display_name = "Airflow Database Health"
combiner = "OR"
notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
conditions {
display_name = "Database health condition"
condition_threshold {
filter = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/database_health\" AND resource.label.environment_name=\"ENVIRONMENT_NAME\""
duration = "60s"
comparison = "COMPARISON_LT"
threshold_value = 0.95
aggregations {
alignment_period = "14400s"
per_series_aligner = "ALIGN_FRACTION_TRUE"
}
}
}
}
resource "google_monitoring_alert_policy" "alert_database_cpu_usage" {
project = "PROJECT_ID"
display_name = "Airflow Database CPU Usage"
combiner = "OR"
notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
conditions {
display_name = "Database CPU usage condition"
condition_threshold {
filter = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/database/cpu/utilization\" AND resource.label.environment_name=\"ENVIRONMENT_NAME\""
duration = "60s"
comparison = "COMPARISON_GT"
threshold_value = 80
aggregations {
alignment_period = "43200s"
per_series_aligner = "ALIGN_MEAN"
}
}
}
}
resource "google_monitoring_alert_policy" "alert_database_memory_usage" {
project = "PROJECT_ID"
display_name = "Airflow Database Memory Usage"
combiner = "OR"
notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
conditions {
display_name = "Database memory usage condition"
condition_threshold {
filter = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/database/memory/utilization\" AND resource.label.environment_name=\"ENVIRONMENT_NAME\""
duration = "60s"
comparison = "COMPARISON_GT"
threshold_value = 80
aggregations {
alignment_period = "43200s"
per_series_aligner = "ALIGN_MEAN"
}
}
}
}
resource "google_monitoring_alert_policy" "alert_scheduler_heartbeat" {
project = "PROJECT_ID"
display_name = "Airflow Scheduler Heartbeat"
combiner = "OR"
notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
conditions {
display_name = "Scheduler heartbeat condition"
condition_threshold {
filter = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/scheduler_heartbeat_count\" AND resource.label.environment_name=\"ENVIRONMENT_NAME\""
duration = "60s"
comparison = "COMPARISON_LT"
threshold_value = 216 // Threshold is 90% of the average for composer.googleapis.com/environment/scheduler_heartbeat_count metric in an idle environment
aggregations {
alignment_period = "14400s"
per_series_aligner = "ALIGN_COUNT"
}
}
}
}
resource "google_monitoring_alert_policy" "alert_zombie_task" {
project = "PROJECT_ID"
display_name = "Airflow Zombie Tasks"
combiner = "OR"
notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
conditions {
display_name = "Zombie tasks condition"
condition_threshold {
filter = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/zombie_task_killed_count\" AND resource.label.environment_name=\"ENVIRONMENT_NAME\""
duration = "60s"
comparison = "COMPARISON_GT"
threshold_value = 1
aggregations {
alignment_period = "86400s"
per_series_aligner = "ALIGN_SUM"
}
}
}
}
resource "google_monitoring_alert_policy" "alert_worker_restarts" {
project = "PROJECT_ID"
display_name = "Airflow Worker Restarts"
combiner = "OR"
notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
conditions {
display_name = "Worker container restarts condition"
condition_threshold {
filter = "resource.type = \"k8s_container\" AND (resource.labels.cluster_name = \"CLUSTER_NAME\" AND resource.labels.container_name = monitoring.regex.full_match(\"airflow-worker|base\") AND resource.labels.pod_name = monitoring.regex.full_match(\"airflow-worker-.*|airflow-k8s-worker-.*\")) AND metric.type = \"kubernetes.io/container/restart_count\""
duration = "60s"
comparison = "COMPARISON_GT"
threshold_value = 1
aggregations {
alignment_period = "86400s"
per_series_aligner = "ALIGN_RATE"
}
}
}
}
Testa i criteri di avviso
Questa sezione descrive come testare i criteri di avviso creati e interpretare i risultati.
Carica un DAG di esempio
Il DAG di esempio memory_consumption_dag.py
fornito in questo tutorial imita
l'utilizzo intensivo della memoria dei worker. Il DAG contiene quattro attività, ciascuna delle quali scrive dati in una stringa di esempio, occupando 380 MB di memoria. L'esecuzione del DAG di esempio è pianificata ogni 2 minuti e inizierà automaticamente una volta caricato nel tuo ambiente Composer.
Carica il seguente DAG di esempio nell'ambiente creato nei passaggi precedenti:
from datetime import datetime
import sys
import time
from airflow import DAG
from airflow.operators.python import PythonOperator
def ram_function():
data = ""
start = time.time()
for i in range(38):
data += "a" * 10 * 1000**2
time.sleep(0.2)
print(f"{i}, {round(time.time() - start, 4)}, {sys.getsizeof(data) / (1000 ** 3)}")
print(f"Size={sys.getsizeof(data) / (1000 ** 3)}GB")
time.sleep(30 - (time.time() - start))
print(f"Complete in {round(time.time() - start, 2)} seconds!")
with DAG(
dag_id="memory_consumption_dag",
start_date=datetime(2023, 1, 1, 1, 1, 1),
schedule="1/2 * * * *",
catchup=False,
) as dag:
for i in range(4):
PythonOperator(
task_id=f"task_{i+1}",
python_callable=ram_function,
retries=0,
dag=dag,
)
Interpretare avvisi e metriche in Monitoring
Attendi circa 10 minuti dopo l'avvio dell'esecuzione del DAG di esempio e valuta i risultati del test:
Controlla la tua casella di posta email per verificare di aver ricevuto una notifica da Google Cloud Alerting con oggetto che inizia con
[ALERT]
. Il contenuto di questo messaggio contiene i dettagli dell'incidente relativo ai criteri di avviso.Fai clic sul pulsante Visualizza incidente nella notifica via email. Ti reindirizzeremo a Metrics Explorer. Esamina i dettagli dell'incidente di avviso:
Figura 2. Dettagli dell'incidente di avviso (fai clic per ingrandire) Il grafico delle metriche degli incidenti indica che le metriche che hai creato hanno superato la soglia di 1, il che significa che Airflow ha rilevato e interrotto più di un'attività zombie.
Nel tuo ambiente Cloud Composer, vai alla scheda Monitoring, apri la sezione Statistiche DAG e trova il grafico Attività zombie terminate:
Figura 3. Grafico delle attività zombie (fai clic per ingrandire) Il grafico indica che Airflow ha interrotto circa 20 attività zombie solo nei primi 10 minuti dall'esecuzione del DAG di esempio.
In base ai benchmark e alle azioni correttive, il motivo più comune delle attività zombie è la mancanza di memoria o CPU dei worker. Identifica la causa principale delle attività zombie analizzando l'utilizzo delle risorse worker.
Apri la sezione Worker nella dashboard di Monitoring ed esamina le metriche di utilizzo di CPU e memoria dei worker:
Figura 4.Metriche di utilizzo di CPU e memoria dei worker (fai clic per ingrandire) Il grafico Utilizzo totale della CPU dei worker indica che l'utilizzo della CPU dei worker è sempre stato inferiore al 50% del limite totale disponibile, pertanto la CPU disponibile è sufficiente. Il grafico Utilizzo della memoria totale dei worker mostra che l'esecuzione del DAG di esempio ha comportato il raggiungimento del limite di memoria allocabile, pari a quasi il 75% del limite di memoria totale mostrato nel grafico (GKE riserva il 25% dei primi 4 GiB di memoria e altri 100 MiB di memoria su ogni nodo per gestire l'eliminazione dei pod).
Puoi concludere che i worker non dispongono delle risorse di memoria per eseguire correttamente il DAG di esempio.
Ottimizza il tuo ambiente e valutane le prestazioni
In base all'analisi dell'utilizzo delle risorse worker, devi allocare più memoria ai worker per tutte le attività nel DAG.
Nel tuo ambiente Composer, apri la scheda DAG, fai clic sul nome del DAG di esempio (
memory_consumption_dag
), quindi fai clic su Metti in pausa DAG.Alloca memoria aggiuntiva del worker:
Nella scheda Configurazione ambiente, individua la configurazione Risorse > Carichi di lavoro e fai clic su Modifica.
Nell'elemento Worker, aumenta il limite di memoria. In questo tutorial, utilizza 3,25 GB.
Salva le modifiche e attendi qualche minuto per il riavvio del worker.
Apri la scheda dei DAG, fai clic sul nome del DAG di esempio (
memory_consumption_dag
) e fai clic su Riattiva DAG.
Vai a Monitoring e verifica che non siano visualizzate nuove attività zombie dopo aver aggiornato i limiti delle risorse worker:
Riepilogo
In questo tutorial hai appreso le principali metriche di integrità e prestazioni a livello di ambiente, hai imparato come configurare i criteri di avviso per ogni metrica e come interpretare ogni metrica in azioni correttive. Hai quindi eseguito un DAG di esempio, identificato la causa principale dei problemi di integrità dell'ambiente con l'aiuto di avvisi e grafici di Monitoring e ottimizzato il tuo ambiente assegnando più memoria ai worker. Tuttavia, ti consigliamo di ottimizzare i DAG per ridurre innanzitutto il consumo delle risorse dei worker, perché non è possibile aumentare le risorse oltre una determinata soglia.
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse o mantieni il progetto ed elimina le singole risorse.
Elimina il progetto
- Nella console Google Cloud, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.
Elimina singole risorse
Se prevedi di esplorare più tutorial e guide rapide, puoi riutilizzare i progetti per evitare di superare i limiti di quota.
Console
- Elimina l'ambiente Cloud Composer. Durante questa procedura elimini anche il bucket dell'ambiente.
- Elimina ogni criterio di avviso che hai creato in Cloud Monitoring.
Terraform
- Assicurati che lo script Terraform non contenga voci per le risorse ancora necessarie per il tuo progetto. Ad esempio, potresti voler mantenere alcune API abilitate e le autorizzazioni IAM ancora assegnate (se hai aggiunto queste definizioni allo script Terraform).
- Esegui
terraform destroy
. - 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
- Ottimizzare gli ambienti
- Ambienti di scalabilità
- Gestire le etichette dell'ambiente e suddividere i costi dell'ambiente