Zustand und Leistung einer Umgebung anhand wichtiger Messwerte überwachen

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 für die im Monitoring-Dashboard bereitgestellten Messwerte Ihrer Cloud Composer-Umgebung.

In diesem Tutorial lernen Sie die wichtigsten Messwerte kennen, Hauptindikatoren für Probleme mit der Leistung und dem Zustand Ihrer Umgebung sind, sowie die Richtlinien für die Interpretation der einzelnen Messwerte in Korrekturmaßnahmen, um dass die Umwelt gesund bleibt. 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 Schritte beschrieben, die Sie ausführen müssen, bevor Sie mit der Anleitung beginnen.

Projekt erstellen und konfigurieren

Für diese Anleitung benötigen Sie eine Google Cloud Projekt erstellen. Konfigurieren Sie das Projekt so:

  1. Wählen Sie in der Google Cloud Console ein Projekt aus oder erstellen Sie eines:

    Zur Projektauswahl

  2. Die Abrechnung für Ihr Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist

  3. Der Nutzer Ihres Google Cloud-Projekts muss die folgenden Rollen haben, 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)

Die APIs für Ihr Projekt aktivieren

Enable the Cloud Composer API.

Enable the 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 in Ihrem Google Cloud-Projekt auszuführen.

Wichtige Messwerte für Zustand und Leistung der Umgebung entdecken

