> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wandb.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Weave Self-Managed의 ingest sampling 구성

> Self-Managed Weave 인스턴스에서 저장소 및 LLM 점수화 비용을 제어할 수 있도록 수신되는 트레이스의 일부만 유지합니다

ingest 샘플링을 사용하면 [Self-Managed Weave 인스턴스](/ko/weave/guides/platform/weave-self-managed)에 들어오는 트레이스의 비율을 제어하고 나머지는 삭제할 수 있습니다. 지정한 비율의 트레이스만 유지하므로 트래픽이 많은 cluster의 저장소 및 처리 비용을 줄이는 데 도움이 됩니다.

이 가이드에서는 Self-Managed Weave 인스턴스에서 이 기능을 활성화하는 방법을 설명합니다.

<Note>
  ingest 샘플링을 사용하려면 sampler가 포함된 Weave server 버전이 필요합니다. `@weave.op` Call 샘플링을 사용하려면 Weave Python SDK 0.53.0 이상 또는 Weave TypeScript SDK 0.16.0 이상도 필요합니다. 에이전트 span에는 SDK 요구 사항이 없습니다. 자세한 내용은 [Requirements and limitations](#requirements-and-limitations)을 참조하세요.
</Note>

ingest 샘플링은 클라이언트 측 샘플링과는 별개입니다. `@weave.op` decorator의 `tracing_sample_rate` Parameter를 사용하면 개별 트레이스 함수가 자체 Call을 샘플링할 수 있지만, 배포 전체에는 server 측 비율만 적용되며 개별 클라이언트가 이를 변경하거나 무시할 수 없습니다. 자세한 내용은 [Control sampling rate](/ko/weave/guides/tracking/ops#control-sampling-rate)를 참조하세요.

<div id="why-use-ingest-sampling">
  ## ingest 샘플링을 사용하는 이유
</div>

기본적으로 Weave는 애플리케이션이 전송하는 모든 트레이스를 보관합니다. 하지만 처리량이 많아지면 전체 기록을 모두 유지하는 비용이 커질 수 있습니다. ingest 샘플링은 트레이스가 저장되거나 점수화되기 전에 서버에서 삭제하므로, 비용은 보관하는 트래픽 비율에 대체로 비례합니다.

ingest 샘플링 비율은 `0`에서 `1` 사이의 숫자로 설정합니다.

* `1.0`은 모든 트레이스를 보관하며 샘플링은 꺼집니다(기본값).
* `0.1`은 트레이스의 10%를 보관하고 나머지는 삭제합니다.
* `0.0`은 평가를 제외한 모든 트레이스를 삭제합니다.

<div id="what-ingest-sampling-applies-to">
  ## 수집 샘플링이 적용되는 대상
</div>

수집 샘플링은 두 종류의 트래픽에 적용되며, 설정한 비율은 두 경우 모두에 적용됩니다.

* **Traces** 탭에 표시되는 `@weave.op` 데코레이터의 Call
* 에이전트 트레이싱 엔드포인트(`/agents/otel/v1/traces`)로 전송되어 **Agents** 탭에 표시되는 에이전트 span. 자세한 내용은 [에이전트 트레이스하기](/ko/weave/guides/tracking/trace-agents)를 참조하세요.

다음 트래픽은 샘플링되지 않으며 항상 전체가 유지됩니다.

* Weave SDK의 Evaluation. Weave는 이를 의도적인 품질 측정으로 간주하며, 부분 데이터로 계산하면 점수가 잘못될 수 있으므로 이를 유지합니다.
* 자체 OpenTelemetry 도구를 사용해 원시 OTel 엔드포인트(`/otel/v1/traces`)로 전송한 트레이스. 원시 OpenTelemetry 트래픽에는 evaluation marker가 없으므로, 이를 샘플링하면 Evaluation이 조용히 누락될 수 있습니다. 자세한 내용은 [OpenTelemetry 트레이스를 Weave로 전송하기](/ko/weave/guides/tracking/otel)를 참조하세요.
* 지원되는 버전보다 이전 버전의 Weave SDK에서 발생한 Call. [요구 사항 및 제한 사항](#requirements-and-limitations)을 참조하세요.

<div id="how-it-works">
  ## 작동 방식
</div>

서버는 트레이스의 ID와 [결정적 해시 기반 샘플링](https://opentelemetry.io/docs/concepts/sampling/)을 사용해 어떤 트레이스를 드롭하고 어떤 트레이스를 유지할지 결정합니다. 트레이스에 동일한 `trace_id`를 가진 여러 Call이 포함되어 있으면, 해당 트레이스를 유지할지 드롭할지에 대한 서버의 판단은 동일한 트레이스 ID를 공유하는 중첩된 Call이나 span에도 적용됩니다. 트레이스는 전체가 유지되거나 전체가 드롭되며, 일부만 저장되지는 않습니다.

<Warning>
  이 판단은 비율이 고정되어 있을 때만 일관되게 유지됩니다. 비율이 변경되는 시점에 처리 중이던 트레이스는 그 변경을 기준으로 나뉠 수 있습니다. 트래픽이 적은 시간대에 샘플링 비율을 변경하세요.
</Warning>

<div id="configure-ingest-sampling">
  ## ingest 샘플링 설정
</div>

ingest 샘플링을 설정하려면 trace server 배포에 다음 환경 변수를 설정하세요. 예를 들어 Helm values를 통해 설정할 수 있습니다.

| 변수                            | 유형    | 기본값     | 의미                                                                |
| ----------------------------- | ----- | ------- | ----------------------------------------------------------------- |
| `WEAVE_INGEST_SAMPLE_RATE`    | float | `1.0`   | 유지할 트레이스의 비율입니다. 값이 잘못되었거나 범위를 벗어나면 기본값 `1.0`이 다시 적용됩니다.          |
| `WEAVE_INGEST_SAMPLE_DRY_RUN` | bool  | `false` | `true`이면 서버가 유지할지 드롭할지를 결정하고 드롭했을 개수도 집계하지만, 실제로는 아무것도 드롭하지 않습니다. |

유지하려는 트레이스 비율로 `WEAVE_INGEST_SAMPLE_RATE`를 설정하세요. 예를 들어 `0.1`로 설정합니다.

<div id="optional-preview-with-a-dry-run">
  ### 선택 사항: 드라이 런으로 미리 보기
</div>

드라이 런을 사용하면 실제로 아무것도 드롭하기 전에 샘플 비율의 영향을 미리 확인할 수 있습니다. 이때 출력되는 것은 서버의 샘플링 메트릭뿐이며, Datadog와 같은 메트릭 백엔드로 카운터 형태로 내보내집니다. 배포 환경에서 이러한 메트릭을 수집하지 않는다면 드라이 런은 눈에 보이는 효과가 없으므로, 이 단계를 건너뛰고 비율을 바로 설정해도 됩니다.

메트릭을 수집하고 있다면 `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에 해당합니다:

| Metric                                | 집계 대상                                |
| ------------------------------------- | ------------------------------------ |
| `ingest_sampling.seen.otel`           | 샘플러가 평가한 Call 레코드입니다.                |
| `ingest_sampling.evals_kept.otel`     | 유지된 Evaluation Call입니다.              |
| `ingest_sampling.dropped.otel`        | 드롭된 레코드입니다. `dry_run` 태그가 포함됩니다.     |
| `ingest_sampling.dropped_bytes.otel`  | 드롭된 바이트 수입니다. `dry_run` 태그가 포함됩니다.   |
| `ingest_sampling.unsupported.otel`    | 샘플링할 수 없을 만큼 오래된 클라이언트에서 들어온 트래픽입니다. |
| `ingest_sampling.parse_failures.otel` | 사용할 수 있는 트레이스 id 없이 수신된 메시지입니다.      |

다음 카운터는 에이전트 span에 해당합니다:

| Metric                                                    | 집계 대상                              |
| --------------------------------------------------------- | ---------------------------------- |
| `weave_trace_server.ingest_sampling.spans.seen`           | 샘플러가 평가한 span입니다.                  |
| `weave_trace_server.ingest_sampling.spans.evals_kept`     | 유지된 Evaluation span입니다.            |
| `weave_trace_server.ingest_sampling.spans.dropped`        | 드롭된 span입니다. `dry_run` 태그가 포함됩니다.  |
| `weave_trace_server.ingest_sampling.spans.dropped_bytes`  | 드롭된 바이트 수입니다. `dry_run` 태그가 포함됩니다. |
| `weave_trace_server.ingest_sampling.spans.parse_failures` | 사용할 수 있는 트레이스 id 없이 수신된 span입니다.   |

<div id="requirements-and-limitations">
  ## 요구 사항 및 제한 사항
</div>

ingest 샘플링을 활성화하기 전에 다음 요구 사항, 제한 사항 및 동작을 검토하세요.

* **SDK 버전 요구 사항**: 서버는 Weave Python SDK 0.53.0 이상 또는 Weave TypeScript SDK 0.16.0 이상의 Call만 샘플링합니다. 이러한 버전에는 서버가 트레이스의 메시지를 그룹화하고 evaluation Call을 인식하는 데 사용하는 시그널이 추가되었습니다. 이전 SDK의 Call은 샘플링되지도 않고 거부되지도 않으므로, 앱을 업그레이드하기 전까지는 설정한 비율이 해당 traffic에 영향을 주지 않습니다. 에이전트 span는 OpenTelemetry 프로토콜의 일부로 트레이스 ID를 포함하므로, 이를 샘플링하는 데는 SDK 버전 요구 사항이 없습니다.
* **서버 버전**: 에이전트 span 지원은 Call 지원 이후에 추가되었습니다. 이미 `1.0`보다 낮은 비율을 설정한 경우, 에이전트 span를 샘플링하는 서버 버전으로 업그레이드하면 동일한 비율로 agent traffic 샘플링이 시작됩니다.
* **절감 효과는 클라이언트 구성에 따라 달라집니다**: 이전 SDK의 traffic 및 원시 OpenTelemetry traffic처럼 샘플링되지 않는 traffic은 비용 절감으로 이어지지 않습니다. traffic의 상당 부분이 이러한 소스에서 오는 경우, 절감 효과는 비율이 시사하는 것보다 작습니다. 이를 먼저 측정하는 가장 좋은 방법은 드라이 런입니다.
* **모니터 및 점수화**: 드롭된 트레이스는 저장되지도 않고 점수화되지도 않습니다. traffic의 100%를 커버하는 monitor에 의존하는 경우, 샘플링을 활성화하기 전에 이 점을 고려하세요.
* **클라이언트에 드롭 시그널이 전달되지 않음**: 드롭된 트레이스는 일반적인 성공 Response를 받습니다. 클라이언트는 자신의 트레이스가 드롭되었다는 알림을 받지 않습니다.
