Probleme mit DAG-Prozessoren beheben

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

Auf dieser Seite werden nur Probleme im Zusammenhang mit der DAG-Dateiverarbeitung behandelt. Informationen zur Fehlerbehebung bei der Planung von Aufgaben finden Sie unter Fehlerbehebung bei Problemen mit dem Airflow-Planer.

Workflow zur Fehlerbehebung

DAG-Prozessor-Logs prüfen

Bei komplexen DAGs werden möglicherweise nicht alle DAGs vom DAG-Prozessor geparst. Dies kann zu vielen Problemen mit den folgenden Symptomen führen.

Symptome:

  • Wenn beim Parsen Ihrer DAGs Probleme auftreten, kann das zu einer Kombination der hier aufgeführten Probleme führen. Wenn DAGs dynamisch generiert werden, können diese Probleme im Vergleich zu statischen DAGs stärkere Auswirkungen haben.

  • DAGs sind in der Airflow-UI und der DAG-UI nicht sichtbar.

  • DAGs werden nicht zur Ausführung geplant.

  • In den DAG-Prozessor-Logs sind Fehler enthalten, z. B.:

    dag-processor-manager [2023-04-21 21:10:44,510] {manager.py:1144} ERROR -
    Processor for /home/airflow/gcs/dags/dag-example.py with PID 68311 started
    at 2023-04-21T21:09:53.772793+00:00 has timed out, killing it.
    

    oder

    dag-processor-manager [2023-04-26 06:18:34,860] {manager.py:948} ERROR -
    Processor for /home/airflow/gcs/dags/dag-example.py exited with return
    code 1.
    
  • Bei DAG-Prozessoren treten Probleme auf, die zu Neustarts führen.

  • Airflow-Aufgaben, die zur Ausführung geplant sind, werden abgebrochen und DAG-Ausführungen für DAGs, die nicht geparst werden konnten, werden möglicherweise als failed markiert. Beispiel:

    airflow-scheduler Failed to get task '<TaskInstance: dag-example.task1--1
    manual__2023-04-17T10:02:03.137439+00:00 [removed]>' for dag
    'dag-example'. Marking it as removed.
    

Lösung

  • Erhöhen Sie die Parameter für das DAG-Parsing:

    • Erhöhen Sie dagbag-import-timeout auf mindestens 120 Sekunden (bei Bedarf auch mehr).

    • Erhöhen Sie dag-file-processor-timeout auf mindestens 180 Sekunden (bei Bedarf auch mehr). Dieser Wert muss größer als dagbag-import-timeout sein.

  • Korrigieren oder entfernen Sie DAGs, die Probleme mit dem DAG-Prozessor verursachen.

DAG-Parsing-Zeiten prüfen

Führen Sie folgende Schritte aus, um festzustellen, ob das Problem beim DAG-Parsen auftritt.

Console

In der Google Cloud Console können Sie auf der Seite Monitoring und auf dem Tab Logs die DAG-Parsingzeiten prüfen.

Sie können die DAG-Parsing-Zeiten auf der Cloud Composer-Monitoring-Seite prüfen:

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

    [Umgebungen aufrufen][console-list-env]

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

  3. Prüfen Sie im Tab Monitoring das Diagramm Gesamte Parsing-Zeit für alle DAG-Dateien im Abschnitt DAG-Ausführungen und identifizieren Sie mögliche Probleme.

    Im Abschnitt „DAG-Ausführungen“ des Tabs „Composer Monitoring“ werden Statusmesswerte für die DAGs in Ihrer Umgebung angezeigt.

Sie können die DAG-Parsing-Zeiten auf dem Tab Cloud Composer-Protokolle prüfen:

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

    [Umgebungen aufrufen][console-list-env]

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

  3. Rufen Sie den Tab Protokolle auf und wählen Sie im Navigationsbaum Alle Protokolle den Bereich DAG-Prozessormanager aus.

  4. Prüfen Sie die dag-processor-manager-Protokolle und identifizieren Sie mögliche Probleme.

    In den Logs des DAG-Prozessors werden die DAG-Parsing-Zeiten angezeigt.

gcloud

Verwenden Sie den Befehl dags report, um die Parsing-Zeit für alle DAGs anzuzeigen.

gcloud composer environments run ENVIRONMENT_NAME \
    --location LOCATION \
    dags report

Ersetzen Sie:

  • ENVIRONMENT_NAME durch den Namen der Umgebung.
  • LOCATION durch die Region, in der sich die Umgebung befindet.

Die Ausgabe sieht dann ungefähr so aus:

Executing within the following Kubernetes cluster namespace: composer-2-0-31-airflow-2-3-3
file                  | duration       | dag_num | task_num | dags
======================+================+=========+==========+===================
/manydagsbig.py       | 0:00:00.038334 | 2       | 10       | serial-0,serial-0
/airflow_monitoring.py| 0:00:00.001620 | 1       | 1        | airflow_monitoring

Suchen Sie für jeden in der Tabelle aufgeführten DAG nach dem Wert duration. Ein hoher Wert kann darauf hinweisen, dass einer Ihrer DAGs nicht optimal implementiert ist. In der Ausgabetabelle können Sie ermitteln, welche DAGs eine lange Parsing-Zeit haben.

Probleme zur DAG-Parsing-Zeit beheben

In folgenden Abschnitten werden Symptome und mögliche Lösungen für einige während der DAG-Parsing-Zeit häufig auftretende Probleme beschrieben.

Begrenzte Anzahl an Threads

Wenn Sie dem DAG-Prozessormanager nur eine begrenzte Anzahl an Threads zuweisen, kann sich das auf die DAG-Parsing-Zeit auswirken.

