-
Airflow 모니터링 시스템 구축기 Part.2(Feat. prometheus 설치)Monitoring System/Prometheus 2023. 6. 10. 16:14728x90
https://ninano1109.tistory.com/273
Airflow 모니터링 시스템 구축기 exporter 설치에 이어서 다음으로 Prometheus를 설치했습니다.
앞서 말했듯이, prometheus pull 방식의 매트릭 수집기입니다.
수집된 매트릭 정보는 용량을 압축하여 시계열 데이터베이스에 저장되며, PromQL 쿼리를 통해 빠르게 조회가 가능합니다.
Prometheus 설치에 필요한 Dockerfile과 설정 파일인 prometheus.yml 파일을 작성합니다.
1. Dockerfile
FROM prom/prometheus:latest COPY prometheus.yml /opt/prometheus.yml
Docker image build(이미지 이름: prometheus_img)
docker image build -t prometheus_img .
2. prometheus.yml
global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'statsd-exporter' static_configs: - targets: ['localhost:9102'] labels: airflow_id: 'airflow' - job_name: 'postgres_exporter' static_configs: - targets: ['localhost:9187']
prometheus는 매 15초마다 데이터를 스크랩하고, alert trigger를 위한 쿼리 검증을 합니다.
공식문서에서는 둘을 같은 값으로 설정할 것을 권장합니다.
또한 데이터를 수집하는 source가 2개이므로, job_name에 'statsd-exporter'와 'postrgres_exporter' 를 각각 추가해 주었습니다.
아래 static_config에는 각 source의 ip:port를 추가해주고 부가적으로 label 이름을 달아주면 prometheus와 이후 grafana에서 airflow라를 이름으로 필터링이 가능합니다.
다음으로 prometheus docker가 날라갈 경우를 대비해 데이터를 저장해 둘 volume을 생성합니다.
3. docker volume 생성
sudo docker volume create prometheus_vol
그리고 마지막으로 prometheus를 docker로 실행합니다.
4. prometheus docker run
docker run prometheus_img --restart=always --name prometheus \ -v prometheus_vol:/prometheus \ -p 9090:9090 \ --config.file=/opt/prometheus.yml \ --storage.tsdb.retention.time=100d \ --storage.tsdb.retention.size=60GB
위에서 만들었던 prometheus_img를 사용하여 자동 재실행되는 'prometheus'라는 이름의 docker를 뛰워주고,
'promethues_vol' 이름으로 만들었던 docker volume을 사용하여 해당 컨테이너의 /prometheus 경로에
같은 데이터를 공유하게 설정합니다.
포트번호는 9090으로 접속가능하게 하고,
마지막으로 config file에 위에서 생성한 prometheus.yml 파일 경로를 추가합니다.
* 추가적으로 prometheus 실행 이후, 메모리가 빠르게 차 ec2 서버가 다운된적이 있었습니다.
따라서 향후 메모리 부족 사태를 방지하고자 아래와 같은 옵션 2가지를 추가했습니다.
- --storage.tsdb.retention.time: 이전 데이터 삭제 주기를 말합니다. 100일 전 데이터 지우도록 설정함.
- --storage.tsdb.retention.size: 데이터 최대 용량 보유를 말합니다. 오래된 데이터부터 삭제되므로 60GB로 설정함. (참고로 B, KB, MB, GB, TB, PB, EB 단위를 다 지원함)
이제 prometheus를 실행한 서버 또는 localhost:9090으로 들어가 target source의 상태 체크를 할 수 있습니다.
Status> Targets를 클릭해 들어가보면,
이렇게 State:up으로 나오며 매트릭 수집 타겟 서버들과 잘 연동된 것을 확인할 수 있습니다.
물론 저는 ALB와 Target Group, security group 등 port 관련 설정들을 해주었습니다.
이제 마지막 단계인 Grafana 대시보드 생성과 alert 기능까지 연동해보겠습니다!
당신이 어떤 것을
할머니에게 설명해주지 못한다면,
그것은 진정으로 이해한 것이 아니다.
- A.Einstein