IMG-LOGO
공지사항 :

Prometheus

lmkfox - 2025-03-04 07:15:37 32 Views 0 Comment

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는 빠르고 가벼운 모니터링 솔루션으로, 마이크로서비스 및 컨테이너 기반 인프라 모니터링에 가장 적합한 도구 중 하나이다.


댓글