이번에 AWS 인프라로 구성된 데이터 엔지니어링 프로젝트를 진행하면서, 발생한 Monitoring 서버 미작동에 대한 부분을 트러블 슈팅한 내용에 대해서 기술해보려고 합니다!
목적은 Airflow Main(Scheduler + Webserver), Airflow Worker. 2대의 서버의 리소스와 Airflow 관련 리소스를 확인할 수 있는 프로메테우스 + 그라파나로 구성된 모니터링 서버 구축입니다!
카테고리 설정이 애매해서 우선 제대로 설정된 부분에 대해서도 파트별로 트러블슈팅 일지에 작성하도록 하겠습니다!
Monitoring 서버 구축
더보기
1) Monitoring 서버에 Prometheus 설치
Prometheus는 데이터를 수집하고 저장하는 도구로, Airflow 서버 상태를 주기적으로 확인
- Prometheus는 공식 GitHub에서 다운로드
# 파일 다운로드
cd ~
curl -LO <https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz>
# 압축 해제
tar -xvf prometheus-2.45.0.linux-amd64.tar.gz
# 압축 해제된 파일을 시스템 폴더로 이동
sudo mv prometheus-2.45.0.linux-amd64 /usr/local/prometheus
- Prometheus 권한 부여
sudo chmod +x /usr/local/prometheus/prometheus
sudo chmod +x /usr/local/prometheus/promtool
2) Prometheus 설정 & 시스템 파일 작성
2-1. Prometheus 설정 파일 생성
monitor 서버에서 설정 파일 작성
# 설정 파일 열기
sudo nano /usr/local/prometheus/prometheus.yml
- 설정 파일 내용 작성
- Prometheus 설정 파일에 Airflow 서버를 연결하려면,
- Airflow 서버에서 Prometheus Exporter를 통해 메트릭 데이터를 수집하도록 설정해야 함
- 이후 Prometheus 설정 파일에 Airflow 서버의 IP 주소를 추가하면 됨
global:
scrape_interval: 15s # 기본 수집 간격을 15초
evaluation_interval: 15s # 규칙 평가 간격
scrape_configs:
# 기존 Prometheus 설정 (유지)
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
# Airflow Main 서버 설정
- job_name: "airflow-main"
static_configs:
- targets: ["ip:port"]
# Airflow Worker 서버 설정
- job_name: "airflow-worker"
static_configs:
- targets: ["ip:port"]
- 설정 구조
- Prometheus는 Scrape Target을 통해 메트릭 데이터를 수집
- 설정 파일에서 중요한 부분은 scrape_configs
- Prometheus가 데이터를 수집할 수 있도록 targets에 main, worker IP 주소 추가
- job_name: 메트릭 데이터를 수집할 대상 그룹에 대한 이름
- static_configs: 메트릭 데이터를 가져올 서버(IP:포트) 목록
- targets: 메트릭 데이터를 수집할 서버의 IP 주소와 포트를 설정
2-2. Prometheus 시스템 서비스 파일 생성
- 파일 생성
sudo nano /etc/systemd/system/prometheus.service
- 파일 내용 작성
- 파일에 대한 권한 설정
[Unit]
Description=Prometheus Monitoring
# 실행되기 전 네트워크 연결이 필요
Wants=network-online.target
# 네트워크가 온라인 상태가 된 후에 이 서비스를 실행하겠다는 설정
After=network-online.target
[Service]
User=ubuntu
# Prometheus 실행 명령어
# --config.file로 Prometheus 설정 파일 경로를 지정
#ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus
ExecStart=/usr/local/prometheus/prometheus \
--config.file=/usr/local/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus
Restart=always
[Install]
WantedBy=multi-user.target
sudo chmod +x /usr/local/prometheus/prometheus
sudo chmod 644 /usr/local/prometheus/prometheus.yml
# +x: 파일을 실행할 수 있게 허락.
# 644: 설정 파일을 읽을 수 있게 허락.
2-3. Prometheus 실행
- Prometheus 서비스 시작 및 확인
sudo systemctl daemon-reload
sudo systemctl start prometheus
# Prometheus 서비스를 시스템 시작 시 자동으로 실행되도록 설정하는 명령
sudo systemctl enable prometheus
# 실행 확인
sudo systemctl status prometheus
2-4. ec2 서버에 포트 열기
- ec2- 인바운드 규칙 - 9090포트 설정
2-5. Prometheus 브라우저 확인
- URL: http://<monitor-public-ip>:9090
3) Monitoring 서버에서 Grafana 설치
3-1. Grafana 설치
- Grafana 저장소 추가
sudo apt-get install -y software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
2. Grafana 설치
sudo apt-get update
sudo apt-get install -y grafana
3. Grafana 서비스 실행 및 확인
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
# 실행 상태 확인
sudo systemctl status grafana-server
4. 브라우저 확인:
- URL: http://<monitor-public-ip>:3000
- 기본 로그인 정보:
- ID: admin
- PW: admin (로그인 후 비밀번호 변경 요청)
3-2. grafana에서 prometheus 연결
connections → Data Sources → prometheus
- name : prometheus
- HTTP
- URL: (public_IPv4_DNS):9090/
- 나머지는 기본 설정으로 두고, Save & test
home→ Dashboard → Import a dashboard
- 아래 URL에 있는 json 파일 다운로드 해서 import https://github.com/noseka1/monitoring-apache-airflow-using-prometheus/blob/master/airflow_grafana_dashboard.json
'TroubleShooting' 카테고리의 다른 글
[TroubleShooting] Airflow EC2 Monitoring 서버 구축기 - 2 (0) | 2024.12.27 |
---|