APM 에이전트 샘플러는 주어진 서비스 내의 어떤 트랜잭션을 에이전트가 뉴렐릭으로 보낼지 제어합니다. 이 페이지에서는 적응형 및 트레이스 ID 비율 기반과 같은 샘플러 유형, 적응형 샘플링 타겟, 그리고 업스트림 샘플링 결정에 따라 샘플링을 설정하는 방법에 대해 다룹니다.
이 가이드의 설정 예제는 YAML 형식(자바 에이전트)을 사용합니다. 에이전트별 구문 및 전체 파라미터 참조는 다음을 확인하십시오:
adaptive_sampling_target은(는) 모든 컨텍스트에서 공유되며 기본 샘플링 타겟입니다. 컨텍스트는 자체적인 컨텍스트별 sampling_target(으)로 글로벌 adaptive_sampling_target을(를) 재정의할 수 있습니다.
adaptive_sampling_target은(는) 1에서 120 사이의 정수(포함)로 설정할 수 있습니다.
Configuration:
distributed_tracing:
sampler:
adaptive_sampling_target:10# Applied to all contexts without explicit override
root: adaptive
Result: 에이전트는 현재 서비스에서 시작되는 트랜잭션을 분당 약 10개 캡처하려고 시도합니다.
각 샘플링 컨텍스트는 자체 sampling_target을(를) 사용하여 글로벌 타겟을 재정의할 수 있습니다.
sampling_target은(는) 1에서 120 사이의 정수(포함)로 설정할 수 있습니다.
Configuration:
distributed_tracing:
sampler:
adaptive_sampling_target:10# Global default
root:
adaptive:
sampling_target:5# Overrides global default to capture 5 traces/min
Result: 에이전트는 현재 서비스에서 시작되는 트랜잭션을 분당 5개 캡처하려고 시도하며, 글로벌 기본값인 10을 재정의합니다.
적응형 샘플링 타겟을 늘려야 하는 이유
기본값인 10 트레이스/분은 분산 추적이 아닌 트랜잭션 추적을 위해 설계되었습니다. 분산 추적의 경우, 다음과 같은 이유로 더 높은 샘플링을 원하는 경우가 많습니다:
Fill service map gaps: 드문 엔드포인트는 10/min으로 절대 샘플링되지 않을 수 있습니다.
Improve trace diversity: 더 많은 트랜잭션 유형 및 코드 경로를 확인하십시오.
How it works: 트레이스 ID를 기반으로 트레이스의 고정된 비율을 샘플링합니다. 샘플링 결정은 트레이스 ID를 기반으로 하므로, 동일한 비율 샘플러와 APM 언어 에이전트를 사용하는 모든 서비스에서 동일한 트레이스에 대해 동일한 결정이 내려집니다.
When to use:
일관된 비율의 트래픽 샘플링이 필요한 경우입니다.
결정론적 샘플링(동일한 APM 언어 에이전트를 사용하는 모든 서비스에서 동일한 분산 트레이스가 샘플링됨)을 원하는 경우입니다.
업스트림 서비스에서 샘플링된 트랜잭션이 항상 샘플링되고 적응형 샘플링 타겟에 계산되지 않는 적응형 샘플러의 동작을 피하고자 합니다.
모든 trace_id_ratio_based 샘플러는 0.0(초과)과 1.0(이하) 사이의 ratio 소수값을 제공해야 합니다. ratio은(는) 캡처할 트레이스의 백분율을 지정합니다.
중요
trace_id_ratio_based 샘플러를 사용할 때 ratio 속성이 필요합니다. 비율이 설정되지 않은 경우, 대신 기본 적응형 샘플러가 사용됩니다.
Configuration:
distributed_tracing:
sampler:
root:
trace_id_ratio_based:
ratio:0.1# 10% of traces
Important characteristic: 트레이스 ID가 트레이스 샘플링 여부를 결정합니다. 여러 서비스가 동일한 비율과 언어 에이전트를 사용하는 경우, 동일한 트레이스에 대해 일관된 결정을 내립니다.
Example: 루트 분산 트레이스의 10%와 업스트림에서 샘플링된 분산 트레이스의 50%를 샘플링합니다:
distributed_tracing:
sampler:
root:
trace_id_ratio_based:
ratio:0.1
remote_parent_sampled:
trace_id_ratio_based:
ratio:0.5
How it works: 이 컨텍스트와 일치하는 모든 트랜잭션을 샘플링합니다.
When to use:
특정 컨텍스트(root, remote_parent_sampled, remote_parent_not_sampled)에 대한 완전한 트레이스 커버리지가 필요합니다
업스트림 서비스의 샘플링 결정을 따르거나 재정의하고자 합니다
Configuration:
distributed_tracing:
sampler:
remote_parent_sampled:
always_on # Capture all upstream-sampled traces
주의
always_on을(를) 사용하면 주어진 컨텍스트에 대한 모든 트랜잭션을 캡처하므로, 트래픽이 많은 서비스의 경우 상당한 데이터 볼륨이 생성될 수 있습니다.
How it works: 주어진 컨텍스트에 대해 트랜잭션을 전혀 샘플링하지 않습니다.
When to use:
샘플링하지 않겠다는 업스트림 서비스의 결정을 수용하고자 합니다
특정 컨텍스트에 대한 샘플링을 비활성화하려는 경우
Configuration:
distributed_tracing:
sampler:
remote_parent_not_sampled:
always_off # Don't sample if upstream did NOT sample
권장 설정
선택할 수 있는 샘플러가 너무 많아서 서비스에 적합한 설정을 찾기 어려울 수 있습니다. 적합한 설정을 찾는 가장 좋은 방법은 현재 서비스의 트레이스 분포를 관찰하고, 원하는 트레이스 분포를 향해 조금씩 조정하는 것입니다.
시작점으로 다음 설정을 권장합니다:
distributed_tracing:
sampler:
root:
trace_id_ratio_based:
ratio:0.1
remote_parent_sampled:
always_on
remote_parent_not_sampled:
always_off
이 설정은 root 컨텍스트에서 트레이스의 10%를 샘플링하고, remote_parent_sampled 컨텍스트에서는 모든 트레이스를 샘플링하며, remote_parent_not_sampled 컨텍스트에서는 트레이스를 샘플링하지 않습니다.
일부 애플리케이션의 경우, 이 설정은 트레이스의 균형 잡힌 분배를 위한 합리적인 출발점입니다. 다른 애플리케이션의 경우 — 예를 들어 대부분의 트레이스가 업스트림 서비스에서 시작되는 경우 — 이 설정은 remote_parent_sampled 트레이스의 우선순위를 너무 높이고 root 트레이스의 우선순위를 너무 낮출 수 있습니다. 이 경우, 업스트림에서 샘플링된 트레이스의 일정 비율만 캡처하도록 remote_parent_sampled 설정을 수정해 보십시오:
distributed_tracing:
sampler:
root:
trace_id_ratio_based:
ratio:0.1
remote_parent_sampled:
trace_id_ratio_based:
ratio:0.2# Sample 20% of sampled traces originating upstream, instead of all of them