클라우드 및 인프라

Prometheus(프로메테우스)

작은소행성☄️ 2025. 2. 8. 14:52
728x90

모니터링의 필요성 

현대의 소프트웨어 시스템은 복잡한 분산 아키텍처를 기반으로 운영이 되는데

대규모 서비스의 경우, 애플리케이션 성능, 장애 감지, 리소스 사용량 최적화가 필수적이다.

모니터링이 없으면 장애 발생 시 문제의 원인을 찾기 어려우며, 성능 저하를 미리 감지하지 못할 수 있기 때문이다.

이러한 문제를 사전에 감지하고 대응하기 위해 모니터링 시스템이 도입 되어야 한다. 

 

Prometheus 

Prometheus(프로메테우스)는 시스템으로부터 각종 모니터링 지표(metrics)를 수집하여 저장하고 검색할 수 있는

오픈소스 모니터링 및 알림 시스템이다. 

 

https://prometheus.io/docs/introduction/overview/

특징 

  • 시계열 데이터(Time-Series Data) 기반의 모니터링 시스템 
  • PromQL(Prometheus Query Language) 를 활용한 강력한 데이터 분석 기능 
  • Pull 방식의 메트릭 수집
  • Alertmanagner를 이용한 알림 시스템 연계 
  • Grafana 연동을 통한 시각화 지원 

 

주요 컴포넌트 

Prometheus Server 

  • 모니터링 대상(target) 에서 메트릭으르 수집해 저장한다. 
  • PromQL을 이용해 데이터 분석 및 질의를 수행한다. 

Exporter

  • 시스템의 메트릭을 노출하는 모듈이다.

Pushgateway 

  • Metrics 수집을 위한 push 기반 컴포넌트이다. 

AlertManager

  • 특정 조건에 따라 알림을 트리거해 Slack, Email 로 알림을 전송한다. 

Grafana 

  • Prometheus 데이터를 시각화 하는 대시보드 도구이다. 

 

 

 

Prometheus 데이터 수집 방식 

prometheus 는 기본적으로 pull 방식을 사용해 데이터를 수집한다. 

  • pull 방식 
    • prometheus 서버가 설정된 타겟에 접근해 메트릭을 가져옴 
    • 메트릭 엔드포인트 (/metrics) 을 통해 데이터 제공
  • push 방식 (Pushgateway 필요)
    • Pushgateway 애플리케이션을 사용해 메트릭 전송 
    • 배치잡(Batch Jobs) 같은 단기 실행 작업 모니터링에 활용

 

주요 개념 및 용어

Metric (메트릭)

시스템 상태를 나타내는 측정값으로 프로메테우스의 수집 기본 단위로 서버의 상태를 측정한 항목이나 지표이다. 

메트릭에서 제공하는 정보로는 CPU, 사용량, 메모리 사용량, HTTP 요청 수 등이 있다. 

메트릭을 수집하는데에는 4가지 유형으로 구분된다. 

  • Counter (카운터) : 증가하는 값 (HTTP 요청 수, 에러 발생 수) 
  • Guage (게이지) : 증가 및 감소할 수 있는 값 (메모리 사용량, CPU 사용량) 
  • Histogram (히스토그램) : 분포를 측정하는 값 (요청 처리 시간)
  • Summary (서머리) : 히스토그램과 유사하지만 백분위 수를 제공하는 값 

 

PromQL 

Prometheus Query Language 로 수집된 데이터를 조회하고 분석할 수 있다. 

PromQL 을 활용하면 특정 시점의 데이터 조회, 시간별 변화율 계산, 백분위수 분성 등이 가능하다. 

쿼리를 활용해 프로메테우스엥서 수집한 데이터를 보다 효과적으로 분석이 가능하고 실제 운영 환경에서 장애를 미리 감지할 수 있다. 

 

예제

  • 전체 HTTP 요청 수 조회
http_requests_total

 

  • 응답 시간이 1초 이상인 요청 수 
histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))

 

  • 특정 서비스(API)의 트래픽이 급증한 경우 탐지 (최근 5분 동안 HTTP 요청 수가 1000개 이상 증가한 경우)
increase(http_requests_total[5m]) > 1000

 

 

728x90
반응형