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 zum Beheben von Problemen beim Planen von Aufgaben finden Sie unter Probleme mit dem Airflow-Planer beheben.

Workflow zur Fehlerbehebung

DAG-Prozessorlogs ansehen

Wenn Sie komplexe DAGs haben, kann es sein, dass der DAG-Prozessor nicht alle Ihre DAGs parst. Dies kann zu vielen Problemen mit den folgenden Symptomen führen.

Symptome:

  • Wenn beim Parsen Ihrer DAGs Probleme auftreten, kann dies zu einer Kombination der hier aufgeführten Probleme führen. Wenn DAGs dynamisch generiert werden, können sich diese Probleme stärker auswirken als bei statischen DAGs.

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

  • DAGs werden nicht zur Ausführung geplant.

  • Die DAG-Prozessorlogs enthalten Fehler, 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 (oder mehr, falls erforderlich).

    • Erhöhen Sie dag-file-processor-timeout auf mindestens 180 Sekunden (oder mehr, falls erforderlich). Dieser Wert muss höher 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 die Seite Monitoring und den Tab Logs verwenden, um die DAG-Parsingzeiten zu prüfen.

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

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

    [Zu Umgebungen][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 Tab „Composer Monitoring“ werden Statusmesswerte für die DAGs in Ihrer Umgebung angezeigt.

So prüfen Sie die DAG-Parsing-Zeiten auf dem Tab Cloud Composer-Logs:

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

    [Zu Umgebungen][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 Logs auf und wählen Sie im Navigationsbaum Alle Logs den Bereich DAG-Prozessormanager aus.

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

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

gcloud

Verwenden Sie den dags report-Befehl, 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 in der Tabelle nach dem duration-Wert für jeden der aufgeführten DAGs. 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 den DAG-Prozessormanager nur eine begrenzte Anzahl an Threads verwenden lassen, kann sich dies auf die DAG-Parsing-Zeit auswirken.

Überschreiben Sie zur Behebung des Problems die folgenden Airflow-Konfigurationsoptionen:

  • Überschreiben Sie den Parameter parsing_processes:

    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 der rote Warnhinweis 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 in der DAG-Benutzeroberfläche nicht sichtbar und der Planer plant ihn nicht.

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

Die folgenden Airflow-Konfigurationsoptionen definieren Zeitüberschreitungen für das Parsen von DAGs:

Wenn ein DAG in der Airflow-UI oder DAG-UI nicht sichtbar ist, gehen Sie so vor:

  • Prüfen Sie die Logs des DAG-Prozessors, um festzustellen, ob er Ihre DAG korrekt verarbeiten kann. Bei Problemen werden möglicherweise die folgenden Logeinträge in den Logs des DAG-Prozessors oder Schedulers 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 zu sehen, ob der Scheduler richtig 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 Parsen von DAGs. Der DAG-Prozessor parst mehrere DAGs. In seltenen Fällen können sich Parsing-Fehler eines DAG negativ auf das Parsen anderer DAGs auswirken.

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

  • Wenn das Parsen aller Ihrer DAGs länger dauert als die in [core]dag_file_processor_timeout definierte Anzahl von Sekunden, erhöhen Sie dieses Zeitlimit.

  • Wenn das Parsen Ihres DAGs lange dauert, kann das auch darauf hinweisen, dass er nicht optimal implementiert ist. Das kann beispielsweise der Fall sein, wenn viele Umgebungsvariablen gelesen oder Aufrufe an externe Dienste oder die Airflow-Datenbank ausgeführt werden. Vermeiden Sie es nach Möglichkeit, solche Vorgänge in globalen Abschnitten von DAGs auszuführen.

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

  • Anzahl der Planer anpassen

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

  • Häufigkeit des DAG-Parsings verringern:

  • Belastung der Airflow-Datenbank verringern:

Nächste Schritte