메인 콘텐츠로 건너뛰기
처리량이 높은 서비스는 초당 수백만 개의 스팬을 생성할 수 있습니다. 모든 스팬을 저장하는 데는 비용이 많이 들기 때문에, 팀에서는 일반적으로 OpenTelemetry Collector의 tail-sampling 프로세서를 사용해 N개 중 1개의 스팬만 유지합니다. 유지된 각 스팬에는 N을 기록하는 SampleRate 속성이 포함됩니다. 데이터가 샘플링되면 단순 집계는 잘못된 결과를 냅니다. count()는 실제 발생한 이벤트보다 N배 적은 값을 반환하고, sum()avg()는 편향되며, 백분위수도 달라집니다. 그 결과 대시보드에는 요청 수, 처리량, 오류율이 실제보다 낮게 표시되어 잘못된 인상을 줄 수 있습니다. ClickStack은 샘플링을 고려하는 쿼리 엔진으로 이 문제를 해결합니다. 트레이스 소스에 샘플 비율 표현식을 설정하면, 쿼리 빌더가 SQL 집계를 재작성해 각 스팬에 샘플 비율에 따른 가중치를 적용합니다. 이 방식은 대시보드, 알림, 애드혹 검색 전반에 걸쳐 적용됩니다.

작동 방식

트레이스 소스에 sampleRateExpression이 구성되면 ClickStack은 이를 다음과 같이 래핑합니다:
greatest(toUInt64OrZero(toString(expr)), 1)
SampleRate 속성이 없는 스팬은 기본적으로 가중치 1로 처리되므로, 샘플링되지 않은 데이터는 원래 쿼리와 동일한 결과를 반환합니다. 그다음 쿼리 빌더는 집계를 다음과 같이 재작성합니다:
집계이전이후(샘플 보정 적용)
countcount()sum(weight)
count + conditioncountIf(cond)sumIf(weight, cond)
avgavg(col)sum(col * weight) / sum(weight)
sumsum(col)sum(col * weight)
quantile(p)quantile(p)(col)quantileTDigestWeighted(p)(col, weight)
min / max변경 없음변경 없음
count_distinct변경 없음변경 없음
샘플링 시 분위수는 근사 T-Digest 스케치인 quantileTDigestWeighted를 사용합니다. 결과는 유사하지만 정확히 일치하지는 않습니다.

샘플 비율 표현식 설정하기

Source Settings에서 트레이스 소스를 열고, Sample Rate Expression 필드에 스팬별 샘플 비율을 계산하는 ClickHouse 표현식을 입력합니다. 예를 들어, OpenTelemetry tail-sampling 프로세서가 비율을 SpanAttributes['SampleRate']에 기록하는 경우: 설정을 마치면 모든 차트, 대시보드, 알림, 서비스 대시보드 패널에 샘플 비율이 반영된 집계가 자동으로 적용됩니다. 개별 쿼리는 변경할 필요가 없습니다.
마지막 수정일 2026년 6월 10일