Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

트레이스 샘플링

처리량이 높은 서비스는 초당 수백만 개의 스팬을 생성할 수 있습니다. 모든 스팬을 저장하는 데는 비용이 많이 들기 때문에, 팀에서는 일반적으로 OpenTelemetry Collector의 tail-sampling 프로세서를 사용해 N개 중 1개의 스팬만 유지합니다. 유지된 각 스팬에는 N을 기록하는 SampleRate 속성이 포함됩니다.

데이터가 샘플링되면 단순 집계는 잘못된 결과를 냅니다. count()는 실제 발생한 이벤트보다 N배 적은 값을 반환하고, sum()avg()는 편향되며, 백분위수도 달라집니다. 그 결과 대시보드에는 요청 수, 처리량, 오류율이 실제보다 낮게 표시되어 잘못된 인상을 줄 수 있습니다.

ClickStack은 샘플링을 고려하는 쿼리 엔진으로 이 문제를 해결합니다. 트레이스 소스에 샘플 비율 표현식을 설정하면, 쿼리 빌더가 SQL 집계를 재작성해 각 스팬에 샘플 비율에 따른 가중치를 적용합니다. 이 방식은 대시보드, 알림, 애드혹 검색 전반에 걸쳐 적용됩니다.

작동 방식

트레이스 소스에 sampleRateExpression이 구성되면 ClickStack은 이를 다음과 같이 래핑합니다:

greatest(toUInt64OrZero(toString(expr)), 1)

SampleRate 속성이 없는 스팬은 기본적으로 가중치 1로 처리되므로, 샘플링되지 않은 데이터는 원래 쿼리와 동일한 결과를 반환합니다.

그다음 쿼리 빌더는 집계를 다음과 같이 재작성합니다:

집계 이전 이후(샘플 보정 적용)
count count() sum(weight)
count + condition countIf(cond) sumIf(weight, cond)
avg avg(col) sum(col * weight) / sum(weight)
sum sum(col) sum(col * weight)
quantile(p) quantile(p)(col) quantileTDigestWeighted(p)(col, weight)
min / max 변경 없음 변경 없음
count_distinct 변경 없음 변경 없음

샘플 비율 표현식 설정하기

Source Settings에서 트레이스 소스를 열고, Sample Rate Expression 필드에 스팬별 샘플 비율을 계산하는 ClickHouse 표현식을 입력합니다.

예를 들어, OpenTelemetry tail-sampling 프로세서가 비율을 SpanAttributes['SampleRate']에 기록하는 경우:

ClickStack Source Settings의 Sample Rate Expression 필드

설정을 마치면 모든 차트, 대시보드, 알림, 서비스 대시보드 패널에 샘플 비율 가중 집계가 자동으로 적용됩니다. 개별 쿼리는 변경할 필요가 없습니다.

Navigation