개요
Airflow는 서비스 동작에 필요한 데이터를 MySQL이나 PostgreSQL과 같은 RDB에 저장한다. 서비스 시간이 길어질수록 dag_run, task_instance 등의 정보가 누적되면서 용량을 차지하는데 이러한 부분은 어떻게 관리해야 할까? 일반적으로 특정 보관주기를 정해두고 주기적으로 오래된 데이터를 삭제할 것이다.
Airflow에서는 어떻게 관리하는지 적어둔다.
참고로 GCP에서는 30일 정도의 보관주기를 권하고 있고, 대개 log, task_instance, dag_run, xcom 테이블이 용량을 많이 차지한다고 한다. (참고 : Airflow 데이터베이스 삭제 )
teamclairvoyant - db-cleanup
보통 teamclairvoyant의 airflow-maintenance-dags 레포지터리를 많이 활용하는 것 같다.
URL : https://github.com/teamclairvoyant/airflow-maintenance-dags
airflow-maintenance-dags에는 Airflow 설정 파일 백업이나 로그 정리 등 Airflow 동작을 관리하는데 도움을 주는 Dag를 제공하고 있는데, 데이터베이스 정리를 할 수 있는 db-cleanup이라는 Dag도 포함한다
다만 airflow 버전이 업그레이드되면서 meta DB 스키마도 변경이 발생하는데, 그만큼 airflow-maintenance-dags 레포지터리의 유지보수가 이뤄지고 있는지는 잘 모르겠다. 일단 2023년 7월 22일 기준으로 db cleanup DAG의 마지막 commit은 2년 전이니만큼 직접 유지보수를 해야할 가능성이 높아 보인다.
필요한 경우 레포지터리를 참고하여 Airflow DAG로 배포하면 될 것 같다.
db clean 명령
Airflow 2.3에서 새로 추가된 명령어로 Meta DB의 테이블에서 --clean-before-timestamp 옵션에 전달한 시각 이전의 데이터를 삭제한다. -t 옵션으로 삭제할 테이블을 지정할 수 있는데, 기본적으로 'callback_request', 'celery_taskmeta', 'celery_tasksetmeta', 'dag', 'dag_run', 'dataset_event', 'import_error', 'job', 'log', 'sla_miss', 'task_fail', 'task_instance', 'task_reschedule', 'xcom' 테이블을 대상으로 데이터를 삭제한다.
airflow db clean [-h] --clean-before-timestamp CLEAN_BEFORE_TIMESTAMP
[--dry-run] [--skip-archive] [-t TABLES] [-v] [-y]
# 예시
airflow db clean --clean-before-timestamp '2023-06-28 00:00:00'
airflow db clean --clean-before-timestamp '2021-10-21 16:23:13+0000' --tables 'xcom, log, dag_run'
명령어 테스트
먼저 어떻게 동작하는지를 확인하고자 --dry-run 옵션을 주어 테스트했다.
airflow db clean --clean-before-timestamp '2023-06-28 00:00:00' --dry-run
삭제할 테이블이 없으면 skip 처리된다는 것과 각 테이블에서 삭제하는 데이터 행 수를 확인할 수 있다.
--dry-run 옵션 없이 명령어를 실행하면 실행 결과를 되돌릴 수 없다는 내용과 'delete rows'를 입력하라는 확인 메시지를 볼 수 있다.
'detele rows'를 입력해야 명령어가 실행되며, 확인 없이 명령어를 실행하고 싶다면 -y 옵션을 주어 실행한다.
airflow db clean --clean-before-timestamp '2023-06-28 00:00:00' -y
실행 결과 확인
db clean 실행 전후를 비교하면 지정한 2023-06-28 00:00:00 이전의 dag_run이 삭제된 것을 확인할 수 있다.
참고 문서
https://github.com/teamclairvoyant/airflow-maintenance-dags/tree/master/db-cleanup
https://airflow.apache.org/docs/apache-airflow/2.5.1/cli-and-env-variables-ref.html#clean