Airflow on Kubernetes (3)
📅 February 05, 2021
•⏱️2 min read
최근 Airflow에는 Kubernetes 지원을 위해 다양한 컴포넌트들이 추가되고 있습니다. 이러한 변화의 흐름에 따라 Airflow를 Kubernetes 위에 배포하고 운영하는 방법에 대해 글을 작성해보고자 합니다. 이 글은 시리즈로 연재됩니다.
- Airflow on Kubernetes (1): CeleryExecutor
- Airflow on Kubernetes (2): KubernetesExecutor
- Airflow on Kubernetes (3): Airflow Logging, Monitoring
Airflow Logging
Airflow의 Task 로그는 PV를 통해 영구 볼륨에 저장하거나 Remote Logging 설정을 통해 외부 저장소로 수집할 수 있습니다. S3, ES, GCS 등 다양한 저장소를 지원합니다.
예를 들어 S3로 설정하면 Task 로그의 수명주기를 S3 Lifecycle에 의해 관리할 수 있게 됩니다.
참고로 2.0 버전부터 로그 관련 설정은 core
에서 logging
섹션으로 이동했습니다.
logging:
remote_logging: "True"
remote_base_log_folder: "s3://mybucketname/airflow"
remote_log_conn_id: "aws_default"
logging_level: INFO
Airflow Metrics
Airflow는 StatsD를 통한 메트릭 전송 방법을 공식 지원합니다.
K8S 환경에서 많이 사용하는 Prometheus을 통해 메트릭을 수집하는 방법은 아래와 같이 2가지가 있습니다.
Official Helm Chart의 경우 statsd-export를 통해 전송하는 방법을 지원하고 있습니다.
Values.statsd.enabled
옵션을 통해 쉽게 설정하실 수 있습니다.
1. airflow-prometheus-exporter: airflow model 객체를 활용하여 prometheus metrics collector를 구현한 모듈입니다. stable/airflow chart에서 옵션을 통해 설정할 수 있으며 airflow plugin 형태로 구현되어 있어 UI의 /metrics 경로에서 로그를 확인할 수 있습니다.
2. airflow-statsd-exporter: statsd는 UDP, TCP를 통해 메트릭을 수집에서 전송하는 프록시입니다. airflow에서는 공식적으로 statsd를 통해 메트릭을 지원하고 있습니다. official helm chart에서는 statsd를 통해 메트릭을 수집하고 exporter를 통해 prometheus에 저장할 수 있습니다.
수집하는 과정은 위의 그림과 같습니다. statsd-exporter는 Deployment 형태로 배포되며 수집 어노테이션이 정의되어 있습니다.
Monitoring
Prometheus에 저장된 메트릭은 Grafana를 통해 데이터 소스로 지정하고 원하는 지표를 시각화할 수 있습니다. 위의 대시보드에 활용한 지표는 다음과 같습니다.
- Airflow Scheduler Health
- Number of Queued Tasks
- Number of Running Tasks
- Scheduling Delay by DAG
- DAG Import Time
- DAG Running Duration
사용자가 작성한 DAG은 Parser를 통해 객체로 변환되고 메타데이터 DB에 저장되는데 DAG Import Time
은 이 과정을 수행하는데 있어 걸리는 시간을 의미합니다. 위에 언급된 지표 외에도 다양한 지표를 지원합니다. 자세한 리스트는 Airflow Metrics 공식 문서를 통해 확인하실 수 있습니다.