web-dev-qa-db-ja.com

Airflow Schedulerログを削除する

私はDocker Apache airflow VERSION 1.9.0-2( https://github.com/puckel/docker-airflow )を使用しています。

スケジューラは大量のログを生成し、ファイルシステムはすぐに領域を使い果たすので、(/ usr/local/airflow/logs/schedulerのスケジューラコンテナにあるairflowによって作成されたスケジューラログをプログラムで削除しようとしています)

これらのメンテナンスタスクをすべて設定しました: https://github.com/teamclairvoyant/airflow-maintenance-dags

ただし、これらのタスクはワーカーのログのみを削除し、スケジューラログはスケジューラコンテナにあります。

リモートロギングもセットアップして、ログをS3に送信しますが、これに言及しているように、SO post Removeing Airflow task logs このセットアップでは、Airflowがローカルに書き込むのを停止しません機械。

さらに、ここで概説するように、ワーカーとスケジューラの間で共有の名前付きボリュームを作成しようとしました Docker Compose-複数のコンテナ間で名前付きボリュームを共有する 。ただし、ワーカーで次のエラーが発生します。

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

スケジューラの次のエラー:

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

では、どうすればスケジューラログを削除できますか?

12
Ryan Stack

this の返信に触発されて、私は here からairflow-log-cleanup.py DAG(パラメータにいくつかの変更を加えたもの)を追加して、allを削除しましたスケジューラログを含む古いエアフローログ。

EC2のディスクサイズ(/dev/xvda1の7.7G)を考慮すると、マイナーな変更はマイナーですが、DEFAULT_MAX_LOG_AGE_IN_DAYSの30日間のデフォルト値は大きすぎるように見えたため(4つのDAGがありました)、14日間に変更しましたが、環境:

DEFAULT_MAX_LOG_AGE_IN_DAYS = Variable.get("max_log_age_in_days", 30)DEFAULT_MAX_LOG_AGE_IN_DAYS = Variable.get("max_log_age_in_days", 14)に変更されました

4
HaMi

以下は、この問題を解決するための1つのオプションです。

次のメカニズムを使用して、Dockerコンテナーにログインします

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

上記のコマンドの実行中に、コンテナが実行されていることを確認してください。

次に、cronジョブを使用して、これらのログファイルにスケジュールされたrmコマンドを構成します。

2
fly2matrix

「Airflowタスクログの削除」に対するこの回答 は、Airflow 1.10のユースケースにも適合します。

基本的に、カスタムログハンドラーを実装し、デフォルトの代わりにそのハンドラーを使用するようにAirflowロギングを構成する必要があります(UPDATING.mdnotREADMEもドキュメントも!!、Airflowソースリポジトリ内)

注意事項:ロギング、マルチプロセッシング、およびAirflowのデフォルトハンドラーの相互作用により、派生ハンドラークラスでsuper()を呼び出してハンドラーメソッドを拡張するよりも、ハンドラーメソッドをオーバーライドする方が安全です。 Airflowのデフォルトハンドラーはロックを使用しないため

1
jnj16180340