In dieser Anleitung geht es vorrangig um die wichtigsten Messwerte, die Ihnen einen guten Überblick des Zustands und der Leistung Ihrer Umgebung.

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:

  1. Rufen Sie in der Google Cloud Console die Seite Umgebungen auf.

    Zur Seite Umgebungen

  2. Klicken Sie in der Liste der Umgebungen auf den Namen Ihrer Umgebung. Die Seite Umgebungsdetails wird geöffnet.

  3. Rufen Sie den Tab Monitoring auf.

  4. 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 Status von Cloud Composer. zu verbessern. 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 namens airflow_monitoring aus. Wenn die Ausführung des Aktivitäts-DAG erfolgreich abgeschlossen wird, Systemstatus ist True. 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 Systemstatus False.

  5. 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 zur 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 kontaktiert die Datenbank regelmäßig und meldet den Systemstatus als True, wenn eine Verbindung hergestellt werden kann. Andernfalls wird False ausgegeben.

  6. 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 zur Arbeitsspeichernutzung der Datenbank wird die Speichernutzung durch den Cloud SQL-Datenbankinstanzen Ihrer Umgebung im Vergleich zu den Gesamtlimit für den verfügbaren Datenbankarbeitsspeicher.

  7. 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 die Status 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.

  8. Wählen Sie den Abschnitt DAG-Statistiken aus und suchen Sie nach Zombie-Aufgaben beendet. im Dashboard und beobachten Sie den Messwert Zombie Tasks killed.

    • Dieses Diagramm zeigt die Anzahl der getöteten Zombie-Aufgaben in einem Zeitfenster. 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.

  9. Wählen Sie den Abschnitt Workers (Worker) und den Abschnitt Worker-Container-Neustarts aus. im Dashboard und beachten Sie den Messwert Worker-Container-Neustarts.

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

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.

  • Umgebungsstatus (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 auf der Zeitachse der Umgebungsgesundheit stimmen in der Regel mit roten Bereichen in den anderen Statusbalken der einzelnen Umgebungskomponenten überein. Prüfen Sie andere Messwerte im Monitoring-Dashboard, um die Ursache zu ermitteln.

  • 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 in DAGs viele global definierte Airflow- oder Umgebungsvariablen verwendet werden. 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

    • Mehr als 80% der durchschnittlichen CPU- oder Arbeitsspeichernutzung innerhalb eines 12-Stunden-Fensters

    • Die Datenbank ist möglicherweise überlastet. Korrelation zwischen DAG analysieren und Spitzen bei der CPU- oder Speichernutzung für die Datenbank beschäftigt.

  • 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 auf 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 Arbeitsspeicherressourcen im Cluster Ihrer Umgebung. Nutzung von Worker-Ressourcen prüfen Grafiken erstellen und den Workern weitere Ressourcen zuweisen. Zeitlimit für Zombie-Aufgaben erhöhen damit der Planer länger wartet, bevor er eine Aufgabe als Zombie betrachtet.

  • Neustarts von Worker-Containern

    • Mehr als ein Neustart pro 24 Stunden

    • Der häufigste Grund ist ein Mangel an Arbeitsspeicher oder Speicherplatz. Sehen Sie sich Verbrauch von Worker-Ressourcen und Zuweisen von mehr Arbeitsspeicher oder Speicher für Ihre Mitarbeiter. 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:

Benachrichtigung für einen Messwert erstellen, der im Monitoring-Dashboard angezeigt wird
Abbildung 1: Benachrichtigung für einen Messwert erstellen, der auf dem Monitoring-Dashboard angezeigt wird (zum Vergrößern klicken)
  1. 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 Die Seite Benachrichtigungsrichtlinie erstellen wird geöffnet.

  2. Im Abschnitt Daten transformieren:

    1. Konfigurieren Sie den Abschnitt Innerhalb jeder Zeitachse wie in der Konfiguration der Benachrichtigungsrichtlinien für den Messwert beschrieben.

    2. Klicken Sie auf Weiter und konfigurieren Sie den Bereich Trigger für Benachrichtigungen konfigurieren. enthalten, wie in der Konfiguration der Benachrichtigungsrichtlinien für den Messwert beschrieben.

  3. Klicken Sie auf Weiter.

  4. Konfigurieren Sie die Benachrichtigungen. Maximieren Sie das Menü Benachrichtigungskanäle. und wählen Sie die Benachrichtigungskanäle aus, die Sie im vorherigen Schritt.

  5. Klicken Sie auf OK.

  6. 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 den Wert „Name der Benachrichtigungsrichtlinie“, wie in der Konfiguration der Benachrichtigungsrichtlinien für den Messwert beschrieben.

  7. Klicken Sie auf Weiter.

  8. Überprü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
    • Benachrichtigungstrigger: Bei jedem Verstoß
    • Grenzwertposition: Unter Grenzwert
    • Grenzwert: 90
    • Bedingungsname: Bedingung des Umgebungszustands
  • 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 in Ordnung
  • API: composer.googleapis.com/environment/database_health
  • 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
    • Benachrichtigungstrigger: Bei jedem Verstoß
    • Grenzwertposition: Unter Grenzwert
    • Grenzwert: 95
    • Bedingungsname: Zustand der Datenbank
  • Konfigurieren Sie Benachrichtigungen und schließen Sie die Benachrichtigung ab:

    • Geben Sie einen Namen für die Benachrichtigungsrichtlinie ein: Airflow-Datenbankstatus

Messwert zur CPU-Nutzung der Datenbank – Konfigurationen von 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: Stunde(n)
    • Funktion für rollierendes Zeitfenster: Mittelwert
  • Konfigurieren Sie den Benachrichtigungstrigger:

    • Bedingungstypen: Schwellenwert
    • Auslöser für Benachrichtigung: „Any timeseries verstößt“
    • Grenzwertposition: über Grenzwert
    • Grenzwert: 80
    • Bedingungsname: CPU-Nutzungsbedingung der Datenbank
  • Konfigurieren Sie Benachrichtigungen und schließen Sie die Benachrichtigung ab:

    • Geben Sie einen Namen für die Benachrichtigungsrichtlinie ein: CPU-Nutzung der Airflow-Datenbank

Messwert zur CPU-Nutzung der Datenbank – Konfigurationen von 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: Stunde(n)
    • Funktion für rollierendes Zeitfenster: Mittelwert
  • Konfigurieren Sie den Benachrichtigungstrigger:

    • Bedingungstypen: Schwellenwert
    • Auslöser für Benachrichtigung: „Any timeseries verstößt“
    • Grenzwertposition: über Grenzwert
    • Grenzwert: 80
    • Bedingungsname: Bedingung für die Arbeitsspeichernutzung der Datenbank
  • Konfigurieren Sie Benachrichtigungen und schließen Sie die Benachrichtigung ab:

    • Geben Sie einen Namen für die Benachrichtigungsrichtlinie ein: Airflow-Datenbankspeichernutzung

Messwert für Planer-Heartbeats – 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 Zeitfenster: Benutzerdefiniert
    • Benutzerdefinierter Wert: 4
    • Benutzerdefinierte Einheiten: Stunde(n)
    • Funktion für rollierendes Fenster: Anzahl
  • Konfigurieren Sie den Benachrichtigungstrigger:

    • Bedingungstypen: Schwellenwert
    • Benachrichtigungstrigger: Bei jedem Verstoß
    • Grenzwertposition: unter Grenzwert
    • Grenzwert: 216

      1. Sie können diese Zahl ermitteln, indem Sie eine Abfrage ausführen, die Werte aggregiert _scheduler_heartbeat_count_mean in der Metrics Explorer-Abfrageeditor:
    • Bedingungsname: Planer-Heartbeat-Bedingung

  • Konfigurieren Sie Benachrichtigungen und schließen Sie die Benachrichtigung ab:

    • Benennen Sie die Benachrichtigungsrichtlinie: Airflow Scheduler Heartbeat

Messwert für beendete Zombie-Aufgaben – 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
    • Auslöser für Benachrichtigung: „Any timeseries verstößt“
    • Grenzwertposition: Über dem Grenzwert
    • Grenzwert: 1
    • Bedingungsname: Zombie-Aufgabenbedingung
  • Konfigurieren Sie Benachrichtigungen und schließen Sie die Benachrichtigung ab:

    • Geben Sie einen Namen für die Benachrichtigungsrichtlinie ein: „Airflow-Zombie-Aufgaben“

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
    • Auslöser für Benachrichtigung: „Any timeseries verstößt“
    • Grenzwertposition: Über dem Grenzwert
    • Grenzwert: 1
    • Bedingungsname: Zombie-Aufgabenbedingung
  • Konfigurieren Sie Benachrichtigungen und schließen Sie die Benachrichtigung ab:

    • Geben Sie einen Namen für die Benachrichtigungsrichtlinie ein: „Airflow-Zombie-Aufgaben“

Terraform

Führen Sie ein Terraform-Script aus, mit dem ein E-Mail-Benachrichtigungskanal erstellt und Benachrichtigungsrichtlinien für die in diesem Tutorial bereitgestellten wichtigen Messwerte basierend auf ihren jeweiligen Benchmarks hochgeladen werden:

  1. Speichern Sie die Beispiel-Terraform-Datei auf Ihrem lokalen Computer.
  2. Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID Ihres Projekts. Beispiel: example-project
    • EMAIL_ADDRESS: die E-Mail-Adresse, an die eine Benachrichtigung gesendet werden soll, wenn eine Benachrichtigung ausgelöst wird.
    • 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:

  1. Prüfen Sie Ihren E-Mail-Posteingang, ob Sie eine Benachrichtigung von Google Cloud Alerting mit dem Betreff erhalten haben, der mit [ALERT] beginnt. Der Inhalt dieser Nachricht enthält die Details zum Vorfall in der Benachrichtigungsrichtlinie.

  2. Klicken Sie in der E-Mail-Benachrichtigung auf die Schaltfläche Vorfall ansehen. Sie sind werden zum Metrics Explorer weitergeleitet. Prüfen Sie die Details des Benachrichtigungsfalls:

    <ph type="x-smartling-placeholder"></ph> Details zum Benachrichtigungsvorfall
    Abbildung 2: Details zum Benachrichtigungsvorfall (zum Vergrößern klicken)

    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 .

  3. 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:

    Grafik zu Zombie-Aufgaben
    Abbildung 3. Grafik zu Zombie-Aufgaben (zum Vergrößern klicken)

    Das Diagramm zeigt, dass Airflow etwa 20 Zombie-Aufgaben in nur ersten 10 Minuten der Ausführung des Beispiel-DAG.

  4. Laut den Benchmarks und Korrekturmaßnahmen ist der häufigste Grund für Zombie-Aufgaben ist der Mangel an Worker-Arbeitsspeicher oder CPU-Kapazität. Ermitteln Sie die Grundursache von Zombie-Aufgaben, indem Sie die Ressourcennutzung Ihrer Worker analysieren.

    Öffnen Sie in Ihrem Monitoring-Dashboard den Abschnitt „Worker“ und prüfen Sie den Worker Messwerte zur CPU- und Arbeitsspeichernutzung:

    Worker-Messwerte zur CPU- und Arbeitsspeichernutzung
    Abbildung 4: Messwerte zur CPU- und Speichernutzung von Workern (zum Vergrößern klicken)

    Das Diagramm „CPU-Auslastung der Worker insgesamt“ zeigt, dass die CPU-Auslastung der Worker zu keinem Zeitpunkt über 50 % des insgesamt verfügbaren Limits lag. Die verfügbare CPU ist also ausreichend. Das Diagramm „Gesamte Arbeitsspeichernutzung der Worker“ zeigt, dass durch die Ausführung des Beispiel-DAG das Limit für den zuweisbaren Arbeitsspeicher erreicht wurde, was fast 75 % des im Diagramm angezeigten Gesamtarbeitsspeicherlimits entspricht. GKE reserviert 25 % der ersten 4 GiB Arbeitsspeicher und zusätzlich 100 MiB Arbeitsspeicher auf jedem Knoten, um die Pod-Bereinigung zu verarbeiten.

    Sie können daraus schließen, dass den Workern nicht genügend Arbeitsspeicherressourcen zum Ausführen der Beispiel-DAG erfolgreich.

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.

  1. Ö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.

  2. Weisen Sie zusätzlichen Worker-Speicher zu:

    1. Klicken Sie auf dem Tab „Umgebungskonfiguration“ unter Ressourcen > Arbeitslasten auf Bearbeiten.

    2. Erhöhen Sie unter Worker das Limit für Arbeitsspeicher. In dieser Anleitung verwenden Sie 3,25 GB.

    3. Speichern Sie die Änderungen und warten Sie einige Minuten, bis der Worker neu gestartet wurde.

  3. Öffnen Sie den Tab „DAGs“ und klicken Sie auf den Namen des Beispiel-DAG. (memory_consumption_dag) und klicken Sie auf Pausieren des DAG aufheben.

Rufen Sie Monitoring auf und prüfen Sie, ob nach dem Aktualisieren der Limits für Worker-Ressourcen keine neuen Zombie-Aufgaben mehr angezeigt werden:

<ph type="x-smartling-placeholder"></ph> Grafik zu Zombie-Aufgaben nach Änderung des Arbeitsspeicherlimits
Abbildung 5: Grafik zu Zombie-Aufgaben nach Änderung des Arbeitsspeicherlimits (zum Vergrößern klicken)

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, mithilfe von Benachrichtigungen und Monitoring-Diagrammen die Ursache für Probleme mit dem Umgebungsstatus ermittelt und Ihre Umgebung optimiert, indem Sie Ihren Workern mehr Arbeitsspeicher zugewiesen haben. Es wird jedoch empfohlen, Ihre DAGs zu optimieren, um den Ressourcenverbrauch der Worker von vornherein zu reduzieren, da die Ressourcen nicht über einen bestimmten Grenzwert hinaus erhöht werden können.

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, können Sie entweder das Projekt löschen, das die Ressourcen enthält, oder das Projekt beibehalten und die einzelnen Ressourcen löschen.

Projekt löschen

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

    Go to Manage resources

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

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

  1. Löschen Sie die Cloud Composer-Umgebung. Außerdem löschen Sie den Bucket der Umgebung.
  2. Alle Benachrichtigungsrichtlinien löschen die Sie in Cloud Monitoring erstellt haben.

Terraform

  1. 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.
  2. Führen Sie terraform destroy aus.
  3. Löschen Sie den Bucket der Umgebung manuell. Cloud Composer löscht sie nicht automatisch. Sie können dies über die Google Cloud Console oder die Google Cloud CLI tun.

Nächste Schritte