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:
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 è attivata per un progetto.
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
)
- Amministratore oggetti di ambiente e archiviazione
(
Abilita le API per il progetto
Enable the Cloud Composer 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:
Nella console Google Cloud, vai alla pagina Ambienti.
Nell'elenco degli ambienti, fai clic sul nome dell'ambiente. Si apre la pagina Dettagli ambiente.
Vai alla scheda Monitoraggio.
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
.
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 comeFalse
in caso contrario.
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.
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.
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.
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.
Puoi ridurre il carico del database DAG in modo più efficiente con query e connessioni ottimizzate o diffondendo vengono caricati in modo più uniforme nel tempo.
In alternativa, puoi allocare più CPU o memoria al database. Le risorse del database sono controllate dalla proprietà delle dimensioni dell'ambiente e l'ambiente deve essere a una dimensione maggiore.
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:
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.
Nella sezione Trasforma i dati:
Configura la sezione All'interno di ogni serie temporale come descritto in la configurazione dei criteri di avviso per la metrica.
Fai clic su Avanti e configura la sezione Configura trigger di avviso come descritto nella configurazione dei criteri di avviso per la metrica.
Fai clic su Avanti.
Configura le notifiche. Espandi il menu Canali di notifica e seleziona i canali di notifica che hai creato nell' passaggio precedente.
Fai clic su OK.
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.
Fai clic su Avanti.
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
- Puoi ottenere questo numero eseguendo una query che aggrega i valori
_scheduler_heartbeat_count_mean
in Editor di query di Esplora metriche.
- Puoi ottenere questo numero eseguendo una query che aggrega i valori
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:
- Salva il file Terraform di esempio sul 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 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:
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.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:
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.
Nel tuo ambiente Cloud Composer, vai alla scheda Monitoraggio, apri la sezione Statistiche DAG e individua il grafico Attività zombie terminate:
Il grafico indica che Airflow ha ucciso circa 20 attività zombie appena i primi 10 minuti di esecuzione del DAG di esempio.
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:
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.
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.Alloca memoria worker aggiuntiva:
Nella scheda Configurazione dell'ambiente, individua la configurazione Risorse > Workload e fai clic su Modifica.
Nell'elemento Worker, aumenta il limite di Memoria. In questo tutorial, utilizzare 3,25 GB.
Salva le modifiche e attendi alcuni minuti per il riavvio del worker.
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:
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
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- 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
- Eliminare l'ambiente Cloud Composer. Inoltre, durante questa procedura viene eliminato il bucket dell'ambiente.
- Elimina tutti i criteri di avviso che hai creato in Cloud Monitoring.
Terraform
- 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).
- Esegui
terraform destroy
. - 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
- Ottimizzare gli ambienti
- Scala gli ambienti
- Gestisci le etichette dell'ambiente e ripartisci i costi dell'ambiente