[Airflow] log 최적화

v K_Y v·2023년 6월 15일
0

AIRFLOW

목록 보기
3/4
post-thumbnail

Airflow를 운영하다보면 마치 미역이 불어나듯 나날이 늘어나는 존재가 있습니다.
이놈을 간과했다간 어느새 log에 잠식당한 디스크를 볼 수 있을 겁니다.😱
이러한 참사를 막기 위해 적용한 log 최적화 방법을 정리하고자 합니다.

Dag log

  • Worker에서 만들어내는 log로 각 DAG별로 생성됩니다.
  • 해당 로그는 30일이 지난 log를 따로 삭제하는 DAG를 만들어 관리하고 있습니다.
find $AIRFLOW_HOME/logs -type f -mtime +30 -delete

Scheduler log

  • Scheduler에서 만들어내는 log로 airflow 컴포넌트 로그 중 가장 큰 용량을 차지하는 주범입니다.
  • Scheduler와 Worker를 다른 노드에서 운영하고 있어 DAG를 이용한 삭제보다는 crontab으로 5일이 지난 log를 삭제하고 있습니다.
find /var/lib/docker/overlay2/*/diff/opt/airflow/logs/scheduler -type d -mtime +5 -exec rm -rf {} +

Docker container log

  • Docker container에서 만들어내는 log로 해당 로그는 Airflow의 문제가 아니라 Docker로 구성한 모든 시스템에 적용할 수 있습니다.
  • 방법은 여러가지가 있지만 고려했던 3가지 방법을 소개합니다.
  1. Logrotate
  • Logrotate를 이용해 50MB를 초과하면 log 파일을 로테이트하고 파일이 5개 이상 쌓일 시, 삭제하도록 합니다.
  • /etc/logrotate.d/docker에 아래 내용을 작성해줍니다.
/var/lib/docker/containers/*/*.log {
   rotate 5
   size 50M
   compress
   missingok
   copytruncate
}
  1. docker-compose 설정
  • docker-compose의 logging 설정을 통해 컨테이너별로 설정할 수 있습니다.
  • 아래 예시는 50MB 이하의 log 파일을 최대 5개까지 유지합니다.
airflow-worker:
    <<: *airflow-common
    container_name: airflow_worker
    hostname: ${_AIRFLOW_WORKER_HOSTNAME:-worker}
    command: celery worker
    volumes:
      ...
    healthcheck:
      test:
        - "CMD-SHELL"
        - 'celery --app airflow.executors.celery_executor.app inspect ping -d "celery@$${HOSTNAME}"'
      interval: 10s
      timeout: 10s
      retries: 5
    restart: always
    networks:
      - airflow
    logging:
      driver: 'json-file'
      options:
        max-size: '50m'
        max-file: '5'
  1. docker 기본 설정
  • docker 데몬에 logging driver 설정 시, 생성되는 모든 컨테이너에 동일하게 적용됩니다.
  • /etc/docker/daemon.json에 아래 내용을 작성해줍니다.
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "50m",
    "max-file": "5"
  }
}
profile
📌 기억하기 위해 남기는 기록들

0개의 댓글