본문 바로가기
클라우드/prometheus

📊 Prometheus 메트릭 타입, 완벽 정복 가이드!

by gasbugs 2025. 10. 11.

안녕하세요! 👋 오늘은 시스템 및 애플리케이션 모니터링의 필수 도구, Prometheus의 핵심 구성 요소인 메트릭 타입에 대해 쉽고 상세하게 알아보는 시간을 갖겠습니다. Prometheus를 처음 접하시는 분들도, 이미 사용하고 계신 분들도 이번 기회에 개념을 확실히 다져보세요! 🚀

 

시스템의 상태를 정확하게 파악하고 싶다면, 어떤 데이터를 어떻게 수집할지 결정하는 것이 매우 중요합니다. Prometheus는 이를 위해 4가지 핵심 메트릭 타입을 제공하는데요, 바로 카운터(Counter), 게이지(Gauge), 히스토그램(Histogram), 서머리(Summary)입니다. 각 타입이 어떤 특징을 가지고 있고, 언제 사용해야 하는지 지금부터 하나씩 파헤쳐 보겠습니다!


1. 카운터 (Counter) 📈: 오직 증가만 아는 숫자

카운터는 이름 그대로 누적되는 값을 기록하는 메트릭 타입입니다. 가장 큰 특징은 값이 오직 증가만 가능하다는 점입니다. 마치 자동차의 총주행거리 계기판처럼, 뒤로 가지 않고 앞으로만 나아가죠. 물론, 시스템이 재시작되면 0으로 초기화될 수는 있습니다.

  • 🤔 언제 사용할까요?
    • 웹 서버의 총 HTTP 요청 횟수
    • API 호출 성공 또는 실패 횟수
    • 작업 완료 건수
    • 에러 발생 총횟수
  • 예시: http_requests_total
    • 이 메트릭은 서비스가 시작된 이후 받은 모든 HTTP 요청의 총개수를 나타냅니다.
  • 💡 핵심 포인트!
    • 카운터 자체의 값보다는 시간에 따른 변화율(rate)을 계산해서 "초당 요청 수"와 같은 의미 있는 데이터를 추출하는 데 주로 사용됩니다. 이를 위해 PromQL의 rate()나 irate() 함수를 함께 사용하죠.

2. 게이지 (Gauge) 🌡️: 실시간 상태를 보여주는 온도계

게이지현재 상태의 측정값을 나타내는 메트릭 타입입니다. 카운터와 달리, 값이 증가할 수도 있고 감소할 수도 있습니다. 마치 온도계가 주변 온도에 따라 올라가고 내려가는 것과 같습니다.

  • 🤔 언제 사용할까요?
    • 현재 사용 중인 메모리 양
    • 활성화된 사용자 세션 수
    • 큐(Queue)에 쌓여있는 작업의 개수
    • CPU 사용률
  • 예시: memory_usage_bytes, cpu_temperature_celsius
    • memory_usage_bytes는 현재 애플리케이션이 사용하고 있는 메모리 양을, cpu_temperature_celsius는 현재 CPU의 온도를 나타냅니다. 이 값들은 수시로 변할 수 있습니다.
  • 💡 핵심 포인트!
    • 시스템의 현재 상태를 스냅샷처럼 파악하고 싶을 때 유용합니다.

3. 히스토그램 (Histogram) 📊: 데이터의 분포를 한눈에

히스토그램은 조금 더 복잡한 메트릭 타입으로, 관찰된 데이터의 분포를 측정합니다. 주로 요청 처리 시간(latency)이나 응답 크기(response size)와 같이, 값의 분포를 파악하는 것이 중요할 때 사용됩니다.

히스토그램은 데이터를 미리 정의된 여러 개의 버킷(bucket)에 나누어 담습니다. 예를 들어, 0.1초 이하, 0.5초 이하, 1초 이하 등으로 버킷을 나누고, 각 요청이 처리될 때마다 해당하는 버킷의 카운트를 1씩 증가시킵니다.

  • 🤔 언제 사용할까요?
    • API 요청의 응답 시간 분포
    • HTTP 요청의 크기 분포

