Trace 샘플링 은 Cloud Trace에서 수집하는 요청 및 스팬을 결정하여 애플리케이션 성능 문제를 해결하는 데 충분한 데이터를 캡처하면서 스토리지 비용을 제어하고 할당량 내에서 유지할 수 있도록 지원합니다. 엔드 투 엔드 요청의 모든 스팬이 기록되면 trace가 완료됩니다. 하지만 높은 요청 볼륨을 관리하기 위해 분산 추적 시스템의 구성요소는 일반적으로 trace의 하위 집합만 샘플링하거나 상위 스팬의 샘플링 결정을 따릅니다.
샘플링은 컨텍스트 전파와 다릅니다. 샘플링은 구성요소가 스팬 데이터를 기록하는지 여부를 제어합니다. 반대로 컨텍스트 전파는 샘플링된 스팬을 함께 연결할 수 있도록 구성요소 간에 trace 식별자를 전달합니다.
샘플링 전략
샘플링 결정은 헤드 기반 또는 테일 기반일 수 있습니다. 헤드 기반 샘플링에서는 스팬을 처리하는 구성요소에서 요청을 수신할 때 샘플링 결정이 내려집니다. 테일 기반 샘플링에서는 전체 trace를 사용할 수 있을 때까지 샘플링 결정이 지연됩니다.
분산 추적 시스템 문서에서 '100% 샘플링'이라는 문구를 볼 수 있습니다. 이 문구는 trace 또는 구성요소에 적용될 수 있습니다. trace에 적용되면 모든 스팬이 샘플링되었거나 trace가 완료되었음을 의미합니다. 구성요소에 적용되면 구성요소가 처리하는 모든 스팬을 샘플링합니다.
헤드 기반 샘플링
헤드 기반 샘플러는 일반적으로 항상 스팬을 샘플링하거나 확률적 샘플링 전략을 사용하도록 구성됩니다.
항상 샘플 구성을 사용하면 trace 데이터를 처리하고 쓰는 구성요소가 모든 스팬을 샘플링합니다. 이상적으로는 모든 trace가 완료되면 오류 문제 해결에 필요한 정보를 얻을 수 있습니다. 하지만 항상 샘플 구성은 할당량 또는 스토리지 비용 한도를 초과하는 원인이 될 수 있습니다.
확률적 샘플링을 사용하면 모든 스팬이 샘플링되는 것은 아닙니다. 이 접근 방식의 실제 동작은 구성요소의 구현에 따라 다릅니다. 일부 구현에서는 모든 스팬이 샘플링될 확률이 동일합니다. 다른 구현에서는 상위 요소의 샘플링 결정이 스팬이 샘플링되는지 여부에 영향을 미칩니다.
trace에 모든 스팬이 포함되지 않을 수 있습니다. 확률적 샘플링을 사용하거나 할당량을 초과하거나 스팬을 처리하지만 샘플링하지 않는 구성요소를 사용하는 경우 불완전한 trace가 예상됩니다.
테일 기반 샘플링
Cloud Trace는 테일 기반 샘플링을 지원하지 않습니다. Cloud Trace로 데이터를 전송하는 구성요소에서 샘플링 결정을 내려야 합니다.
테일 기반 샘플링을 사용하는 경우 중간 서버를 사용하여 trace 데이터를 수신하고 샘플링 결정을 평가하고 샘플링된 스팬을 Trace로 전달할 수도 있습니다. 예를 들어 OpenTelemetry Collector와 함께 꼬리 샘플링 프로세서 를 사용해 지연된 샘플링 결정을 내릴 수 있습니다.
테일 샘플링을 사용하려는 경우 다음 사항을 고려하세요.
- 샘플링 결정을 내리기 전에 모든 스팬을 trace에 저장해야 합니다. 따라서 많은 양의 임시 스토리지가 필요하거나 다른 오버헤드가 발생할 수 있습니다.
- 일반적으로 trace의 스팬을 생성할 수 있는 모든 구성요소는 조정해야 합니다. 일반적으로 OpenTelemetry를 사용하는 개발자는 동일한 trace ID의 모든 스팬을 동일한 수집기로 라우팅합니다.
구성요소에서 샘플링 결정
각 구성요소는 처리 중인 스팬을 샘플링할지 여부에 대해 자체적으로 결정합니다. 하지만 trace 컨텍스트를 통해 구성요소에서 사용할 수 있는 상위 요소의 샘플링 결정은 구성요소의 결정에 영향을 미칠 수 있습니다.
traceparent 헤더를 사용하는 애플리케이션은 상위 요소의 샘플링
결정을 sampled 플래그를 사용하여 전달할 수 있습니다.
예를 들어 모든 구성요소에 '상위 스팬이 샘플링되면 현재 스팬을 샘플링하고 그렇지 않으면 스팬의 50% 를 샘플링한다'라는 규칙이 있다고 가정합니다. 이 시나리오에서는 다음 사항이 적용됩니다.
- 루트 스팬은 trace의 모든 스팬이 샘플링되는지 여부를 결정합니다.
- 루트 스팬이 샘플링되면 trace의 모든 스팬이 샘플링됩니다. 따라서 trace가 완료됩니다.
샘플링 및 Google Cloud 서비스
각 Google Cloud 서비스는 자체 샘플링 결정을 내리며, 모든 Google Cloud 서비스가 샘플링하는 것은 아닙니다. 즉, 서비스가 Cloud Trace로 데이터를 전송하지 않을 수 있습니다.
샘플링이a Google Cloud 서비스에서 지원되는 경우 일반적으로 서비스는 다음을 구현합니다.
- 기본 샘플링 레이트
- 스팬을 샘플링할지 여부에 대한 힌트로 상위 요소의 샘플링 결정을 사용하는 메커니즘
- 최대 샘플링 레이트
Google Cloud 서비스에서 샘플링 지원을 추가하도록 요청하려면 Google 문제 추적기를 사용하세요.
다음 단계
스팬 이름으로 샘플링 전략을 선택하는 방법에 대한 논의는 Jaeger 원격 샘플링을 참조하세요.
개발 중인 애플리케이션과 배포된 애플리케이션에 가장 적합한 샘플링 접근 방식을 결정하는 데 도움이 되도록 다음 오픈소스 문서를 검토하는 것이 좋습니다.
Google Cloud 서비스 문서: