인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

kyou님의 프로필 이미지
kyou

작성한 질문수

Airflow 마스터 클래스

스케줄러 부하 줄이기

다중 스케줄러 실행 시 확인 방법 문의

작성

·

34

0

강사님, 안녕하세요.

다중 스케줄러 실행 시 정상적으로 동작하고 있는지 확인할 수 있는 방법에 대해 문의드립니다.

현재 Worker와 Scheduler를 다중으로 실행하여 고가용성 테스트를 진행 중입니다. Worker의 경우 Celery Flower를 통해 정상적으로 Sync가 이뤄지는 것을 확인하였습니다. 다만 Scheduler의 경우 뭔가 정확하게 확인이 안되는 것 같습니다.

우선 제가 찾은 방법으로는 메타 테이블 조회와 커맨드가 있습니다.

  1. 메타 테이블 조회

     

    아래와 같이 조회하면 running인 상태의 host가 Scheduler 수만큼 조회됩니다. hostname도 모두 일치합니다.

select *
  from job
 where job_type = 'SchedulerJob'
   and state = 'running';
  1. 커맨드

     

    아래와 같이 커맨드 실행 시 'Found one alive job.'이 출력됩니다.

$ airflow jobs check --job-type SchedulerJob
Found one alive job.

Scheduler 로그 확인 시 모두 heartbeat은 계속 요청하고 있습니다. 혹시 Worker와 같이 명확하게 다중 스케줄러 환경인지 확인하는 방법이 있을까요?

답변 1

0

김현진님의 프로필 이미지
김현진
지식공유자

안녕하세요 kyou 님!

강의 내용에 없던 scheduler 고가용성 테스트도 해보시고 좋습니다 ^^

일단 airflow web에서도 scheduler 현황을 파악할 수 있는 메뉴는 없고, flower 웹에서는 worker 현황만 보이기 때문에 멀티 스케줄러 현황을 보기가 좀 여려울 거에요.

우선 kyou 님 질문에 답변 드리자면 DB를 통해서 확인하셔도 되고 CLI 사용하실 때 --allow-multiple --limit 100 옵션을 넣어서 해보실래요? 그럼 scheduler 노드 개수가 나올꺼에요.

 

airflow jobs check --job-type SchedulerJob --allow-multiple --limit 100

 

일반적으로 scheduler alive 등의 모니터링은 Grafana 를 통해서 쉽게 확인할 수 있습니다. 참고로 airflow는 여러 metric 정보를 내보낼 수 있는 기능이 있는데 statsD 라는 Metric 수집기를 사용해서 Metric 정보를 내보내고 이를 prometheus 에 저장, Grafana dashboard 로 구성하는게 가능합니다.

Airflow statsD 전송 --> stateD exporter --> prometheus --> Grafana

 

이런 흐름으로 metric 정보 전송이 가능한데 exporter, prometheus, Grafana 3개 모두 docker 컨테이너로 띄울 수 있어서 한번 해보시는것도 좋을 것 같아요. 참고로 airflow statsD 로 metric 을 내보내기 위해 파라미터 설정을 몇 가지 해줘야 합니다. 아래 문서를 참고해보세요.

https://airflow.apache.org/docs/apache-airflow/stable/administration-and-deployment/logging-monitoring/metrics.html

 

Grafana Dashboard에 따라서 scheduler의 상태를 그래프로 볼 수 있습니다.

한번 구성해보는것도 나쁘지 않을 것 같아요. ^^

그럼 새해복 많이 받으시고 화이팅입니다!

kyou님의 프로필 이미지
kyou
질문자

강사님, 우선 답변주셔서 감사합니다.

말씀해주신 CLI 옵션으로 스케줄러 2개가 alive하는 것을 확인했습니다.

 

그리고 statsD exporter 관련해서 궁금한 점이 있습니다.

Airflow에 statsD가 정상적으로 설치되었으며, statsD exporter의 수집 포트로 8125번을 사용하고 있는 상태입니다. 그런데 metrics에서 prefix=airflow에 관련한 메트릭이 보이지 않습니다.

image.png

 

tcpdump를 떠보면 statsD exporter쪽으로 데이터는 정상적으로 흘러가는 데 말이죠.. 아래와 같이 airflow의 metric이 전달되는 것이 확인됩니다..

$ sudo tcpdump -i any port 8125 -A
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
11:09:09.988285 IP 192.168.48.7.44026 > 192.168.48.4.8125: UDP, length 37
E..A..@.@..m..0...0......-..airflow.dag_processing.processes:-1|c
11:09:09.988300 IP 192.168.48.7.44026 > 192.168.48.4.8125: UDP, length 37
E..A..@.@..m..0...0......-..airflow.dag_processing.processes:-1|c
11:09:09.989013 IP 192.168.48.7.44026 > 192.168.48.4.8125: UDP, length 78
E..j..@.@..C..0...0......V..airflow.dag_processing.last_duration.tutorial_taskflow_templates:125.891000|ms
11:09:09.989019 IP 192.168.48.7.44026 > 192.168.48.4.8125: UDP, length 78

 

여러 방면으로 찾아보고 --statsd.mapping-config 옵션 등 적용해봤으나 해결이 되지 않네요😭 혹시나 이런 경험이 있으실까 하여 질문 남깁니다..

https://stackoverflow.com/questions/60386824/airflow-statsd-prometheus-mapping-rules

 

언제나 강의 잘 듣고 있습니다. 새해 복 많이 받으세요!

김현진님의 프로필 이미지
김현진
지식공유자

혹시 statsd_mapping.conf 파일 어떻게 작성하셨는지 남겨주실래요?

kyou님의 프로필 이미지
kyou
질문자

안녕하세요!

파일 첨부를 할 수 없어 아래 참조한 conf에 대한 링크를 전달드립니다.

https://github.com/databand-ai/airflow-dashboards/blob/main/statsd/statsd.conf

적용 시 exporter에서 아래와 같이 성능 이슈에 대한 warning 메시지는 발생하지만, 여전히 metrics에서는 airflow에 대한 메트릭이 보이지 않습니다. 여러 conf 파일을 적용해도 마찬가지네요..

time=2025-01-03T04:52:59.582Z level=WARN source=fsm.go:311 msg="backtracking required because of match. Performance may be degraded" match=*.dag_processing.processes
kyou님의 프로필 이미지
kyou

작성한 질문수

질문하기