히스토그램은 내부적으로 다음과 같은 여러 시계열 데이터를 만듭니다.

  • _bucket{le="<상한값>"}: 각 버킷의 상한값(le, less than or equal)보다 작거나 같은 값들의 누적 개수
  • _sum: 모든 관찰된 값의 총합
  • _count: 관찰된 이벤트의 총횟수
  • 예시: http_request_duration_seconds
    • 이 메트릭을 통해 "전체 요청의 95%가 몇 초 안에 처리되었는가?"와 같은 백분위수(percentile)를 계산할 수 있습니다.
  • 💡 핵심 포인트!
    • 여러 인스턴스에 걸쳐 데이터를 집계(aggregate)하고 백분위수를 계산하는 데 매우 유용합니다. 서버 측에서 PromQL의 histogram_quantile() 함수를 사용하여 유연하게 분위수 계산이 가능합니다.

4. 서머리 (Summary) 📝: 정확한 백분위수를 위한 요약본

서머리도 히스토그램과 마찬가지로 데이터의 분포를 측정하는 데 사용됩니다. 하지만 작동 방식에 중요한 차이가 있습니다. 서머리는 서버에서 백분위수를 계산하는 히스토그램과 달리, 클라이언트(애플리케이션) 측에서 직접 백분위수(quantile)를 계산하여 노출합니다.

  • 🤔 언제 사용할까요?
    • 응답 시간의 중앙값(50th percentile), 95th percentile, 99th percentile 등을 정확하게 알고 싶을 때

서머리는 다음과 같은 시계열 데이터를 만듭니다.

  • {quantile="<분위수>"}: 설정된 분위수에 해당하는 값
  • _sum: 모든 관찰된 값의 총합
  • _count: 관찰된 이벤트의 총횟수
  • 예시: http_request_duration_seconds (서머리 타입으로)
    • 이 메트릭은 http_request_duration_seconds{quantile="0.95"} 와 같이 직접적인 백분위수 값을 제공합니다.
  • 💡 핵심 포인트!
    • 클라이언트에서 직접 계산하므로 백분위수 값 자체는 매우 정확합니다. 하지만 여러 인스턴스의 데이터를 집계하여 평균을 내는 등의 연산이 불가능하다는 큰 단점이 있습니다. 따라서 대부분의 경우, 집계가 유연한 히스토그램 사용이 권장됩니다.

🧐 한눈에 보는 메트릭 타입 비교

메트릭 타입 특징 주요 사용 사례 PromQL 함수 예시
카운터 단조롭게 증가하는 누적 값 요청 횟수, 에러 수 rate(), increase()
게이지 오르내릴 수 있는 현재 값 메모리 사용량, CPU 온도 avg_over_time()
히스토그램 데이터 분포 (서버에서 분위수 계산) 응답 시간 분포, 요청 크기 histogram_quantile()
서머리 데이터 분포 (클라이언트에서 분위수 계산) 정확한 단일 인스턴스 분위수 직접 조회
 
 

결론

지금까지 Prometheus의 네 가지 핵심 메트릭 타입에 대해 알아보았습니다. 각 타입의 특징과 용도를 잘 이해하고 상황에 맞는 메트릭을 사용하는 것이 효과적인 모니터링 시스템을 구축하는 첫걸음입니다.

  • 단순 카운팅이 필요하면 카운터!
  • 현재 상태 값이 궁금하면 게이지!
  • 데이터 분포와 집계가 필요하면 히스토그램!
  • 정확한 개별 백분위수가 필요하다면 서머리!

이 가이드가 여러분의 Prometheus 여정에 도움이 되었기를 바랍니다! 😊

 

태그: Prometheus, Monitoring, Metric Types, Counter, Gauge, Histogram, Summary, Observability, DevOps