Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
Auf dieser Seite wird beschrieben, wie Sie Cloud Composer insgesamt überwachen. Status und Leistung der Umgebung mit wichtigen Messwerten im Monitoring-Dashboard.
Einleitung
In dieser Anleitung geht es um die wichtigsten Monitoring-Messwerte für Cloud Composer. die einen guten Überblick über den Zustand und die Leistung der Umgebung geben.
Cloud Composer bietet mehrere Messwerte, die den Gesamtstatus der Umgebung beschreiben. Die Monitoring-Richtlinien in dieser Anleitung basieren auf den Messwerten, die im Monitoring-Dashboard Ihrer Cloud Composer-Umgebung angezeigt werden.
In dieser Anleitung erfahren Sie mehr über die wichtigsten Messwerte, die als Hauptindikatoren für Probleme mit der Leistung und dem Zustand Ihrer Umgebung dienen. Außerdem erhalten Sie Richtlinien für die Interpretation der einzelnen Messwerte in Korrekturmaßnahmen, um den Zustand der Umgebung zu erhalten. Außerdem richten Sie Benachrichtigungsregeln für die einzelnen den Beispiel-DAG ausführen und mit diesen Messwerten und Benachrichtigungen den und die Leistung Ihrer Umgebung.
Lernziele
Kosten
In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:
Nach Abschluss dieser Anleitung können Sie weitere Kosten durch Löschen von erstellten Ressourcen vermeiden. Weitere Informationen finden Sie unter Bereinigen.
Hinweise
In diesem Abschnitt werden die Aktionen beschrieben, die vor dem Start der Anleitung erforderlich sind.
Projekt erstellen und konfigurieren
Für diese Anleitung benötigen Sie ein Google Cloud-Projekt. Konfigurieren Sie das Projekt so:
Wählen Sie in der Google Cloud Console ein Projekt aus oder erstellen Sie ein Projekt.
Die Abrechnung für Ihr Projekt muss aktiviert sein. Hier erfahren Sie, wie Sie prüfen, ob die Abrechnung für ein Projekt aktiviert ist.
Sorgen Sie dafür, dass Ihr Google Cloud-Projektnutzer die folgenden Rollen hat, um die erforderlichen Ressourcen zu erstellen:
- Administrator für Umgebung und Storage-Objekte
(
roles/composer.environmentAndStorageObjectAdmin
) - Compute-Administrator (
roles/compute.admin
) - Monitoring-Bearbeiter (
roles/monitoring.editor
)
- Administrator für Umgebung und Storage-Objekte
(
Die APIs für Ihr Projekt aktivieren
Enable the Cloud Composer API.
Cloud Composer-Umgebung erstellen
Erstellen Sie eine Cloud Composer 2-Umgebung.
Im Rahmen dieses Verfahrens
Sie gewähren die Dienst-Agent-Erweiterung für die Cloud Composer v2 API.
Rolle (roles/composer.ServiceAgentV2Ext
) für den Composer-Dienst-Agent
Konto. Cloud Composer verwendet dieses Konto, um Vorgänge auszuführen
in Ihrem Google Cloud-Projekt.
Wichtige Messwerte für den Zustand und die Leistung auf Umgebungsebene
In diesem Tutorial liegt der Schwerpunkt auf den wichtigsten Messwerten, die Ihnen einen guten Überblick über den allgemeinen Zustand und die Leistung Ihrer Umgebung geben können.
Das Monitoring-Dashboard in Die Google Cloud Console enthält eine Vielzahl von Messwerten und Diagrammen, mit denen Sie Trends in Ihrer Umgebung überwachen und Probleme mit Airflow identifizieren und Cloud Composer-Ressourcen.
Jede Cloud Composer-Umgebung hat ein eigenes Monitoring Dashboard.
Machen Sie sich mit den folgenden wichtigen Messwerten vertraut und suchen Sie sie im Monitoring-Dashboard:
Rufen Sie in der Google Cloud Console die Seite Umgebungen auf.
Klicken Sie in der Liste der Umgebungen auf den Namen Ihrer Umgebung. Die Seite Umgebungsdetails wird geöffnet.
Rufen Sie den Tab Monitoring auf.
Wählen Sie den Bereich Übersicht aus, suchen Sie auf dem Dashboard nach dem Element Umgebungsübersicht und sehen Sie sich den Messwert Umgebungszustand (Airflow-Monitoring-DAG) an.
Diese Zeitachse zeigt den Zustand der Cloud Composer-Umgebung. Die grüne Farbe des Balkens für den Zustand der Umgebung gibt an, dass die Umgebung fehlerfrei ist. Ein roter Balken bedeutet, dass die Umgebung nicht fehlerfrei ist.
Alle paar Minuten führt Cloud Composer einen Aktivitäts-DAG mit dem Namen
airflow_monitoring
Wenn die Ausführung des DAG für die Dienstbereitschaft erfolgreich abgeschlossen wurde, lautet der SystemstatusTrue
. Wenn der DAG-Lauf für die Aktivität fehlschlägt (z. B. aufgrund der Entfernung eines Pods, der Beendigung eines externen Prozesses oder Wartungsarbeiten), lautet der SystemstatusFalse
.
Wählen Sie den Bereich SQL-Datenbank aus, suchen Sie auf dem Dashboard nach dem Element Datenbankstatus und beobachten Sie den Messwert Datenbankstatus.
Diese Zeitachse zeigt den Status der Verbindung zum Cloud SQL-Instanz Ihrer Umgebung. Die grüne Datenbank Statusleiste zeigt an, dass eine Verbindung besteht, während Verbindungsfehler in Rot dargestellt.
Der Airflow-Monitoring-Pod pingt die Datenbank regelmäßig an und meldet Status als
True
, wenn eine Verbindung hergestellt werden kann, oder alsFalse
, wenn nicht.
Beobachten Sie im Element Datenbankzustand die CPU-Nutzung der Datenbank und Messwerte zur Arbeitsspeichernutzung der Datenbank.
Im Diagramm „CPU-Nutzung der Datenbank“ sehen Sie die Nutzung der CPU-Kerne durch die Cloud SQL-Datenbankinstanzen Ihrer Umgebung im Vergleich zum gesamten verfügbaren CPU-Limit der Datenbank.
Im Diagramm „Nutzung des Datenbankspeichers“ sehen Sie die Speichernutzung durch die Cloud SQL-Datenbankinstanzen Ihrer Umgebung im Vergleich zum Gesamtlimit des verfügbaren Datenbankspeichers.
Wählen Sie den Bereich Planer aus, suchen Sie auf dem Dashboard nach dem Element Scheduler-Herzschlag und beobachten Sie den Messwert Scheduler-Herzschlag.
Diese Zeitachse zeigt den Zustand des Airflow-Planers. Suchen Sie nach roten Bereichen, um Probleme mit Airflow-Planern zu identifizieren. Wenn Ihre Umgebung mehr als einen Scheduler hat, ist der Herzschlagstatus in Ordnung, solange mindestens einer der Scheduler antwortet.
Der Scheduler gilt als nicht betriebsbereit, wenn der letzte Heartbeat vor mehr als 30 Sekunden (Standardwert) vor der aktuellen Zeit empfangen wurde.
Wählen Sie den Bereich DAG-Statistiken aus, suchen Sie auf dem Dashboard nach dem Element Zombie-Aufgaben gelöscht und beobachten Sie den Messwert Zombie-Aufgaben gelöscht.
In diesem Diagramm sehen Sie die Anzahl der Zombie-Aufgaben, die in einem kleinen Zeitfenster beendet wurden. Zombie-Aufgaben werden häufig durch die externe Beendigung von Airflow-Prozessen verursacht, z. B. wenn der Prozess einer Aufgabe beendet wird.
Der Airflow-Planer bricht Zombie-Aufgaben regelmäßig ab, was sich darauf in diesem Diagramm.
Wählen Sie den Bereich Worker aus, suchen Sie im Dashboard nach dem Element Neustarts von Worker-Containern und beobachten Sie den Messwert Neustarts von Worker-Containern.
- Ein Diagramm zeigt die Gesamtzahl der Neustarts für einzelne Worker-Container. Zu viele Containerneustarts können die Verfügbarkeit von Ihrem Dienst oder anderen nachgelagerten Diensten, die ihn als Abhängigkeit verwenden.
Benchmarks und mögliche Korrekturmaßnahmen für wichtige Messwerte
In der folgenden Liste werden Benchmarkwerte beschrieben, die auf Probleme und finden Sie Korrekturmaßnahmen, die Sie ergreifen können, um diese Probleme zu beheben.
Umgebungszustand (Airflow-Monitoring-DAG)
Eine Erfolgsquote von weniger als 90 % über einen Zeitraum von 4 Stunden
Fehler können Pod-Bereinigungen oder Beendigungen von Workern bedeuten, da überlastet ist oder nicht richtig funktioniert. Rote Bereiche in der Umwelt Die Zeitachse korreliert normalerweise mit den roten Bereichen in den anderen Gesundheitsbalken der einzelnen Umgebungskomponenten. Die Grundursache identifizieren, indem andere Messwerte im Monitoring-Dashboard prüfen.
Datenbankstatus
Eine Erfolgsquote von weniger als 95% über einen Zeitraum von 4 Stunden
Fehler bedeuten, dass es Probleme mit der Verbindung zur Airflow-Datenbank gibt. Dies kann auf einen Datenbankabsturz oder eine Ausfallzeit zurückzuführen sein, weil die Datenbank überlastet ist (z. B. aufgrund einer hohen CPU- oder Arbeitsspeichernutzung oder einer höheren Latenz beim Herstellen einer Verbindung zur Datenbank). Diese Symptome werden am häufigsten durch suboptimale DAGs verursacht, z. B. wenn DAGs die Verwendung von viele global definierte Airflow- oder Umgebungsvariablen. Sehen Sie sich die Messwerte zur Ressourcennutzung der SQL-Datenbank an, um die Ursache zu ermitteln. Sie können auch die Planerlogs auf Fehler im Zusammenhang mit der Datenbankverbindung prüfen.
CPU- und Arbeitsspeichernutzung der Datenbank
Eine durchschnittliche CPU- oder Arbeitsspeicherauslastung von über 80 % innerhalb eines 12-stündigen Zeitraums
Die Datenbank ist möglicherweise überlastet. Analysieren Sie die Korrelation zwischen Ihren DAG-Ausführungen und Spitzen bei der CPU- oder Arbeitsspeichernutzung der Datenbank.
Sie können die Datenbanklast durch effizientere DAGs mit optimierten laufenden Abfragen und Verbindungen oder durch Verteilen der gleichmäßiger geladen werden.
Alternativ können Sie der Datenbank mehr CPU oder Arbeitsspeicher zuweisen. Datenbankressourcen werden über das Attribut für die Umgebungsgröße von und die Umgebung muss auf eine größere Größe skaliert werden.
Planer-Heartbeat
Eine Erfolgsquote von weniger als 90 % über einen Zeitraum von 4 Stunden
Weisen Sie dem Planer mehr Ressourcen zu oder erhöhen Sie die Anzahl der Planer von 1 bis 2 (empfohlen).
Zombie-Aufgaben gelöscht
Mehr als eine Zombie-Aufgabe pro 24 Stunden
Der häufigste Grund für Zombie-Aufgaben ist ein Mangel an CPU oder Arbeitsspeicher Ressourcen im Cluster Ihrer Umgebung. Sehen Sie sich die Grafiken zur Ressourcennutzung der Worker an und weisen Sie Ihren Workern mehr Ressourcen zu oder erhöhen Sie das Zeitlimit für Zombie-Aufgaben, damit der Scheduler länger wartet, bevor eine Aufgabe als Zombie betrachtet wird.
Neustarts von Worker-Containern
Mehr als ein Neustart pro 24 Stunden
Der häufigste Grund ist ein Mangel an Arbeitsspeicher oder Speicherplatz. Prüfen Sie den Ressourcenverbrauch der Worker und weisen Sie ihnen mehr Arbeitsspeicher oder Speicherplatz zu. Wenn der Mangel an Ressourcen nicht der Grund ist, lesen Sie den Hilfeartikel Fehlerbehebung bei Neustarts von Workern und verwenden Sie Logging-Abfragen, um die Gründe für die Neustarts zu ermitteln.
Benachrichtigungskanäle erstellen
Folgen Sie der Anleitung unter Benachrichtigungskanal erstellen, um einen E-Mail-Benachrichtigungskanal zu erstellen.
Weitere Informationen zu Benachrichtigungskanälen finden Sie unter Benachrichtigungskanäle verwalten
Benachrichtigungsrichtlinien erstellen
Erstellen Sie Benachrichtigungsrichtlinien basierend auf den Benchmarks in den vorherigen Abschnitten dieses Leitfadens, um die Werte von Messwerten kontinuierlich zu beobachten und Benachrichtigungen zu erhalten, wenn diese gegen eine Bedingung verstoßen.
Console
Sie können Benachrichtigungen für jeden Messwert im Monitoring-Dashboard einrichten, indem Sie auf das Glockensymbol in der Ecke des entsprechenden Elements klicken:
Suchen Sie im Monitoring-Dashboard nach den Messwerten, die Sie beobachten möchten, und klicken Sie in der Ecke des Messwertelements auf das Glockensymbol. Die Seite Benachrichtigungsrichtlinie erstellen wird geöffnet.
Im Abschnitt Daten transformieren:
Konfigurieren Sie den Abschnitt Innerhalb jeder Zeitachse wie in der Konfiguration der Benachrichtigungsrichtlinien für den Messwert beschrieben.
Klicken Sie auf Weiter und konfigurieren Sie den Bereich Benachrichtigungstrigger konfigurieren wie in der Konfiguration der Benachrichtigungsrichtlinien für den Messwert beschrieben.
Klicken Sie auf Weiter.
Konfigurieren Sie die Benachrichtigungen. Maximieren Sie das Menü Benachrichtigungskanäle. und wählen Sie die Benachrichtigungskanäle aus, die Sie im vorherigen Schritt.
Klicken Sie auf OK.
Geben Sie im Abschnitt Benachrichtigungsrichtlinie benennen das Feld Name der Benachrichtigungsrichtlinie ein. ein. Verwenden Sie für jeden Messwert einen aussagekräftigen Namen. Verwenden Sie die Schaltfläche Benachrichtigungsrichtlinie“ Wert entsprechend der Beschreibung in der Konfiguration der Benachrichtigungsrichtlinien für den Messwert aus.
Klicken Sie auf Weiter.
Prüfen Sie die Benachrichtigungsrichtlinie und klicken Sie auf Richtlinie erstellen.
Messwert „Umgebungszustand“ (Airflow-Monitoring-DAG) – Konfigurationen für Benachrichtigungsrichtlinien
- Messwertname: Cloud Composer-Umgebung – fehlerfrei
- API: composer.googleapis.com/environment/healthy
Filter:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
„Daten transformieren“ > „Innerhalb jeder Zeitreihe“:
- Rollierendes Fenster: Benutzerdefiniert
- Benutzerdefinierter Wert: 4
- Benutzerdefinierte Einheiten: Stunde(n)
- Funktion für rollierendes Zeitfenster: Anteil „true“
Benachrichtigungstrigger konfigurieren:
- Bedingungstypen: Schwellenwert
- Auslöser für Benachrichtigung: „Any timeseries verstößt“
- Grenzwertposition: unter Grenzwert
- Grenzwert: 90
- Bedingungsname: Umgebungsstatus
Konfigurieren Sie Benachrichtigungen und schließen Sie die Benachrichtigung ab:
- Geben Sie einen Namen für die Benachrichtigungsrichtlinie ein: Airflow-Umgebungszustand
Messwert für den Datenbankstatus – Konfigurationen von Benachrichtigungsrichtlinien
- Messwertname: Cloud Composer-Umgebung – Datenbank fehlerfrei
- API: composer.googleapis.com/environment/database_health
Filter:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Daten transformieren > Innerhalb jeder Zeitreihe:
- Rollierendes Zeitfenster: Benutzerdefiniert
- Benutzerdefinierter Wert: 4
- Benutzerdefinierte Einheiten: Stunde(n)
- Funktion für rollierendes Zeitfenster: Anteil „true“
Benachrichtigungstrigger konfigurieren:
- Bedingungstypen: Schwellenwert
- Auslöser für Benachrichtigung: „Any timeseries verstößt“
- Grenzwertposition: Unter Grenzwert
- Grenzwert: 95
- Bedingungsname: Datenbankstatus
Konfigurieren Sie Benachrichtigungen und schließen Sie die Benachrichtigung ab:
- Geben Sie einen Namen für die Benachrichtigungsrichtlinie ein: Airflow-Datenbankstatus
Messwert „CPU-Nutzung der Datenbank“ – Konfigurationen für Benachrichtigungsrichtlinien
- Messwertname: Cloud Composer-Umgebung – CPU-Auslastung der Datenbank
- API: composer.googleapis.com/environment/database/cpu/utilization
Filter:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
„Daten transformieren“ > „Innerhalb jeder Zeitreihe“:
- Rollierendes Zeitfenster: Benutzerdefiniert
- Benutzerdefinierter Wert: 12
- Benutzerdefinierte Einheiten: Stunden
- Funktion für rollierendes Fenster: Mittelwert
Benachrichtigungstrigger konfigurieren:
- Bedingungstypen: Schwellenwert
- Benachrichtigungstrigger: Bei jedem Verstoß
- Grenzwertposition: über Grenzwert
- Grenzwert: 80
- Bedingungsname: CPU-Nutzungsbedingung der Datenbank
Konfigurieren Sie Benachrichtigungen und schließen Sie die Benachrichtigung ab:
- Benennen Sie die Benachrichtigungsrichtlinie: CPU-Nutzung der Airflow-Datenbank
Messwert „CPU-Nutzung der Datenbank“ – Konfigurationen für Benachrichtigungsrichtlinien
- Messwertname: Cloud Composer-Umgebung – Datenbankspeicherauslastung
- API: composer.googleapis.com/environment/database/memory/utilization
Filter:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
„Daten transformieren“ > „Innerhalb jeder Zeitreihe“:
- Rollierendes Fenster: Benutzerdefiniert
- Benutzerdefinierter Wert: 12
- Benutzerdefinierte Einheiten: Stunden
- Funktion für rollierendes Fenster: Mittelwert
Benachrichtigungstrigger konfigurieren:
- Bedingungstypen: Schwellenwert
- Benachrichtigungstrigger: Bei jedem Verstoß
- Grenzwertposition: über Grenzwert
- Grenzwert: 80
- Bedingungsname: Bedingung für die Arbeitsspeichernutzung der Datenbank
Konfigurieren Sie Benachrichtigungen und schließen Sie die Benachrichtigung ab:
- Benennen Sie die Benachrichtigungsrichtlinie: Arbeitsspeichernutzung der Airflow-Datenbank
Messwert „Planer-Heartbeat“ – Konfigurationen von Benachrichtigungsrichtlinien
- Messwertname: Cloud Composer-Umgebung – Scheduler-Herzschläge
- API: composer.googleapis.com/environment/scheduler_heartbeat_count
Filter:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Daten transformieren > Innerhalb jeder Zeitreihe:
- Rollierendes Fenster: Benutzerdefiniert
- Benutzerdefinierter Wert: 4
- Benutzerdefinierte Einheiten: Stunde(n)
- Funktion für rollierendes Zeitfenster: Anzahl
Benachrichtigungstrigger konfigurieren:
- Bedingungstypen: Schwellenwert
- Auslöser für Benachrichtigung: „Any timeseries verstößt“
- Grenzwertposition: unter Grenzwert
Grenzwert: 216
- Sie können diese Zahl ermitteln, indem Sie im Abfrageeditor des Metrics Explorers eine Abfrage ausführen, die den Wert
_scheduler_heartbeat_count_mean
aggregiert.
- Sie können diese Zahl ermitteln, indem Sie im Abfrageeditor des Metrics Explorers eine Abfrage ausführen, die den Wert
Bedingungsname: Scheduler-Heartbeat-Bedingung
Konfigurieren Sie Benachrichtigungen und schließen Sie die Benachrichtigung ab:
- Benennen Sie die Benachrichtigungsrichtlinie: Airflow Scheduler Heartbeat
Messwert „Zombie-Aufgaben gelöscht“ – Konfigurationen von Benachrichtigungsrichtlinien
- Messwertname: Cloud Composer-Umgebung – Beendete Zombie-Aufgaben
- API: composer.googleapis.com/environment/zombie_task_killed_count
Filter:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
„Daten transformieren“ > „Innerhalb jeder Zeitreihe“:
- Rollierendes Zeitfenster: 1 Tag
- Funktion für rollierendes Zeitfenster: Summe
Benachrichtigungstrigger konfigurieren:
- Bedingungstypen: Schwellenwert
- Benachrichtigungstrigger: Bei jedem Verstoß
- Grenzwertposition: Über dem Grenzwert
- Grenzwert: 1
- Bedingungsname: Zombie-Aufgabenbedingung
Konfigurieren Sie Benachrichtigungen und schließen Sie die Benachrichtigung ab:
- Benennen Sie die Benachrichtigungsrichtlinie: Airflow-Zombie-Tasks
Messwert für Worker-Containerneustarts – Konfigurationen von Benachrichtigungsrichtlinien
- Messwertname: Cloud Composer-Umgebung – Beendete Zombie-Aufgaben
- API: composer.googleapis.com/environment/zombie_task_killed_count
Filter:
environment_name = [ENVIRONMENT_NAME] location = [CLUSTER_LOCATION]
Daten transformieren > Innerhalb jeder Zeitreihe:
- Rollierendes Zeitfenster: 1 Tag
- Funktion für rollierendes Zeitfenster: Summe
Benachrichtigungstrigger konfigurieren:
- Bedingungstypen: Schwellenwert
- Benachrichtigungstrigger: Bei jedem Verstoß
- Grenzwertposition: Über dem Grenzwert
- Grenzwert: 1
- Bedingungsname: Zombie-Aufgabenbedingung
Konfigurieren Sie Benachrichtigungen und schließen Sie die Benachrichtigung ab:
- Benennen Sie die Benachrichtigungsrichtlinie: Airflow-Zombie-Tasks
Terraform
Terraform-Skript ausführen, das einen E-Mail-Benachrichtigungskanal erstellt und Uploads erstellt für die wichtigsten Messwerte, die in dieser Anleitung bereitgestellt werden, basierend auf ihre jeweiligen Benchmarks:
- Speichern Sie die Beispiel-Terraform-Datei auf Ihrem lokalen Computer.
Ersetzen Sie Folgendes:
PROJECT_ID
: die Projekt-ID Ihres Projekts. Beispiel:example-project
EMAIL_ADDRESS
: die E-Mail-Adresse, die benachrichtigt werden muss, wenn ein Benachrichtigung ausgelöst.ENVIRONMENT_NAME
: Der Name Ihrer Cloud Composer-Umgebung. Beispiel:example-composer-environment
.CLUSTER_NAME
: Der Name des Clusters Ihrer Umgebung. Sie finden ihn in der Google Cloud Console unter „Umgebungskonfiguration“ > „Ressourcen“ > „GKE-Cluster“.
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"
}
}
}
}
Benachrichtigungsrichtlinien testen
In diesem Abschnitt wird beschrieben, wie Sie die erstellten Benachrichtigungsrichtlinien testen und interpretieren Ergebnisse.
Beispiel-DAG hochladen
Der in dieser Anleitung bereitgestellte Beispiel-DAG memory_consumption_dag.py
ahmt eine intensive Arbeitsspeichernutzung durch Worker nach. Der DAG enthält vier Aufgaben, von denen jede Daten in einen Beispielstring schreibt und 380 MB Arbeitsspeicher belegt. Der Beispiel-DAG ist alle zwei Minuten geplant und wird automatisch ausgeführt, sobald Sie ihn in Ihre Composer-Umgebung hochgeladen haben.
Laden Sie den folgenden Beispiel-DAG in die Umgebung hoch, die Sie in den vorherigen Schritten erstellt haben:
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,
)
Benachrichtigungen und Messwerte in Monitoring auswerten
Warten Sie etwa 10 Minuten, nachdem der Beispiel-DAG gestartet wurde, und bewerten Sie die Testergebnisse:
Sehen Sie in Ihrem E-Mail-Postfach nach, ob Sie eine Benachrichtigung von Google Cloud-Benachrichtigungen mit einer Betreffzeile, die mit
[ALERT]
beginnt. Der Inhalt dieser Nachricht enthält die Details zum Richtlinienverstoß.Klicken Sie in der E-Mail-Benachrichtigung auf die Schaltfläche Vorfall ansehen. Sie sind werden zum Metrics Explorer weitergeleitet. Überprüfen Sie die Details der Benachrichtigung Vorfall:
Im Diagramm mit den Vorfallsmesswerten ist zu sehen, dass die von Ihnen erstellten Messwerte die der Schwellenwert 1, d. h. Airflow hat mehr als 1 Zombie erkannt und getötet .
Wechseln Sie in der Cloud Composer-Umgebung zum Tab Monitoring. Öffnen Sie den Bereich DAG-Statistiken und suchen Sie nach den abgelegten Zombie-Aufgaben. Grafik:
Die Grafik zeigt, dass Airflow innerhalb der ersten 10 Minuten nach Ausführung des Beispiel-DAGs etwa 20 Zombie-Aufgaben beendet hat.
Laut den Benchmarks und Korrekturmaßnahmen ist der häufigste Grund für Zombie-Aufgaben ein Mangel an Arbeitsspeicher oder CPU. Ermitteln Sie die Grundursache von Zombie-Aufgaben, indem Sie die Ressourcennutzung Ihrer Worker analysieren.
Öffnen Sie im Monitoring-Dashboard den Bereich „Worker“ und sehen Sie sich die Messwerte zur CPU- und Arbeitsspeichernutzung der Worker an:
Die Grafik zur CPU-Nutzung der Worker insgesamt zeigt an, dass die CPU-Nutzung der Worker unter 50% des gesamten verfügbaren Limits liegen, sodass die ist ausreichend. Das Diagramm „Gesamte Arbeitsspeichernutzung der Worker“ zeigt, dass die Ausführung der Beispiel-DAG führte dazu, dass das Limit für den zuweisbaren Arbeitsspeicher erreicht wurde, 75% des gesamten Arbeitsspeicherlimits, das in der Grafik dargestellt wird, (GKE reserviert 25% der ersten 4 GiB Arbeitsspeicher und zusätzliche 100 MiB Arbeitsspeicher auf jedem Knoten für die Pod-Bereinigung).
Sie können daraus schließen, dass den Workern die Arbeitsspeicherressourcen fehlen, um den Beispiel-DAG erfolgreich auszuführen.
Umgebung optimieren und Leistung bewerten
Basierend auf der Analyse der Ressourcennutzung durch Worker müssen Sie Ihren Workern mehr Arbeitsspeicher zuweisen, damit alle Aufgaben in Ihrem DAG erfolgreich ausgeführt werden.
Öffnen Sie in Ihrer Composer-Umgebung den Tab DAGs, klicken Sie auf den Namen des Beispiel-DAG (
memory_consumption_dag
) und dann auf DAG pausieren.Weisen Sie zusätzlichen Worker-Speicher zu:
Suchen Sie im Tab „Umgebungskonfiguration“ nach Ressourcen. > Konfiguration der Arbeitslasten und klicken Sie auf Bearbeiten.
Erhöhen Sie unter Worker das Limit für Arbeitsspeicher. In dieser Anleitung 3,25 GB Speicherplatz belegt.
Speichern Sie die Änderungen und warten Sie einige Minuten, bis der Worker neu gestartet wurde.
Öffnen Sie den Tab „DAGs“, klicken Sie auf den Namen des Beispiel-DAG (
memory_consumption_dag
) und dann auf DAG fortsetzen.
Gehen Sie zu Monitoring und prüfen Sie, ob nach dem Start keine neuen Zombie-Aufgaben mehr angezeigt wurden. hat Ihre Worker-Ressourcenlimits aktualisiert:
Fazit
In dieser Anleitung haben Sie die wichtigsten Funktionen wie Sie Benachrichtigungsrichtlinien für die einzelnen Messwerte einrichten um jeden Messwert als Korrekturmaßnahmen zu interpretieren. Anschließend haben Sie einen Beispiel-DAG ausgeführt, die Ursache von Problemen zum Zustand der Umgebung mithilfe von Warnmeldungen erkannt und Monitoring-Diagrammen erstellen und Ihre Umgebung durch Zuweisen von mehr Arbeitsspeicher für Ihre Mitarbeiter. Es wird jedoch empfohlen, DAGs optimieren den Ressourcenverbrauch der Worker zu reduzieren, um die Ressourcen über einen bestimmten Schwellenwert hinaus zu erhöhen.
Bereinigen
Um zu vermeiden, dass Ihrem Google Cloud-Konto die Ressourcen in Rechnung gestellt werden Löschen Sie entweder das Projekt, das die Ressourcen enthält, oder das Projekt behalten und die einzelnen Ressourcen löschen.
Projekt löschen
- 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.
Einzelne Ressourcen löschen
Wenn Sie mehrere Anleitungen und Kurzanleitungen durcharbeiten möchten, können Sie die Überschreitung von Projektkontingenten verhindern, indem Sie Projekte wiederverwenden.
Console
- Löschen Sie die Cloud Composer-Umgebung. Außerdem wird dabei der Bucket der Umgebung gelöscht.
- Alle Benachrichtigungsrichtlinien löschen die Sie in Cloud Monitoring erstellt haben.
Terraform
- Achten Sie darauf, dass Ihr Terraform-Script keine Einträge für Ressourcen enthält, die für Ihr Projekt noch erforderlich sind. Beispielsweise können Sie einige APIs aktiviert und IAM-Berechtigungen weiterhin zuweisen lassen, wenn Sie Ihrem Terraform-Script entsprechende Definitionen hinzugefügt haben.
- Führen Sie
terraform destroy
aus. - Löschen Sie den Bucket der Umgebung manuell. Cloud Composer löscht sie nicht automatisch. Sie können es von mit der Google Cloud Console oder der Google Cloud CLI.
Nächste Schritte
- Umgebungen optimieren
- Umgebungen skalieren
- Umgebungslabels verwalten und Umgebungskosten aufschlüsseln