web-dev-qa-db-ger.com

Airflow Scheduler-Protokolle entfernen

Ich verwende Docker Apache Airflow VERSION 1.9.0-2 ( https://github.com/puckel/docker-airflow ). 

Der Scheduler erzeugt eine beträchtliche Anzahl von Protokollen, und dem Dateisystem wird schnell der Speicherplatz ausgehen. Daher versuche ich, die von airflow erstellten Scheduler-Protokolle, die im Scheduler-Container in (/ usr/local/airflow/logs/scheduler) enthalten sind, programmgesteuert zu löschen )

Ich habe alle diese Wartungsaufgaben eingerichtet: https://github.com/teamclairvoyant/airflow-maintenance-dags

Diese Aufgaben löschen jedoch nur Protokolle auf dem Worker, und die Scheduler-Protokolle befinden sich im Scheduler-Container.

Ich habe auch die Remote-Protokollierung eingerichtet und Protokolle an S3 gesendet, aber wie in diesem SO post Entfernen von Airflow-Aufgabenprotokollen erwähnt, verhindert dieses Setup nicht, dass der Airflow auf den lokalen Computer schreibt.

Darüber hinaus habe ich auch versucht, ein freigegebenes benanntes Volume zwischen dem Worker und dem Scheduler zu erstellen, wie hier beschrieben: Docker Compose - Benannte Volume zwischen mehreren Containern teilen . Ich erhalte jedoch den folgenden Fehler in Worker:

ValueError: Unable to configure handler 'file.processor': [Errno 13] Permission denied: '/usr/local/airflow/logs/scheduler'

und der folgende Fehler im Scheduler:

ValueError: Unable to configure handler 'file.processor': [Errno 13] Permission denied: '/usr/local/airflow/logs/scheduler/2018-04-11'

Und wie löscht man Scheduler-Protokolle?

7
Ryan Stack

Nachfolgend finden Sie eine Möglichkeit, dieses Problem zu beheben.

Melden Sie sich mit dem folgenden Mechanismus am Docker-Container an

#>docker exec -it <name-or-id-of-container> sh

Stellen Sie sicher, dass der Container ausgeführt wird.

verwenden Sie anschließend cron-Jobs, um den geplanten Befehl rm für diese Protokolldateien zu konfigurieren.

2
fly2matrix

Inspiriert von this reply, habe ich die airflow-log-cleanup.py-DAG (mit einigen Änderungen an ihren Parametern) aus here hinzugefügt, um all alte Airflow-Protokolle, einschließlich Scheduler-Protokolle, zu entfernen. 

Meine Änderungen sind geringfügig, mit der Ausnahme, dass angesichts der Festplattengröße meines EC2 (7,7 G für /dev/xvda1) der 30-Tage-Standardwert für DEFAULT_MAX_LOG_AGE_IN_DAYS zu groß erschien. Daher habe ich ihn (ich hatte 4 DAGs) in 14 Tage geändert Umgebung:

DEFAULT_MAX_LOG_AGE_IN_DAYS = Variable.get("max_log_age_in_days", 30) geändert in DEFAULT_MAX_LOG_AGE_IN_DAYS = Variable.get("max_log_age_in_days", 14)

2
HaMi

Diese Antwort auf "Entfernen von Airflow-Aufgabenprotokollen" passt auch zu Ihrem Anwendungsfall in Airflow 1.10.

Grundsätzlich müssen Sie einen benutzerdefinierten Protokollhandler implementieren und die Airflow-Protokollierung so konfigurieren, dass dieser statt des Standardhandlers verwendet wird (siehe UPDATING.md, nicht README noch docs !!, in Airflow Source Repo)

Ein Wort der Vorsicht: Aufgrund der Art und Weise, wie Protokollierungs-, Multiprozessor- und Airflow-Standardhandler interagieren, ist es sicherer, Handlermethoden zu überschreiben, als sie durch Aufrufen von super () in einer abgeleiteten Handlerklasse zu erweitern. Da Airflow-Standardhandler keine Sperren verwenden

1
jnj16180340