지표 유형 이해하기

지표 유형 이해하기 (Understanding metric types)

프로메테우스의 네 가지 핵심 메트릭 타입(counter, gauge, histogram, summary)을 이해하기 위한 튜토리얼이에요. 각 타입이 무엇을 의미하고, 어떤 상황에서 쓰이며, 어떻게 선택해야 하는지를 실제 예시와 함께 설명해요. 메트릭을 계측(instrument)하려면 먼저 이 타입들을 제대로 알아야 하므로, 프로메테우스로 모니터링을 시작하는 사람에게 꼭 필요한 기본 개념이에요.

"몇 개가 쌓였는지" 세는 것과 "지금 얼마인지" 측정하는 것은 근본적으로 달라요. 이런 의미론적 차이가 바로 메트릭 타입의 핵심이에요. 네 가지 타입을 하나씩 뜯어보고, 각각 언제 써야 하는지 알게 될 거예요.

출처: 문서

본문

프로메테우스는 계측된 애플리케이션으로부터 요청 수, 대기열 크기, 지연 시간 같은 다양한 정보를 수집해요. 이 정보들을 표현하는 카테고리(타입)가 미리 정해져 있어요. 타입을 구분하는 이유는, 각각의 의미에 맞게 쿼리 함수나 집계 방식이 달라지기 때문이에요.

프로메테우스의 기본 메트릭 타입은 네 가지예요.

Counter (카운터)

Counter는 단조 증가하는 값, 즉 "누적된 횟수"를 나타내요. 요청 수, 처리된 작업 수, 에러 발생 횟수처럼 시간이 지나면서 증가만 하는 값을 셀 때 사용해요.

  • 값은 일반적으로 0에서 시작해 계속 증가해요
  • 서비스 재시작 등으로 리셋되면 0으로 돌아갈 수 있어요
  • 단순히 커지는 값이라서, 속도를 측정하려면 rate() 같은 함수로 "초당 증가량"을 계산해야 해요

예: 서버가 처리한 총 HTTP 요청 수

# TYPE http_requests_total counter
http_requests_total 1027

Counter는 어디서 멈췄는지보다 "얼마나 빠르게 증가하는지"가 의미가 있는 값이에요. 그래서 쿼리에서 보통 rate()increase()와 함께 사용해요:

rate(http_requests_total[5m])

Gauge (게이지)

Gauge는 증가·감소가 자유로운 "현재 값"을 나타내요. 온도, 현재 메모리 사용량, 대기열의 현재 항목 수, 활성 연결 수처럼 특정 순간의 수치를 표현할 때 사용해요.

  • 값이 올라갔다 내려갔다 할 수 있어요
  • 절대값 자체가 의미가 있어서 그대로 표시·비교하면 돼요

예: 현재 메모리 사용량(바이트)

# TYPE memory_usage_bytes gauge
memory_usage_bytes 573441024

Gauge는 min, max, avg 같은 집계 함수로 "얼마나 큰지/작은지"를 보는 데 적합해요.

Histogram (히스토그램)

Histogram은 이벤트 값의 분포를 측정해요. 예를 들어 HTTP 요청 처리 시간이 100ms, 200ms, 500ms에 어떻게 분포하는지 알 수 있어요.

히스토그램은 관측값을 미리 정한 버킷(bucket)에 나눠서 세어요. 각 버킷에는 누적 카운트가 저장되고, _bucket 접미사와 le(less than or equal) 레이블로 나뉘어요.

  • http_request_duration_seconds_bucket{le="0.1"}: 0.1초 이하로 걸린 요청 수
  • http_request_duration_seconds_sum: 관측값들의 총합
  • http_request_duration_seconds_count: 관측된 총 이벤트 수

히스토그램은 분포 자체를 알고 싶을 때 유용해요. 특히 **백분위수(percentile, quantile)**를 계산할 수 있어 큰 장점입니다. histogram_quantile() 함수로 95번째 백분위수 같은 값을 구할 수 있어요:

histogram_quantile(0.95, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))

여러 인스턴스의 히스토그램을 합쳐서 집계할 수 있다는 점이 summary와 다른 핵심 차이예요.

Summary (요약)

Summary도 요청 시간 같은 이벤트 분포를 측정해요. 다만 histogram과 달리 클라이언트(계측 쪽)가 미리 계산한 quantile 값을 제공해요.

  • myapp_request_duration_seconds_sum: 관측값 총합
  • myapp_request_duration_seconds_count: 관측된 이벤트 수
  • myapp_request_duration_seconds{quantile="0.95"}: 95번째 백분위수(클라이언트가 계산)

Summary는 quantile을 계측 쪽에서 미리 계산하므로 일정한 값처럼 보이지만, quantile은 서로 다른 인스턴스의 summary를 집합해서 다시 계산할 수 없어요. 집계가 불가능하다는 것이 큰 단점이에요.

그래서 일반적으로는 summary보다 histogram을 사용하는 것이 권장됩니다. 분포의 유연성, 집계 가능성 때문에요. summary는 히스토그램을 사용할 수 없는 특수한 경우에만 쓰는 것이 좋아요.

타입 요약 및 선택 가이드

  • 증가만 하는 누적 값 → Counter (예: 요청 수, 에러 수)
  • 자유롭게 오르내리는 현재 값 → Gauge (예: 메모리, 온도, 대기열 크기)
  • 분포를 알고 싶고, 집계·백분위수가 필요 → Histogram (예: 지연 시간 분포)
  • 분포가 필요하지만 클라이언트쪽 quantile이 꼭 필요한 경우 → Summary

이 튜토리얼에서는 프로메테우스의 네 가지 메트릭 타입과 각각의 사용 상황을 살펴봤어요.

더 알아보기 (Learn more)