Skip to content

Airflow on Kubernetes (3)

  • DataEngineering

📅 February 05, 2021

⏱️2 min read

최근 Airflow에는 Kubernetes 지원을 위해 다양한 컴포넌트들이 추가되고 있습니다. 이러한 변화의 흐름에 따라 Airflow를 Kubernetes 위에 배포하고 운영하는 방법에 대해 글을 작성해보고자 합니다. 이 글은 시리즈로 연재됩니다.


Airflow Logging

airflow-log

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 공식 문서를 통해 확인하실 수 있습니다.


Next →
  • Powered by Contentful
  • COPYRIGHT © 2020 by @swalloow