[TroubleShooting] Airflow EC2 Monitoring 서버 구축기 - 2

2024. 12. 27. 18:30·TroubleShooting

앞서 모니터링 서버에 Grafana와 Prometheus를 설치하였으니, Airflow에서 해당 모니터링 서버로 데이터를 전송하도록 해야합니다!!

해당 목표를 위해 도전하였던 방법에 대해서 기술하도록 하겠습니다!

 

먼저 처음 알아보았던 방법은 Airflow 서버에서 Prometheus Exporter를 통해 Monitoring 서버로 Airflow의 다양한 메트릭 데이터를 보내는 방법이었습니다!

 

Prometheus Exporter를 통한 Metrics 데이터 전송

더보기

1) Airflow 서버에 Prometheus Exporter 설치

airflow-main, airflow-worker 서버에 Prometheus Exporter 설치

# 이미 설치되어 있는지 확인
pip list | grep prometheus-airflow-exporter

# 설치
pip install airflow-prometheus-exporter --break-system-packages

# airflow-prometheus-exporter 플러그인이 flask_admin 모듈을 필요로 함
pip install flask-admin --break-system-packages

# metric 활성화 안되서 업그레이드
pip install airflow-prometheus-exporter --upgrade --break-system-packages

  • Airflow 서버(Web Server 및 Worker)에 Exporter를 설치

⇒ 이 플러그인을 설치해야 Airflow 웹 서버가 Prometheus가 이해할 수 있는 /metrics 엔드포인트를 생성

*Airflow는 /metrics를 기본적으로 생성하며, Prometheus는 이 경로를 통해 데이터를 수집

 

2) Airflow 웹 서버에서 Metrics 활성화

리버스 프록시 없이 Airflow를 직접 사용하고 있기 때문에 추가적인 Airflow 설정 파일 변경은 필요 없음

→ airflow-prometheus-exporter 플러그인 플러그인 설치 후 Airflow 웹 서버를 재시작만 하면 /metrics 엔드포인트가 활성화

# Airflow 웹 서버 재시작
airflow webserver -D

 

해당 방법을 통해 Airflow Main 서버에서 Metrics 엔드포인트에 접속을 확인하였으나, 404 에러가 발생하며 접속을 할 수 없었습니다!!

이슈 상세

더보기

airflow-prometheus-exporter 플러그인이 Airflow에 성공적으로 로드되어있지만, metrics 엔드포인트 접속 불가능

→ metric 활성화가 안된 상태

ubuntu@ip---:~$ curl <http://ip:port/metrics>

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Airflow 404</title>
    <link rel="icon" type="image/png" href="/static/pin_32.png">
  </head>
  <body>
    <div style="font-family: verdana; text-align: center; margin-top: 200px;">
      <img src="/static/pin_100.png" width="50px" alt="pin-logo" />
      <h1>Airflow 404</h1>
      <p>Page cannot be found.</p>
      <a href="/">Return to the main page</a>
      <p></p>
    </div>
  </body>
</html>

 

해당 오류 해결을 위해 Airflow의 기본 StatsD 지원 기능을 활용하기로 결정하고 적용하였습니다!

 

StatsD Exporter 사용

더보기

1. 문제 배경

  • Airflow에서 Prometheus Exporter를 사용해 메트릭을 직접 Prometheus로 전송하려 했지만, 정상적으로 작동하지 않음.
  • Airflow의 기본 StatsD 지원 기능을 활용하기로 결정.

2. 해결 방법 개요

  1. Airflow가 StatsD를 통해 메트릭을 전송하도록 설정.
  2. StatsD Exporter를 사용해 StatsD 메트릭을 Prometheus 형식으로 변환.
  3. Prometheus가 StatsD Exporter에서 변환된 메트릭을 스크래핑하도록 설정.

3. 구현 과정

1. StatsD Exporter 설치 및 설정

StatsD Exporter를 설치하고 실행:

