Prometheus 상세 개요
Prometheus는 오픈 소스 시계열 모니터링 및 경고 시스템으로, 클라우드 및 마이크로서비스 환경에서 널리 사용된다. 2012년 SoundCloud에서 개발을 시작했으며, 현재 **Cloud Native Computing Foundation(CNCF)**에서 관리하고 있다.
1. 주요 특징
1.1 시계열(time-series) 데이터 저장
• Prometheus는 **시계열 데이터베이스(TSDB, Time Series Database)**를 사용하여 데이터를 수집하고 저장한다.
• 데이터는 메트릭(metric) 단위로 저장되며, 각 메트릭은 라벨(label) 을 사용하여 세부적으로 구분된다.
• 예제:
http_requests_total{method="GET", status="200"}
→ “GET 요청 중 상태 코드 200”인 요청 수를 저장.
1.2 Pull 방식 데이터 수집
• Prometheus는 Pull 방식으로 데이터를 수집한다.
• 모니터링 대상(Exporter)은 HTTP 엔드포인트(/metrics)를 제공하고, Prometheus가 주기적으로 요청을 보내 데이터를 가져온다.
1.3 다차원 데이터 모델(Label 기반)
• Prometheus는 라벨(Label) 시스템을 사용하여 데이터를 태그하고 필터링할 수 있도록 설계되었다.
• 예제:
cpu_usage{host="server1", region="us-east-1"}
1.4 강력한 쿼리 언어 (PromQL)
• Prometheus는 PromQL(Prometheus Query Language) 이라는 전용 쿼리 언어를 제공한다.
• 예제:
• rate(http_requests_total[5m]) → 최근 5분 동안의 HTTP 요청 증가율 계산.
• sum by (method) (rate(http_requests_total[5m])) → HTTP 요청을 method별로 그룹화하여 합산.
1.5 내장 알림 시스템 (Alertmanager 연동)
• Alertmanager와 통합하여 Slack, Email, PagerDuty 등으로 알림을 전송할 수 있다.
• 특정 조건(예: CPU 사용률 90% 이상)이 발생하면 자동으로 알림을 발송한다.
1.6 Service Discovery 지원
• Kubernetes, Consul, EC2, Docker Swarm 등의 서비스 디스커버리(SD) 를 지원하여, 수동으로 모니터링 대상 설정을 하지 않아도 자동 탐색이 가능하다.
2. Prometheus 아키텍처
2.1 주요 컴포넌트
Prometheus는 여러 개의 모듈로 구성되어 있다.
1. Prometheus Server: 메트릭을 수집하고 저장하는 핵심 모듈.
2. Exporter: 시스템, 애플리케이션에서 메트릭을 노출하는 모듈.
3. Pushgateway: Push 방식으로 데이터를 전송할 때 사용.
4. Alertmanager: 알람을 관리하고 Slack, Email 등으로 알림 전송.
5. Grafana: Prometheus 데이터를 시각화하는 대시보드 도구.
2.2 데이터 흐름
1. Exporter에서 /metrics 엔드포인트를 통해 메트릭을 노출.
2. Prometheus Server가 주기적으로 데이터를 수집(Pull 방식).
3. **저장소(TSDB)**에 시계열 데이터 저장.
4. PromQL을 이용해 데이터 조회 및 분석.
5. Grafana를 통해 시각화.
6. Alertmanager와 연동하여 임계값 초과 시 알림 전송.
3. Prometheus 사용 예제
3.1 Prometheus 설치 및 실행
# Prometheus 다운로드
wget https://github.com/prometheus/prometheus/releases/download/v2.44.0/prometheus-2.44.0.linux-amd64.tar.gz
tar -xvf prometheus-2.44.0.linux-amd64.tar.gz
cd prometheus-2.44.0.linux-amd64
# Prometheus 실행
./prometheus --config.file=prometheus.yml
3.2 기본 설정 파일 (prometheus.yml) 예제
global:
scrape_interval: 15s # 15초마다 데이터를 수집
scrape_configs:
- job_name: 'node_exporter' # 노드 익스포터 모니터링
static_configs:
- targets: ['localhost:9100']
3.3 Exporter 설정 (예: Node Exporter 설치)
# Node Exporter 다운로드 및 실행
wget https://github.com/prometheus/node_exporter/releases/latest/download/node_exporter-*.linux-amd64.tar.gz
tar -xvf node_exporter-*.linux-amd64.tar.gz
cd node_exporter-*
./node_exporter
• 실행 후, http://localhost:9100/metrics 에 접속하면 CPU, 메모리 등의 메트릭을 확인할 수 있다.
3.4 PromQL 예제
• 현재 CPU 사용률:
node_cpu_seconds_total{mode="user"}
• 특정 서버의 메모리 사용량:
node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100
4. Prometheus의 장점과 단점
4.1 장점
✅ 설정이 간단하고 가벼운 운영 가능
✅ 라벨(Label) 기반 데이터 모델로 유연한 필터링 가능
✅ Pull 방식으로 메트릭 수집 → 네트워크 오버헤드 감소
✅ PromQL을 사용한 강력한 쿼리 기능 제공
✅ Kubernetes, Docker, EC2 등과 연동하여 자동화 가능
4.2 단점
❌ 장기 데이터 저장 기능 부족 (외부 스토리지 필요)
❌ 보안 기능이 기본적으로 제공되지 않음 (TLS, 인증 설정 필요)
❌ 복잡한 분산 시스템 환경에서는 스케일링이 어려울 수 있음
5. Prometheus 활용 사례
① 서버 및 인프라 모니터링
• CPU, 메모리, 디스크 사용량, 네트워크 트래픽 모니터링.
• Linux 서버의 리소스 사용량 분석.
② Kubernetes 모니터링
• Kubernetes 클러스터 내 Pod, Node, 서비스 모니터링.
• kube-state-metrics, cAdvisor와 연동하여 상태 추적.
③ 애플리케이션 성능 모니터링
• 마이크로서비스의 HTTP 요청 수, 응답 시간, 오류율 모니터링.
• Go, Python, Java 등 다양한 언어에서 라이브러리 지원.
④ DevOps 및 CI/CD 파이프라인 모니터링
• 배포 빈도, 빌드 성공률, 테스트 실패율 추적.
6. 결론
Prometheus는 클라우드 네이티브 환경에서 모니터링을 위한 강력한 솔루션이다.
• Kubernetes, Docker 등의 환경에서 자동 확장 및 서비스 디스커버리가 가능하며, Pull 방식으로 네트워크 부담을 줄이고, PromQL을 통한 유연한 데이터 분석이 가능하다.
• 다만, 장기 데이터 저장 기능이 부족하여 Thanos, VictoriaMetrics 같은 외부 저장소와 함께 사용해야 한다.
Prometheus는 빠르고 가벼운 모니터링 솔루션으로, 마이크로서비스 및 컨테이너 기반 인프라 모니터링에 가장 적합한 도구 중 하나이다.