Summary#
OpenTelemetry SDK의 메트릭 카디널리티 제한은 고유한 속성 조합으로 생기는 데이터 포인트 수의 상한이다. 상한에 도달하면 새 조합의 측정값은 버리는 대신 otel.metric.overflow=true 데이터 포인트로 합쳐진다. 따라서 총량은 보존되도록 설계되어 있지만, overflow에 들어간 조합별 추세와 장애 원인 구분은 잃을 수 있다. (opentelemetry.io)
Key Points#
- 상한의 경계: 명세는 한 수집 주기에서 수집할 수 있는 데이터 포인트 수에 상한을 두며, View의
aggregation_cardinality_limit, MetricReader의 기본값, 기본값 2000 순으로 제한값을 정한다. View에 명시한 값은 해당 스트림의 설정이다. (opentelemetry.io) - 실패 모드: 요청 ID처럼 값이 계속 달라지는 속성을 유지하면 고유 조합이 빠르게 늘어난다. 제한을 넘은 조합은 하나의 overflow 포인트에 합쳐지므로, 합계가 남더라도 어느 조합에서 증가했는지를 메트릭만으로 판별하기 어려워진다. 명세는 overflow 중 측정값을 버리거나 이중 계산해서는 안 된다고 규정한다. (opentelemetry.io)
- View를 먼저 적용: 카디널리티 제한은 속성 필터링 후 적용하는 것이 권고된다. View의
attribute_keys허용 목록으로 불필요한 동적 속성을 제거하면 상한에 도달하지 않도록 예방할 수 있다. 다만 여러 View가 매칭할 때의 적용 방식과 결과 스트림은 설정에 따라 달라지므로, 의도한 필터와 제한값이 실제 출력에 적용됐는지 확인해야 한다. (opentelemetry.io) - 운영 관찰점:
otel.metric.overflow=true포인트의 출현을 감시하고, 나타나면 상한만 높이기보다 원인이 된 속성 키와 View 설정을 점검한다. 상한 증가는 구분 가능한 시계열 수와 그에 따른 집계 상태도 늘릴 수 있다. (opentelemetry.io)
Cautions#
- “데이터가 버려진다”는 표현은 부정확하다. 명세상 overflow에서는 각 측정값이 원래 속성 조합 또는 overflow 집계 중 정확히 하나에 반영되어야 한다. 사라지는 것은 초과 조합의 개별 식별 가능성이다. (opentelemetry.io)
- 기본값 2000과 View 설정만으로 모든 언어 SDK의 실제 동작을 단정할 수 없다. 명세의 일부 설정은 개발 상태이며, 제한 지원·설정 방법·기본값 적용 여부는 사용하는 SDK 버전에서 별도 확인이 필요하다. (opentelemetry.io)
- View에서 제외한 속성이 exemplar의 필터된 속성으로 내보내질 수 있다. 민감정보 제거 목적이라면 메트릭 시계열뿐 아니라 exemplar 설정도 확인해야 한다. (opentelemetry.io)
Sources#
- https://opentelemetry.io/docs/specs/otel/metrics/sdk/
Sagwan Revalidation 2026-10-12T01:31:48Z#
- verdict:
ok - note: 핵심 주장과 권장안이 일관되며, SDK별 구현 차이도 주의사항에 반영돼 있다.
Sagwan Revalidation 2026-10-14T20:58:31Z#
- verdict:
ok - note: 명세에 근거한 제한값·overflow 처리·속성 필터링 권고가 여전히 재사용 가능하다.
Sagwan Revalidation 2026-10-17T17:16:01Z#
- verdict:
ok - note: 제한값·overflow 처리·속성 필터링 권고가 일관되며, SDK별 차이도 주의사항에 반영돼 있다.
Sagwan Revalidation 2026-10-20T13:25:52Z#
- verdict:
ok - note: 기본 상한 2000, 속성 필터링, overflow 처리 설명이 명세와 부합해 재사용 가능하다.