ingest 샘플링을 사용하려면 샘플러가 포함된 버전의 Weave 서버가 필요합니다.
@weave.op Call을 샘플링하려면 Weave Python SDK 0.53.0 이상 또는 Weave TypeScript SDK 0.16.0 이상도 필요합니다. 에이전트 span은 SDK 요구 사항이 없습니다. 자세한 내용은 요구 사항 및 제한 사항을 참조하세요.@weave.op 데코레이터의 tracing_sample_rate 매개변수를 사용하면 트레이싱되는 개별 함수가 자체 Call을 계속 샘플링할 수 있습니다. 하지만 배포 전체에 적용되며 개별 클라이언트가 변경하거나 무시할 수 없는 것은 서버 측 비율뿐입니다. 자세한 내용은 샘플링 비율 제어를 참조하세요.
ingest 샘플링을 사용하는 이유
기본적으로 Weave는 애플리케이션이 보내는 모든 트레이스를 보관합니다. 하지만 트래픽이 많아지면 전체 기록을 유지하는 데 비용이 많이 들 수 있습니다. ingest 샘플링은 트레이스가 저장되거나 점수가 매겨지기 전에 서버에서 트레이스를 삭제하므로, 비용은 보관하는 트래픽의 비율에 대략 비례합니다. ingest 샘플링 비율은0에서 1 사이의 숫자로 설정합니다.
1.0: 모든 트레이스를 보관하며 샘플링이 꺼집니다(기본값).0.1: 트레이스의 10%를 보관하고 나머지는 삭제합니다.0.0: 평가를 제외한 모든 트레이스를 삭제합니다.
ingest 샘플링이 적용되는 대상
ingest 샘플링은 두 가지 유형의 트래픽에 적용되며, 설정한 비율은 두 유형에 동일하게 적용됩니다.@weave.op데코레이터에서 생성된 Call. Traces 탭에 표시됩니다.- 에이전트 트레이싱 엔드포인트(
/agents/otel/v1/traces)로 전송된 에이전트 span. Agents 탭에 표시됩니다. 자세한 내용은 에이전트 트레이스하기를 참조하세요.
- Weave SDK에서 생성된 평가. 평가는 의도적으로 수행하는 품질 측정이며, 일부 데이터만으로 계산하면 점수가 부정확해지므로 Weave는 평가를 모두 보존합니다.
- 자체 OpenTelemetry 도구를 사용해 raw OTel 엔드포인트(
/otel/v1/traces)로 전송된 트레이스. raw OpenTelemetry 트래픽에는 평가 여부를 나타내는 마커가 없으므로, 이를 샘플링하면 평가가 경고 없이 누락될 수 있습니다. 자세한 내용은 OpenTelemetry 트레이스를 Weave로 전송하기를 참조하세요. - 지원 버전보다 이전 버전의 Weave SDK에서 생성된 Call. 요구 사항 및 제한 사항을 참조하세요.
작동 방식
서버는 트레이스 ID와 결정적 해시 기반 샘플링을 사용하여 어떤 트레이스를 삭제하고 어떤 트레이스를 유지할지 결정합니다. 트레이스에 동일한trace_id를 가진 Call이 여러 개 포함되어 있으면, 해당 트레이스의 유지 또는 삭제에 대한 서버의 판정은 같은 트레이스 ID를 공유하는 모든 중첩 Call 및 span에도 동일하게 적용됩니다. 트레이스는 항상 전체가 유지되거나 전체가 삭제되며, 일부만 저장되는 경우는 없습니다.
ingest 샘플링 설정
ingest 샘플링을 설정하려면 트레이스 서버 배포에 다음 환경 변수를 설정하세요. 예를 들어 Helm values를 통해 설정할 수 있습니다.WEAVE_INGEST_SAMPLE_RATE를 유지하려는 트레이스의 비율로 설정하세요(예: 0.1).
선택 사항: dry run으로 미리 보기
dry run을 사용하면 실제로 데이터를 삭제하기 전에 샘플링 비율의 효과를 미리 확인할 수 있습니다. dry run은 서버의 샘플링 메트릭만 출력하며, 이 메트릭은 카운터 형태로 Datadog 등의 메트릭 백엔드에 전송됩니다. 배포 환경에서 이러한 메트릭을 수집하지 않는다면 dry run을 실행해도 확인할 수 있는 결과가 없으므로, 이 단계를 건너뛰고 비율을 바로 설정해도 됩니다. 메트릭을 수집하고 있다면 하루 전체처럼 대표적인 피크 트래픽이 포함되는 기간 동안WEAVE_INGEST_SAMPLE_RATE=0.1 및 WEAVE_INGEST_SAMPLE_DRY_RUN=true로 실행하세요. 이를 통해 서버가 삭제할 트래픽의 양과 샘플링 대상이 아닌 트래픽의 양을 확인할 수 있습니다. 그런 다음 WEAVE_INGEST_SAMPLE_DRY_RUN=false로 설정하면 트레이스 삭제가 시작됩니다.
Call과 에이전트 span은 각각 별도의 카운터를 보고합니다. 두 카운터 세트는 집계 대상이 서로 다르므로 합산하면 안 됩니다. 각 카운터에는 엔드포인트를 식별하는 route 태그가 붙습니다. Call 카운터는 call 레코드를, 에이전트 카운터는 전체 트레이스가 아닌 span을 집계합니다. 따라서 각 세트 내의 비율은 트레이스 수가 아니라 메시지 양을 나타냅니다.
다음은 Call 관련 카운터입니다.
다음은 에이전트 span 관련 카운터입니다.
요구 사항 및 제한 사항
ingest 샘플링을 활성화하기 전에 다음 요구 사항, 제한 사항 및 동작을 검토하세요.- SDK 버전 요구 사항: 서버는 Weave Python SDK 0.53.0 이상 또는 Weave TypeScript SDK 0.16.0 이상에서 보낸 Call만 샘플링합니다. 이 버전부터 서버가 트레이스의 메시지를 그룹화하고 평가 Call을 인식하는 데 사용하는 시그널이 추가되었습니다. 이전 SDK에서 보낸 Call은 샘플링되지도 거부되지도 않으므로, 앱을 업그레이드하기 전까지는 샘플링 비율이 해당 트래픽에 적용되지 않습니다. 에이전트 span은 OpenTelemetry 프로토콜에 따라 트레이스 ID를 포함하므로, 에이전트 span 샘플링에는 SDK 요구 사항이 없습니다.
- 서버 버전: 에이전트 span 지원은 Call 지원보다 나중에 추가되었습니다. 비율을 이미
1.0미만으로 설정해 둔 경우, 에이전트 span을 샘플링하는 서버 버전으로 업그레이드하면 에이전트 트래픽도 같은 비율로 샘플링되기 시작합니다. - 절감 효과는 클라이언트 구성에 따라 다름: 이전 SDK나 raw OpenTelemetry 트래픽처럼 샘플링되지 않는 트래픽은 비용 절감에 기여하지 않습니다. 트래픽의 상당 부분이 이러한 소스에서 발생한다면 실제 절감 효과는 설정한 비율보다 작습니다. 먼저 dry run으로 이를 측정해 보는 것이 가장 좋습니다.
- 모니터 및 점수화: 삭제된 트레이스는 저장되지도, 점수화되지도 않습니다. 모니터가 트래픽 전체를 처리한다는 전제로 운영하고 있다면, 샘플링을 활성화하기 전에 이 점을 고려하세요.
- 클라이언트에 삭제 여부 미통지: 삭제된 트레이스도 정상적인 성공 응답을 받으며, 클라이언트에는 트레이스가 삭제되었다는 사실이 통지되지 않습니다.