Überschreiben Sie die folgenden Airflow-Konfigurationsoptionen, um das Problem zu beheben:

  • Parameter parsing_processes überschreiben:

    Bereich Schlüssel Wert Hinweise
    scheduler parsing_processes NUMBER_OF_CPUs_IN_SCHEDULER - 1 Ersetzen Sie NUMBER_OF_CPUs_IN_SCHEDULER durch die Anzahl der CPUs
    im Scheduler.

So bestimmen Sie, dass der DAG-Prozessor unnötige Dateien ignoriert:

Sie können die Leistung des DAG-Prozessors verbessern, wenn Sie unnötige Dateien im DAGs-Ordner überspringen. Der DAG-Prozessor ignoriert Dateien und Ordner, die in der Datei .airflowignore angegeben sind.

So bestimmen Sie, dass der DAG-Prozessor unnötige Dateien ignoriert:

  1. Erstellen Sie eine .airflowignore-Datei.
  2. Listen Sie in dieser Datei Dateien und Ordner auf, die ignoriert werden sollen.
  3. Laden Sie diese Datei in den /dags-Ordner im Bucket Ihrer Umgebung hoch.

Weitere Informationen zum .airflowignore-Dateiformat finden Sie in der Airflow-Dokumentation.

Airflow verarbeitet pausierte DAGs

Airflow-Nutzer pausieren DAGs, um ihre Ausführung zu vermeiden. Dies spart Verarbeitungszyklen von Airflow-Workern.

Airflow parst pausierte DAGs weiter. Wenn Sie die Leistung des DAG-Prozessors wirklich verbessern möchten, verwenden Sie .airflowignore oder löschen pausierte DAGs aus dem DAGs-Ordner.

Allgemeine Probleme

In den folgenden Abschnitten werden Symptome und mögliche Lösungen für einige häufig auftretende Parsing-Probleme beschrieben.

Zeitüberschreitung beim Laden des DAG

Symptom:

  • In der Airflow-Weboberfläche wird oben auf der Seite mit der DAG-Liste in einem roten Warnfeld Broken DAG: [/path/to/dagfile] Timeout angezeigt.
  • In Cloud Monitoring: Die airflow-scheduler-Logs enthalten Einträge wie beispielsweise die folgenden:

    • ERROR - Process timed out
    • ERROR - Failed to import: /path/to/dagfile
    • AirflowTaskTimeout: Timeout

Lösung:

Überschreiben Sie die Airflow-Konfiguration dag_file_processor_timeout und legen Sie mehr Zeit für das DAG-Parsen fest:

Bereich Schlüssel Wert
core dag_file_processor_timeout Neuer Wert für die Zeitüberschreitung

Ein DAG ist in der Airflow-Benutzeroberfläche oder der DAG-Benutzeroberfläche nicht sichtbar und wird vom Planer nicht geplant

Der DAG-Prozessor parst jeden DAG, bevor er vom Planer geplant werden kann und bevor er in der Airflow-UI oder DAG-UI sichtbar wird.

Mit den folgenden Airflow-Konfigurationsoptionen werden Zeitüberschreitungen für das Parsen von DAGs definiert:

Wenn ein DAG nicht in der Airflow-UI oder DAG-UI angezeigt wird:

  • Prüfen Sie in den Logs des DAG-Prozessors, ob der DAG-Prozessor Ihren DAG korrekt verarbeiten kann. Bei Problemen werden in den DAG-Prozessor- oder Scheduler-Logs möglicherweise die folgenden Logeinträge angezeigt:

    [2020-12-03 03:06:45,672] {dag_processing.py:1334} ERROR - Processor for
    /usr/local/airflow/dags/example_dag.py with PID 21903 started at
    2020-12-03T03:05:55.442709+00:00 has timed out, killing it.
    
  • Prüfen Sie die Scheduler-Logs, um festzustellen, ob der Scheduler ordnungsgemäß funktioniert. Bei Problemen werden in den Scheduler-Logs möglicherweise die folgenden Logeinträge angezeigt:

    DagFileProcessorManager (PID=732) last sent a heartbeat 240.09 seconds ago! Restarting it
    Process timed out, PID: 68496
    

Lösungen:

  • Beheben Sie alle Fehler beim DAG-Parsing. Der DAG-Prozessor parst mehrere DAGs. In seltenen Fällen können Parsingfehler bei einem DAG sich negativ auf das Parsen anderer DAGs auswirken.

  • Wenn das Parsen Ihres DAG länger als die in [core]dagbag_import_timeout angegebene Anzahl von Sekunden dauert, erhöhen Sie dieses Zeitlimit.

  • Wenn das Parsen aller DAGs länger als die in [core]dag_file_processor_timeout angegebene Anzahl von Sekunden dauert, erhöhen Sie diese Zeitüberschreitung.

  • Wenn das Parsen Ihres DAGs lange dauert, kann das auch daran liegen, dass er nicht optimal implementiert ist. Das ist beispielsweise der Fall, wenn viele Umgebungsvariablen gelesen oder externe Dienste oder die Airflow-Datenbank aufgerufen werden. Vermeiden Sie möglichst solche Vorgänge in globalen Abschnitten von DAGs.

  • Erhöhen Sie die CPU- und Arbeitsspeicherressourcen für den Planer, damit er schneller arbeiten kann.

  • Passen Sie die Anzahl der Planer an.

  • Erhöhen Sie die Anzahl der DAG-Prozessorprozesse, damit das Parsen schneller erfolgen kann. Erhöhen Sie dazu den Wert von [scheduler]parsing_process.

  • Verringern Sie die Häufigkeit des DAG-Parsings.

  • Reduzieren Sie die Belastung der Airflow-Datenbank.

Nächste Schritte