행궁동 데이터 엔지니어

반응형

Airflow를 운영하다 보면 AIRFLOW_HOME\logs 디렉터리에 많은 로그가 쌓입니다.

해당 디렉토리에 쌓이는 Log는 Dag의 Tasks 로그(execution_time 별)로 아래와 같은 내용을 담고 있습니다.

Log 예시

Airflow 운영 기간이 길어지면 누적해서 쌓인 Tasks log의 용량이 상당히 크기 때문에 지속적으로 Log를 Rotation(회전)할 필요가 있습니다. 

  • ex. 최근 30일의 Log만 남기고 삭제한다, 최근 30일의 Log를 압축해 이관 후 기존 Log는 삭제한다.

아래에 리눅스의 find 명령어(with mtime 옵션)를 사용해서 최근 30일의 Airflow 로그만 남기는 Dag 코드 남기겠습니다.

 

Airflow에서 최근 30일 Log만 남기기

  • Airflow 버전 : 2.1.3
  • 방법 : 리눅스 find 명령어의 -mtime(Modification time) 옵션 활용
  • 아래에 Dag 코드 남기겠습니다.
  • 사용 방법 : BashOperator에서 [airflow log dir] 부분을 수정해서 사용
"""30일 지난 Airflow 로그를 삭제함
    
    사용 명령어 : find [airflow log dir] -type f -mtime +30 -delete
        : ex. find /opt/airflow/logs -type f -mtime +30 -delete
        : 위에 명령어를 BashOperator로 실행

    옵션 설명 : 
        : -type f : 일반 파일만 검색
            * 추가 설명 :  d: 디렉토리, l: 링크 파일, b: 블록디바이스, c: 캐릭터 디바이스 ...
        : -mtime +30 : 생성한지 720시간 이상 지난 파일만 검색
        : -delete : 삭제
"""
import pendulum
from datetime import datetime, timedelta

from airflow import DAG
from airflow.operators.bash import BashOperator # Import BashOperator

"""Set DAG"""
local_tz = pendulum.timezone("Asia/Seoul")

default_args = {
    'owner': 'dev-user',
    'email': 'your@email.com',
    'retries': 3,
    'retry_delay': timedelta(minutes=10)
}

dag = DAG(
    dag_id='delete_log_mtime_30', 
    default_args=default_args,
    start_date=datetime(2021, 9, 17, tzinfo=KST_TZ), 
    catchup=False, 
    schedule_interval='* 2 * * *',  # Crontime : min hour day month week / 매일 02시에 삭제
    max_active_runs=3,
    tags=['operation']
)

"""Task"""
del_log = BashOperator(
    task_id='delete_log',
    bash_command='find /home/dev-user/airflow_dir/logs -type f -mtime +30 -delete',
    dag=dag
)

del_log

 

기타 궁금하신 사항은 댓글 남겨주세요.

 

감사합니다.

 

Log 삭제 Dag 생성 모습

반응형

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band