메트릭(Metrics) — 집계로 보는 시스템 지표

메트릭(Metrics) — 집계로 보는 시스템 지표

메트릭은 요청의 생명주기를 포착하고 요청 개별 조각에 컨텍스트를 주는 request tracing과 달리, 통계 정보를 '집계(aggregate)'의 형태로 제공하는 신호예요. 전체 응답 시간, 오류율, 리소스 사용량 같은 숫자 지표를 시간에 따라 수집해 시스템이 전반적으로 어떻게 움직이는지를 보여주죠. 그래서 '한 건의 요청이 어떻게 흘렀나'보다 '전체적으로 얼마나 잘 돌아가고 있나'를 볼 때 유용해요.

출처: https://opentelemetry.io/docs/concepts/signals/metrics/

본문

메트릭의 핵심은 **집계(aggregation)**와 카디널리티(cardinality) 관리예요.

집계(Aggregation)

요청 트레이싱이 개별 요청의 컨텍스트를 다루는 것과 달리, 메트릭은 수집한 측정값을 묶어 통계적으로 표현해요. 그 예로는 요청 대기 시간(latency) 분포, 초당 처리량(throughput), 큐 길이, CPU/메모리 사용량 같은 것들이 있어요.

카디널리티 한도(Cardinality limits)

메트릭 스트림별로 고유한 속성 조합의 최대 개수를 제한해 애플리케이션이 과도한 메모리·비용으로부터 보호되도록 해요. OpenTelemetry 메트릭 SDK는 기본 한도로 2000을 강제하며, 뷰(View)로 이 값을 재정의할 수 있어요.

한도는 모든 곳에 적용되지는 않아요. 속성은 그것이 설명하는 대상에 따라 제대로 배치되어야 해요.

  • Resource(리소스): 텔레메트리를 생성하는 엔티티 자체(예: 호스트, OS, Kubernetes 클러스터)를 설명
  • Instrumentation scope(계측 범위): 계측 라이브러리(계측하는 측)를 설명
  • 측정 속성(measurement attributes): 개별 측정값을 설명

이렇게 속성을 모델링하면 메트릭 카디널리티를 낮게 유지하면서도 적절한 컨텍스트를 담을 수 있어요.

언어 지원(Language Support)

메트릭은 OpenTelemetry 스펙에서 안정(stable) 신호로 분류돼요. 개별 언어별 Metrics API & SDK 구현 상태는 언어별 문서에서 확인할 수 있어요.

더 알아보기

  • 뷰(View): 메트릭의 집계·카디널리티를 재정의하는 메커니즘
  • 트레이스와의 차이: 요청 단위 vs 통계 집계의 차이를 트레이스 개념에서 비교
  • 스펙: 더 자세한 내용은 OpenTelemetry 메트릭 신호 스펙 참고