드디어 ETL 프로젝트 포스팅 마지막 !!
우리가 만든 Airflow DAG의 작업 실행 과정과 성능을 확인하기 위해서는 모니터링이 필요하다.
prometheus, Grafana 다양한 메트릭을 수집하고 이를 한 눈에 볼 수 있게 시각화 해주는 오픈소스 모니터링 툴이다.
이를 활용하여 Airflow 모니터링 대시보드까지 구축해보자 📈
목차 📋
1. Airflow Monitoring Diagram
2. Enabling statsd metrics on Airflow
3. Converting statsd metrics to Prometheus metrics
4. Collecting metrics using Prometheus
5. Displaying metrics in Grafana
1. Airflow Monitoring Diagram
apache airflow는 stasd 프로토콜을 사용하여 메트릭을 보낼 수 있다.
이 메트릭은 일반적으로 stasd 서버로부터 받게 된다.
우리의 목적은 이 메트릭을 8125 Port를 통해 프로메테우스로 보내는 것이다.
간략하게 프로세스를 설명하자면,
1. airflow에 대한 메트릭을 stasd exporter 로 보내준다.
2. stastd_exporter를 사용하여 statsd 메트릭을 prometheus 메트릭으 변환한다.
3. prometheus 서버는 이 메트릭을 수집하고 grafana 에서 대시보드로 보여질 수 있게한다.
2.Enabling statsd metrics on Airflow
airflow에서 stasd exporter에게 메트릭을 statd exporter로 전달하기 위해서는 airflow에서 stasd 서버를 활성화시켜줘야한다.
aiflow.cfg 파일을 열어 다음과 같이 설정해준다.
$ vi ~/airflow/airflow.cfg
초기 설정은 statsd_on = False라고 되어있다. -> True 로 변경
statsd 서버를 로컬에서 돌리고있다면 localhost로 설정해준다.
그리고 AWS EC2 환경을 사용하고 있다면 잊지말 것 ! 인스턴스 보안 그룹 설정에서 인바운드 규칙 편집으로 8125 port를 뚫어줘야한다.
statsd_on = True
statsd_host = localhost
statsd_port = 8125
statsd_prefix = airflow
이 구성을 기반으로 Airflow는 statsd 서버에 statsd 메트릭을 localhost:8125로 보낼 수 있게 된다!
3. Converting statsd metrics to Prometheus metrics
go 명령어를 사용하여 exporter를 설치해보자!
(docker-compose로 설치해보려했다가 .. 장렬히 실패햇읍니다..)
$ sudo apt install golang-go
$ go install github.com/prometheus/statsd_exporter@latest
이제 statsd_exporter가 설치된 경로에서 node exporter 를 실행시켜준다.
$ export GOLANG=/home/ubuntu/go/bin
$ $GOLANG/statsd_exporter --statsd.listen-udp localhost:8125 --log.level debug
마지막 줄을 확인해보면 9102 포트에서 프로메테우스가 요청을 수락한다는 메세지가 나타나고 있다.
이는 프로메테우스가 9102 포트 주소로부터 HTTP 요청을 수행하여 메트릭을 수집하고 있다는 것을 의미한다.
해당 메트릭을 추적하기 위해 ec2 인바운드 규칙 편집에서 9102 포트를 뚫어주고 다음 명령어를 실행한다.
$ curl localhost:9102/metrics
그리고 stast설치해주기!
pip install stasd
이렇게 하면 airflow의 메트릭을 prometheus 메트릭으로 변환 완료 ✅
4. Collecting metrics using Prometheus
일단 프로메테우스를 설치해주자
$ wget https://github.com/prometheus/prometheus/releases/download/v2.48.0/prometheus-2.48.0.linux-amd64.tar.gz
$ tar xvfz prometheus-*.tar.gz
$ mv prometheus-2.48.6=0.linux-amd64 prometheus
$ cd prometheus
$ export PROMETHEUS_HOME=$(pwd)
이제 prometheus에서 airflow 메트릭을 수집할 수 있다!
이를 위해 prometheus 의 prometheus.yml 파일의 scrape_configs 부분을 다음과 같이 수정해준다.
scrape_configs:
- job_name: airflow
static_configs:
- targets: ['localhost:9102']
해당 파일을 프로메테우스가 있는 폴더에서 실행시켜준다.
$ ./prometheus --config.file=prometheus.yml
그리고 프로메테우스 서버로 접속하기 위해 ec2의 9090포트 열어주는 거 잊지말기!
이제 9090포트를 통해 접속하면 다음과 같은 화면 확인 가능!
해당 서버로 airflow의 메트릭들이 수집되는 것을 확인할 수 있다.
5. Displaying metrics in Grafana
이제 그라파나의 대시보드를 통해서 메트릭들을 시각화해보자
ec2의 3000포트 열어주고 ip 주소로 접근하면 된다!
초기 username : admin
초기 password : admin
로그인 후 비밀번호 변경해주면 된다.
data source 카테고리로 이동해서 prometheus를 추가해준다!
connection url은 9090포트!
이제 dashboard import 를 해줘야한다.
https://github.com/noseka1/monitoring-apache-airflow-using-prometheus ⬅️ 요기 깃허브에 가면 공식 기본 대시보드 json 파일을 확인할 수 있다.
그대로 import via dashboard json model에 복붙!
이렇게 하면 airflow dashboard가 import 된다.
이제 airflow DAG 를 실행시키고난 후 task, scheduler, executor의 메트릭 정보들을 그래프로 확인할 수 있다!!
싱기 👀
참고 자료
https://www.redhat.com/en/blog/monitoring-apache-airflow-using-prometheus
'데이터 > 데이터 엔지니어링' 카테고리의 다른 글
[Apache Airflow] ETL 프로젝트 #2 (Slack 메신저 봇 만들기) (0) | 2023.12.02 |
---|---|
[Apache Airflow] ETL 프로젝트 #1 (ETL 파이프라인 구축) (1) | 2023.11.25 |
[Apache Airflow] Airflow로 Branch, ML 예제 수행해보기 (1) | 2023.11.19 |
[Chapter07] OpenSearch CRUD 실습 (1) | 2023.10.07 |
[Chapter 06] 분산시스템의 이해, Zookeeper (1) | 2023.10.01 |