개요
2023.08.08 - [Airflow] DB Clean에서 Airflow Meta DB를 관리하는 두 가지 방법을 소개했었다.
- airflow_db_cleanup Dag 사용
- airflow db clean 명령 사용
기존 글에서는 airflow 명령어를 사용한 방법에 초점을 맞췄는데, 이번 글에서는 airflow_db_cleanup Dag를 사용한 방법에 초점을 맞춰서 정리해보려고 한다.
airflow_db_cleanup
airflow_db_cleanup Dag는 https://github.com/teamclairvoyant/airflow-maintenance-dags 에서 개발되었다. 하지만 저장소 이력을 보면 전혀 관리가 되어 있지 않은 상태로 보이는데, 좀 더 찾아보니 GCP의 https://github.com/GoogleCloudPlatform/python-docs-samples에서 해당 저장소의 db_cleanup 코드를 포크하여 관리하고 있는 것을 확인할 수 있었다.
해당 저장소에서 관리되고 있는 소스를 사용해 Airflow Meta DB를 관리해보자.
사용 방법
1. dag_folder에 airflow_db_cleanup.py 복사
wget https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/main/composer/workflows/airflow_db_cleanup.py
2. 필요 전역 변수 설정
기본적으로 아래의 변수를 지정하도록 안내되어 있다. 코드의 주석을 참고하여 달리 필요한 설정도 편집한다.
# 실행 주기
SCHEDULE_INTERVAL = "@daily"
# DAG_OWNER 지정
DAG_OWNER_NAME = "operations"
# 실행 실패 시 메일 경고를 전송한 이메일 주소 목록
ALERT_EMAIL_ADDRESSES = []
# Airflow 버전
AIRFLOW_VERSION = airflow_version.split(".")
# DB 삭제 여부
ENABLE_DELETE = True
2. DATABASE_OBJECTS 편집
airflow_db_cleanup로 처리할 항목은 DATABASE_OBJECTS 변수로 지정되어 있다. 필요 시 처리할 항목을 추가하거나 주석으로 막아 제외할 수 있다. 항목을 추가할 때는 아래의 설정을 지정하도록 한다.
{
# airflow Meta DB 내 테이블에 해당하는 airflow.models에서 임포트되는 Model
"airflow_db_model": DagRun,
# 데이터 삭제 시 최대 날짜를 계산하는데 사용할 모델 또는 테이블 내 컬럼
"age_check_column": DagRun.execution_date,
# 마지막 실행 인스턴스 보존 여부 결정
"keep_last": True,
# 데이터 정리 중 삭제하지 않도록 할 필터 목록
"keep_last_filters": [DagRun.external_trigger.is_(False)],
# 데이터베이스 항목에 대해 그룹 연산을 수행할 기준 열
"keep_last_group_by": DagRun.dag_id,
}
어지간하면 직접 추가할 일은 없을 것 같다.
3. Admin -> Variables에 변수 airflow_db_cleanup__max_db_entry_age_in_days 추가
Airflow Meta DB의 보관주기를 지정하는 변수를 추가한다.
기본값은 30으로, 30일 이전의 생성된 데이터는 Airflow Meta DB에서 삭제된다.
4. 동작 확인
지정한 설정대로 정상적으로 동작하는지 확인한다.
이 글의 경우 동작 시점인 2024-03-25 12:00:00 기준으로 2024-02-22 12:00:00 이전 데이터를 삭제하고 있다.
날짜 계산기 등으로 두 날짜의 차이를 계산해보면 Variables에 설정한 값인 최근 32일 치 데이터를 유지하도록 동작하는 것을 확인할 수 있다.
참고 문서
https://github.com/teamclairvoyant/airflow-maintenance-dags
https://cloud.google.com/composer/docs/composer-2/cleanup-airflow-database?hl=ko