wget https://github.com/prometheus/statsd_exporter/releases/download/v0.22.1/statsd_exporter-0.22.1.linux-amd64.tar.gz
tar -xvzf statsd_exporter-0.22.1.linux-amd64.tar.gz
cd statsd_exporter-0.22.1.linux-amd64
./statsd_exporter --statsd.listen-udp 0.0.0.0:8125 --web.listen-address 0.0.0.0:9102 --log.level debug
 
  • 8125: StatsD 데이터를 수신하는 UDP 포트.
  • 9102: Prometheus가 스크래핑할 HTTP 포트.
  • 해당 두 포트에 대해서 각각 UDP, TCP 포트를 인바운드 규칙에 추가해야 합니다!!

2. Airflow 설정 변경

Airflow에서 StatsD를 통해 메트릭을 전송하도록 설정:

# airflow.cfg 파일 수정
statsd_on = True
statsd_host =   # StatsD Exporter 서버 IP
statsd_port = 8125           # StatsD Exporter의 UDP 포트
statsd_prefix = airflow_scheduler_webserver  # 메트릭 네임스페이스
statsd_disabled_tags = job_id,run_id         # 불필요한 태그 필터링
statsd_datadog_metrics_tags = True           # 태그 지원 활성화

 

설정 후 Airflow 서비스를 재시작:

sudo systemctl restart airflow-scheduler
sudo systemctl restart airflow-webserver

 

3. Prometheus 설정 변경

Prometheus에서 StatsD Exporter를 스크래핑하도록 설정:

# prometheus.yml 파일 수정
scrape_configs:
  - job_name: "airflow-metrics" # 원하는 job name으로 설정
    scrape_interval: 5s # 설정하지않으면 job이 down 상태!
    static_configs:
      - targets: ["13.209.214.205:9102"]  # StatsD Exporter의 HTTP 엔드포인트

 

설정 후 Prometheus 서비스를 재시작:

sudo systemctl restart prometheus

 

기존 Prometheus Exporter를 사용하려는 방법보다, Statsd Exporter를 모니터 서버에 구축하여 설정을 변경해주는 것이 보다 편하고 간편하게 Metrics 데이터를 전송할 수 있었습니다!

 

Prometheus Exporter가 되지 않는 정확한 이유는 파악하지 못했지만, 예상으로는 2.x의 Airflow 중에도 구버전을 지원했던 기술이기에 현재 프로젝트에서 사용 중인 최신 Airflow 2.9x, 2.10x와 호환이 되지 않는 것 같다는 예상을 하고 있습니다!

 

Prometheus에서 Metrics 데이터를 수신!

 

저작자표시 (새창열림)

'TroubleShooting' 카테고리의 다른 글

[TroubleShooting] Airflow EC2 Monitoring 서버 구축기 - 1  (0) 2024.12.27
'TroubleShooting' 카테고리의 다른 글
  • [TroubleShooting] Airflow EC2 Monitoring 서버 구축기 - 1
김줘
김줘
김줘와 같이 데이터, 컴퓨터, IT 공부
  • 김줘
    초보개발자 김줘의 코딩일기
    김줘
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 데이터 엔지니어링 데브코스
      • 데이터
        • Airflow
        • Spark
        • Kafka
        • dbt
      • TroubleShooting
      • Docker
      • AWS
      • 크롤링, 스크래핑, 시각화
        • Selenium
        • 시각화
      • 코딩테스트
        • 프로그래머스
        • 입출력과 사칙연산
        • 정렬
      • Django
      • 자바 공부
      • 끄적끄적
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java
    데이터 엔지니어
    Azure
    티스토리챌린지
    cloud
    에어플로우
    Airflow
    부트캠프
    TiL
    데이터 엔지니어링 데브코스
    프로그래머스
    프로그래밍
    데이터 엔지니어링 데브코스 4기
    파이썬
    데브코스
    Python
    오블완
    초보개발자
    aws
    자바
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
김줘
[TroubleShooting] Airflow EC2 Monitoring 서버 구축기 - 2
상단으로

티스토리툴바