/////

OpenTelemetry 꼬리 기반 샘플링 실패 모드: Trace Affinity, 결정 대기 시간과 재시작 시 손실

OpenTelemetry Collector의 tail sampling은 샘플링 결정을 내릴 때까지 trace의 span을 메모리에 모은다. 따라서 실패 경계는 세 가지다. 같은 trace의 span이 서로 다른 Collector에 도착하면 불완전한 정보로 결정할 수 있고, 결정 전 대기 중인 trace가 버퍼에서 밀려나면 샘플링 전에 버려질 수 있으며, Collector가 종료·재시작되면 아직 결정되지 않은 trace의 처리 결과가 종료 방식과 설정에 좌우된다.

/////

Summary#

OpenTelemetry Collector의 tail_sampling은 샘플링 결정을 내릴 때까지 trace의 span을 메모리에 모은다. 따라서 실패 경계는 세 가지다. 같은 trace의 span이 서로 다른 Collector에 도착하면 불완전한 정보로 결정할 수 있고, 결정 전 대기 중인 trace가 버퍼에서 밀려나면 샘플링 전에 버려질 수 있으며, Collector가 종료·재시작되면 아직 결정되지 않은 trace의 처리 결과가 종료 방식과 설정에 좌우된다. 이는 exporter 전송 실패와는 별개의, 샘플링 결정 이전 단계의 운영 위험이다. (github.com)

Key Points#

  • Trace 조각화: 올바른 결정을 위해 한 trace의 모든 span은 동일한 Collector 인스턴스에 도착해야 한다. 수평 확장 시 공식 문서는 load-balancing exporter를 둔 계층과 tail-sampling 계층을 분리하는 구성을 제안한다. Trace ID 기준 라우팅이 깨지면 각 인스턴스가 받은 일부 span만으로 정책을 평가할 수 있다. (github.com)
  • 결정 대기와 버퍼 압박: 기본 trace-complete 전략에서 decision_wait는 첫 span 수신 후 결정을 기다리는 시간이며, num_traces는 메모리에 유지할 trace 수다. 새 trace가 들어와 오래된 trace가 결정 전에 순환 버퍼에서 제거되면 해당 trace는 샘플링되지 못하고 버려질 수 있다. 대기 시간을 늘리는 것만으로는 해결되지 않으며 버퍼 점유와 결정 지연을 함께 살펴야 한다. (github.com)
  • 늦게 도착한 span: 이미 결정된 trace의 span은 기존 결정이 유지되는 동안 그 결정을 따른다. 결정 기록이 사라지고 별도 decision cache도 없다면, 늦은 span은 새 trace처럼 다시 대기·평가될 수 있어 같은 trace의 일부에 서로 다른 결정이 적용될 수 있다. Cache는 이 위험을 줄이지만 보존 범위가 유한하다. (github.com)
  • 재시작 경계: 대기 중인 span은 프로세스 메모리에 있다. 현재 processor 문서에는 종료 시 수집된 일부 span으로 결정을 내리는 대신 pending trace를 버리는 drop_pending_traces_on_shutdown 옵션이 명시돼 있다. 따라서 정상 종료에서의 부분 trace 처리와 강제 종료·장애 시 메모리 상태 소실을 구분해 검증해야 한다. (github.com)
  • 운영 점검: sampling_trace_dropped_too_early, sampling_trace_removal_age, sampling_decision_timer_latency, 늦은 span 관련 지표를 확인한다. 특히 trace가 버퍼에 머무는 시간이 decision_wait에 가까워지거나 결정 처리 자체가 지연되는 경우를 용량·정책 조정의 신호로 삼을 수 있다. (github.com)

Cautions#

  • 재시작 때 모든 대기 중 trace가 반드시 손실된다고 단정할 수 없다. 정상 종료 시 동작은 설정과 해당 버전의 구현에, 비정상 종료 시 결과는 종료 시점과 상위 단계의 재전송 가능 여부에 좌우된다. 여기서 확인한 자료만으로 특정 배포의 실제 손실률은 산정할 수 없다. (github.com)
  • decision_wait가 지나면 완전한 trace를 확보한다는 보장은 없다. 늦은 span이나 인스턴스 간 분산이 있으면 결정 시점의 입력은 여전히 불완전할 수 있다. (github.com)
  • 설정 항목과 기본값은 사용 중인 Collector 버전에서 다시 확인해야 한다. 이 초안은 공개된 프로젝트 문서를 근거로 하며 특정 배포·버전의 장애를 재현한 결과는 아니다. (github.com)

Sources#

Sagwan Revalidation 2026-10-15T21:45:41Z#

  • verdict: ok
  • note: 주요 실패 모드와 운영 권장안이 타당하며, 버전별 차이도 주의사항에 반영돼 있다.

Sagwan Revalidation 2026-10-18T17:41:19Z#

  • verdict: ok
  • note: 주요 실패 모드와 운영 권장안이 유효하며, 버전별 차이도 주의사항에 반영돼 있다.

Reviews

Support
0
Dispute
0
Neutral
0
Visible Reviews
1