수집 메커니즘

수집 샘플링 규칙

애플리케이션이 생성한 스팬을 Datadog으로 전송(수집)할지 여부를 결정하는 메커니즘은 여러 가지가 있습니다. 이러한 메커니즘의 로직은 SDK 및 Datadog Agent에 있습니다. 구성에 따라 계측된 서비스가 생성한 트래픽의 전부 또는 일부가 수집됩니다.

각각의 수집된 스팬에는 고유한 수집 이유가 있고, 이는 이 페이지에서 설명하는 메커니즘 중 하나를 가리킵니다. 사용량 메트릭 datadog.estimated_usage.apm.ingested_bytes 및 datadog.estimated_usage.apm.ingested_spans는 ingestion_reason으로 태그가 지정됩니다.

각 수집 이유를 컨텍스트에서 조사하고 어느 구성 옵션에 집중해야 할지 알아보려면 Ingestion Reasons 대시보드를 사용하세요.

헤드 기반 샘플링

기본 샘플링 메커니즘을 _헤드 기반 샘플링_이라고 합니다. 트레이스를 유지할지 제거할지는 루트 스팬 시작 시에 결정되며, 이후 요청 컨텍스트의 일부분으로 다른 서비스에 전파됩니다(예: HTTP 요청 헤더).

결정이 트레이스 시작 시에 이루어지고 모든 부분으로 전달되기 때문에, 트레이스 전체가 유지되거나 제거됩니다.

헤드 기반 샘플링

헤드 기반 샘플링의 샘플링 속도는 다음의 두 곳에서 설정 가능합니다.

  • Agent 수준에서(기본값)
  • SDK 수준에서: 모든 SDK 메커니즘이 Agent 설정을 재정의합니다.

Agent 설정

ingestion_reason: auto

Datadog Agent는 트레이스의 루트에서 적용할 샘플링 속도를 SDK에 지속적으로 전송합니다. Agent는 전체적으로 초당 10개의 트레이스를 목표로 속도를 조정하며, 트래픽에 따라 서비스별로 분배합니다.

예를 들어, 서비스 A에 트래픽이 서비스 B보다 많은 경우, Agent가 A의 샘플링 속도를 조정해 A의 초당 트레이스를 7개 이하로 유지하고, 마찬가지로 B의 샘플링 속도를 조정해 B의 초당 트레이스를 3개 이하로 유지하여 초당 트레이스가 총 10개가 되도록 할 수 있습니다.

Remote Configuration

Agent의 샘플링 속도를 원격으로 구성하려면 Agent 버전 7.42.0 이상을 사용 중이어야 합니다. 시작하려면 Remote Configuration을 설정한 다음 Ingestion Control 페이지에서 ingestion_reason 파라미터를 구성하세요. Remote Configuration을 사용하면 Agent를 재시작하지 않고도 파라미터를 변경할 수 있습니다. 원격으로 설정한 구성이 datadog.yaml의 환경 변수와 설정을 포함한 로컬 구성보다 우선합니다.

로컬 구성

Agent 목표 초당 트레이스를 메인 구성 파일(datadog.yaml) 또는 환경 변수로 설정하세요.

@param target_traces_per_second - integer - optional - default: 10
@env DD_APM_TARGET_TPS - integer - optional - default: 10

참고:

  • Agent에서 설정한 초당 트레이스 샘플링 속도는 Datadog SDK에만 적용됩니다. OpenTelemetry SDK와 같은 다른 SDK에는 영향이 없습니다.
  • 목표는 고정된 값이 아닙니다. 실제로는 트래픽 급증 및 기타 요인에 따라 변동합니다.

Datadog Agent의 자동 샘플링 속도에 따라 샘플링된 트레이스의 스팬은 수집 이유 auto가 태그로 지정됩니다. 사용량 메트릭도 ingestion_reason가 태그로 지정됩니다. 이 기본 메커니즘을 사용하는 서비스는 Ingestion Control 페이지 Configuration 열에서 Automatic으로 레이블이 지정됩니다.

SDK 설정에서 사용자 지정 규칙

ingestion_reason: rule

더 세분화된 제어를 원하는 경우, SDK 샘플링 구성 옵션을 사용하세요.

  • 서비스 또는 리소스 이름별로 트레이스의 루트에 적용할 특정 샘플링 속도를 설정하여 Agent의 기본 메커니즘을 재정의합니다.
  • 초당 수집된 트레이스 수에 속도 제한을 설정하세요. 기본 속도 제한은 서비스 인스턴스당 초당 100개의 트레이스입니다. Agent의 기본 메커니즘을 사용하는 경우 속도 리미터는 무시됩니다.

참고: 샘플링 규칙도 헤드 기반 샘플링 제어 기능입니다. 서비스 트래픽이 구성된 초당 최대 트레이스 수보다 많은 경우, 트레이스가 루트에서 제거됩니다. 이는 불완전한 트레이스를 생성하지 않습니다.

환경 변수 또는 코드에서 직접 구성을 설정할 수 있습니다.

Remote Configuration

Java 애플리케이션에서는 버전 1.34.0부터 Ingestion Control 페이지 UI에서 서비스 및 리소스별 샘플링 속도를 설정하세요.

서비스 및 리소스별로 샘플링 속도를 원격으로 구성하는 방법에 관한 자세한 내용은 리소스 기반 샘플링 가이드를 참조하세요.

참고: 원격으로 설정된 구성이 로컬 구성보다 우선합니다.

로컬 구성

Java 애플리케이션에서는 DD_TRACE_SAMPLING_RULES 환경 변수를 사용해 서비스 및 리소스별(리소스별 샘플링의 경우 버전 v1.26.0부터) 샘플링 속도를 설정하세요.

예를 들어, 서비스 my-service에서 리소스 GET /checkout의 트레이스를 100% 캡처하고, 다른 엔드포인트의 트레이스를 20% 캡처하려면 다음과 같이 설정하세요.

# using system property
java -Ddd.trace.sampling.rules='[{"service": "my-service", "resource": "GET /checkout", "sample_rate":1},{"service": "my-service", "sample_rate":0.2}]' -javaagent:dd-java-agent.jar -jar my-app.jar

# using environment variables
export DD_TRACE_SAMPLING_RULES='[{"service": "my-service", "resource":"GET /checkout", "sample_rate": 1},{"service": "my-service", "sample_rate": 0.2}]'

서비스 이름 값은 대소문자를 구분하며 실제 서비스 이름의 대소문자와 일치해야 합니다.

환경 변수 DD_TRACE_RATE_LIMIT를 서비스 인스턴스당 최대 초당 트레이스 수로 설정하여 속도 제한을 구성하세요. DD_TRACE_RATE_LIMIT 값을 설정하지 않으면 초당 트레이스 100개의 제한이 적용됩니다.

참고: DD_TRACE_SAMPLE_RATE는 지원이 중단되었습니다. 대신 DD_TRACE_SAMPLING_RULES를 사용하세요. 예를 들어, 이미 DD_TRACE_SAMPLE_RATE를 0.1로 설정한 경우, 대신 DD_TRACE_SAMPLING_RULES를 [{"sample_rate":0.1}]로 설정하세요.

샘플링 제어에 관한 자세한 내용은 Java SDK 문서를 참조하세요.

Remote Configuration

Python 애플리케이션에서는 버전 2.9.0부터 서비스 및 리소스별 샘플링 속도를 Ingestion Control 페이지 UI에서 설정하세요.

서비스 및 리소스별로 샘플링 속도를 원격으로 구성하는 방법에 관한 자세한 내용은 리소스 기반 샘플링 가이드를 참조하세요.

참고: 원격으로 설정된 구성이 로컬 구성보다 우선합니다.

로컬 구성 Python 애플리케이션에서는 DD_TRACE_SAMPLING_RULES 환경 변수를 사용해 서비스 및 리소스별(리소스별 샘플링의 경우 버전 v2.8.0부터) 샘플링 속도를 설정하세요.

예를 들어, 서비스 my-service에서 리소스 GET /checkout의 트레이스를 100% 캡처하고, 다른 엔드포인트의 트레이스를 20% 캡처하려면 다음과 같이 설정하세요.

export DD_TRACE_SAMPLING_RULES='[{"service": "my-service", "resource": "GET /checkout", "sample_rate": 1},{"service": "my-service", "sample_rate": 0.2}]'

환경 변수 DD_TRACE_RATE_LIMIT를 서비스 인스턴스당 최대 초당 트레이스 수로 설정하여 속도 제한을 구성하세요. DD_TRACE_RATE_LIMIT 값을 설정하지 않으면 초당 트레이스 100개의 제한이 적용됩니다.

참고: DD_TRACE_SAMPLE_RATE는 지원이 중단되었습니다. 대신 DD_TRACE_SAMPLING_RULES를 사용하세요. 예를 들어, 이미 DD_TRACE_SAMPLE_RATE를 0.1로 설정한 경우, 대신 DD_TRACE_SAMPLING_RULES를 [{"sample_rate":0.1}]로 설정하세요.

샘플링 제어에 관한 자세한 내용은 Python SDK 문서를 참조하세요.

Remote Configuration

Ruby 애플리케이션에서는 버전 2.0.0부터 서비스 및 리소스별 샘플링 속도를 Ingestion Control 페이지 UI에서 설정하세요.

서비스 및 리소스별로 샘플링 속도를 원격으로 구성하는 방법에 관한 자세한 내용은 리소스 기반 샘플링 가이드를 참조하세요.

참고: 원격으로 설정된 구성이 로컬 구성보다 우선합니다.

로컬 구성 Ruby 애플리케이션에서는 DD_TRACE_SAMPLE_RATE 환경 변수를 사용해 라이브러리의 전역 샘플링 속도를 설정하세요. DD_TRACE_SAMPLING_RULES 환경 변수를 사용하여 서비스별로 샘플링 속도를 설정하세요.

예를 들어, 이름이 my-service인 서비스의 트레이스는 50%, 나머지 트레이스는 10% 전송하려면 다음과 같이 설정하세요.

export DD_TRACE_SAMPLE_RATE=0.1
export DD_TRACE_SAMPLING_RULES='[{"service": "my-service", "sample_rate": 0.5}]'

환경 변수 DD_TRACE_RATE_LIMIT를 서비스 인스턴스당 최대 초당 트레이스 수로 설정하여 속도 제한을 구성하세요. DD_TRACE_RATE_LIMIT 값을 설정하지 않으면 초당 트레이스 100개의 제한이 적용됩니다.

샘플링 제어에 관한 자세한 내용은 Ruby SDK 문서를 참조하세요.

Remote Configuration

Go 애플리케이션에서는 버전 1.64.0부터 서비스 및 리소스별 샘플링 속도를 Ingestion Control 페이지 UI에서 설정하세요.

서비스 및 리소스별로 샘플링 속도를 원격으로 구성하는 방법에 관한 자세한 내용은 이 문서를 참조하세요.

참고: 원격으로 설정된 구성이 로컬 구성보다 우선합니다.

로컬 구성

Go 애플리케이션에서는 DD_TRACE_SAMPLING_RULES 환경 변수를 사용해 서비스 및 리소스별(리소스별 샘플링의 경우 버전 v1.60.0부터) 샘플링 속도를 설정하세요.

예를 들어, 서비스 my-service에서 리소스 GET /checkout의 트레이스를 100% 캡처하고, 다른 엔드포인트의 트레이스를 20% 캡처하려면 다음과 같이 설정하세요.

export DD_TRACE_SAMPLING_RULES='[{"service": "my-service", "resource": "GET /checkout", "sample_rate": 1},{"service": "my-service", "sample_rate": 0.2}]'

환경 변수 DD_TRACE_RATE_LIMIT를 서비스 인스턴스당 최대 초당 트레이스 수로 설정하여 속도 제한을 구성하세요. DD_TRACE_RATE_LIMIT 값을 설정하지 않으면 초당 트레이스 100개의 제한이 적용됩니다.

참고: DD_TRACE_SAMPLE_RATE는 지원이 중단되었습니다. 대신 DD_TRACE_SAMPLING_RULES를 사용하세요. 예를 들어, 이미 DD_TRACE_SAMPLE_RATE를 0.1로 설정한 경우, 대신 DD_TRACE_SAMPLING_RULES를 [{"sample_rate":0.1}]로 설정하세요.

샘플링 제어에 관한 자세한 내용은 Go SDK 문서를 참조하세요.

Remote Configuration

Node.js 애플리케이션에서는 버전 5.16.0부터 서비스 및 리소스별 샘플링 속도를 Ingestion Control 페이지 UI에서 설정하세요.

서비스 및 리소스별로 샘플링 속도를 원격으로 구성하는 방법에 관한 자세한 내용은 리소스 기반 샘플링 가이드를 참조하세요.

참고: 원격으로 설정된 구성이 로컬 구성보다 우선합니다.

로컬 구성

Node.js 애플리케이션에서는 DD_TRACE_SAMPLE_RATE 환경 변수를 사용해 라이브러리의 전역 샘플링 속도를 설정하세요.

서비스별 샘플링 속도도 설정할 수 있습니다. 예를 들어 이름이 my-service인 서비스의 트레이스는 50%, 나머지 트레이스는 10% 전송하려면 다음과 같이 설정하세요.

tracer.init({
    ingestion: {
        sampler: {
            sampleRate: 0.1,
            rules: [
                { sampleRate: 0.5, service: 'my-service' }
            ]
        }
    }
});

환경 변수 DD_TRACE_RATE_LIMIT를 서비스 인스턴스당 최대 초당 트레이스 수로 설정하여 속도 제한을 구성하세요. DD_TRACE_RATE_LIMIT 값을 설정하지 않으면 초당 트레이스 100개의 제한이 적용됩니다.

샘플링 제어에 관한 자세한 내용은 Node.js SDK 문서를 참조하세요.

Remote Configuration

PHP 애플리케이션에서는 버전 1.4.0부터 서비스 및 리소스별 샘플링 속도를 Ingestion Control 페이지에서 설정하세요.

서비스 및 리소스별로 샘플링 속도를 원격으로 구성하는 방법에 관한 자세한 내용은 리소스 기반 샘플링 가이드를 참조하세요.

참고: 원격으로 설정된 구성이 로컬 구성보다 우선합니다.

로컬 구성

PHP 애플리케이션에서는 DD_TRACE_SAMPLE_RATE 환경 변수를 사용해 라이브러리의 전역 샘플링 속도를 설정하세요. DD_TRACE_SAMPLING_RULES 환경 변수를 사용하여 서비스별로 샘플링 속도를 설정하세요.

예를 들어 이름이 my-service인 서비스의 트레이스는 50%, 다른 엔드포인트의 트레이스 20%, 나머지 트레이스는 10% 전송하려면 다음과 같이 설정하세요.

export DD_TRACE_SAMPLE_RATE=0.1
export DD_TRACE_SAMPLING_RULES='[{"service": "my-service", "resource":"GET /checkout", "sample_rate": 1},{"service": "my-service", "sample_rate": 0.2}]'

샘플링 제어에 관한 자세한 내용은 PHP SDK 문서를 참조하세요.

Remote Configuration

C++ 애플리케이션에서는 버전 0.2.2부터 서비스 및 리소스별 샘플링 속도를 Ingestion Control 페이지 UI에서 설정하세요.

서비스 및 리소스별로 샘플링 속도를 원격으로 구성하는 방법에 관한 자세한 내용은 리소스 기반 샘플링 가이드를 참조하세요.

참고: 원격으로 설정된 구성이 로컬 구성보다 우선합니다.

로컬 구성 Datadog C++ 라이브러리는 v0.1.0부터 다음 구성을 지원합니다.

  • 전역 샘플링 속도: DD_TRACE_SAMPLE_RATE 환경 변수
  • 서비스별 샘플링 속도: DD_TRACE_SAMPLING_RULES 환경 변수
  • 속도 제한 설정: DD_TRACE_RATE_LIMIT 환경 변수

예를 들어 이름이 my-service인 서비스의 트레이스는 50%, 나머지 트레이스는 10% 전송하려면 다음과 같이 설정하세요.

export DD_TRACE_SAMPLE_RATE=0.1
export DD_TRACE_SAMPLING_RULES='[{"service": "my-service", "sample_rate": 0.5}]'

C++은 자동 계측을 위한 통합 기능을 제공하지 않지만, Envoy, NGINX, Istio와 같은 프록시 트레이싱에 사용됩니다. 프록시에 대한 샘플링을 구성하는 방법에 관한 자세한 내용은 프록시 트레이싱을 참조하세요.

로컬 구성

Rust 애플리케이션에서는 DD_TRACE_SAMPLING_RULES 환경 변수를 사용하여 서비스별 샘플링 속도를 설정하세요.

예를 들어 이름이 my-service인 서비스의 트레이스는 50%, 나머지 트레이스는 10% 전송하려면 다음과 같이 설정하세요.

export DD_TRACE_SAMPLING_RULES='[{"service": "my-service", "sample_rate": 0.5},{"sample_rate": 0.1}]'

환경 변수 DD_TRACE_RATE_LIMIT를 서비스 인스턴스당 최대 초당 트레이스 수로 설정하여 속도 제한을 구성하세요. DD_TRACE_RATE_LIMIT 값을 설정하지 않으면 초당 트레이스 100개의 제한이 적용됩니다.

샘플링 제어에 관한 자세한 내용은 Rust SDK 문서를 참조하세요.

.NET 애플리케이션에서는 DD_TRACE_SAMPLE_RATE 환경 변수를 사용해 라이브러리의 전역 샘플링 속도를 설정하세요. DD_TRACE_SAMPLING_RULES 환경 변수를 사용하여 서비스별로 샘플링 속도를 설정하세요.

예를 들어 이름이 my-service인 서비스의 트레이스는 50%, 나머지 트레이스는 10% 전송하려면 다음과 같이 설정하세요.

#using powershell
$env:DD_TRACE_SAMPLE_RATE=0.1
$env:DD_TRACE_SAMPLING_RULES='[{"service": "my-service", "sample_rate": 0.5}]'

#using JSON file   
{
    "DD_TRACE_SAMPLE_RATE": "0.1",
    "DD_TRACE_SAMPLING_RULES": "[{\"service\": \"my-service\", \"resource\": \"GET /checkout\", \"sample_rate\": 0.5}]"
}
버전 2.35.0부터 서비스가 실행되는 환경에서 Agent Remote Configuration이 활성화되어 있으면 서비스별 DD_TRACE_SAMPLE_RATE 값을 Catalog UI에서 설정할 수 있습니다.

환경 변수 DD_TRACE_RATE_LIMIT를 서비스 인스턴스당 최대 초당 트레이스 수로 설정하여 속도 제한을 구성하세요. DD_TRACE_RATE_LIMIT 값을 설정하지 않으면 초당 트레이스 100개의 제한이 적용됩니다.

샘플링 제어에 관한 자세한 내용은 .NET SDK 문서를 참조하세요.
.NET 환경 변수 구성에 관해 자세히 알아보세요.

참고: SDK를 사용해 샘플링된 트레이스의 모든 스팬은 수집 이유 rule이 태그로 지정됩니다. 사용자 지정 샘플링 규칙으로 구성된 서비스는 Ingestion Control 페이지 Configuration 열에 Configured로 표시됩니다.

오류 및 희소 트레이스

헤드 기반 샘플링으로 포착하지 못한 트레이스의 경우, 2개의 추가 Datadog Agent 샘플링 메커니즘이 그렇지 않으면 제거될 중요하고 다양한 트레이스를 포착합니다. 이러한 샘플러는 미리 결정된 태그 세트의 모든 조합을 포착해 로컬 트레이스 세트(같은 호스트의 스팬)를 유지합니다.

  • 오류 트레이스: 오류 샘플링을 이용하면 잠재적인 시스템 오류에 대한 가시성을 확보할 수 있습니다.
  • 희소 트레이스: 희소 트레이스 샘플링은 시스템 전반의 트래픽이 적은 서비스 및 리소스에 대한 가시성을 유지합니다.

참고: 라이브러리 샘플링 규칙을 설정한 서비스에 대해서는 오류 및 희소 샘플러가 무시됩니다.

오류 트레이스

ingestion_reason: error

오류 샘플러는 헤드 기반 샘플링이 포착하지 못한 오류 스팬을 포함하는 트레이스 조각을 Agent당 초당 트레이스 최대 10개의 속도로 포착합니다. 이를 통해 헤드 기반 샘플링 속도가 낮은 경우에도 오류에 대한 가시성을 유지할 수 있습니다.

Agent 버전 7.33 이상에서는 Agent 메인 구성 파일(datadog.yaml)에서 또는 다음 환경 변수를 사용하여 오류 샘플러를 구성할 수 있습니다.

@param errors_per_second - integer - optional - default: 10
@env DD_APM_ERROR_TPS - integer - optional - default: 10
오류 샘플링

참고:

  1. 오류 샘플러를 비활성화하려면 파라미터를 0으로 설정하세요.
  2. 오류 샘플러는 Agent 수준에서 로컬 오류 트레이스를 캡처합니다. 트레이스가 분산된 경우, 완전한 트레이스가 Datadog으로 전송되지 않을 수 있습니다.
  3. 기본적으로 SDK 규칙 또는 manual.drop과 같은 사용자 지정 로직에 의해 제거된 스팬은 오류 샘플러에서 제외됩니다.

Datadog Agent 7.42.0 이상

Agent 버전 7.42.0 이상을 사용 중인 경우 오류 샘플링을 원격으로 구성할 수 있습니다. Agent에서 원격 구성을 활성화하려면 이 문서의 지침을 따르세요. 원격 구성을 사용하면 Datadog Agent를 재시작하지 않고도 희소 스팬 수집을 활성화할 수 있습니다.

Datadog Agent 6/7.41.0 이상

기본 동작을 재정의해 SDK 규칙 또는 manual.drop과 같은 사용자 지정 로직에 의해 제거된 스팬도 오류 샘플러가 포함하게 하려면 Datadog Agent에서(또는 Kubernetes의 Datadog Agent 포드 내 전용 Trace Agent 컨테이너에서) DD_APM_FEATURES=error_rare_sample_tracer_drop으로 해당 기능을 활성화하세요.

Datadog Agent 6/7.33에서 6/7.40.x까지

이 Agent 버전에서는 오류 샘플링의 기본 동작을 변경할 수 없습니다. Datadog Agent를 Datadog Agent 6/7.41.0 이상으로 업그레이드하세요.

희소 트레이스

ingestion_reason: rare

희소 샘플러는 희소 스팬 세트를 Datadog에 전송합니다. 이 샘플러는 env, service, name, resource, error.type, http.status의 조합을 Agent당 초당 트레이스 최대 5개의 속도로 포착합니다. 이를 통해 헤드 기반 샘플링 속도가 낮을 경우 트래픽이 적은 리소스에 대한 가시성을 유지할 수 있습니다.

참고: 희소 샘플러는 Agent 수준에서 로컬 트레이스를 캡처합니다. 트레이스가 분산된 경우, 완전한 트레이스가 Datadog으로 전송된다는 보장이 없습니다.

Datadog Agent 7.42.0 이상

Agent 버전 7.42.0 이상을 사용 중인 경우 희소 샘플링을 원격으로 구성할 수 있습니다. Agent에서 원격 구성을 활성화하려면 이 문서의 지침을 따르세요. 원격 구성을 사용하면 Datadog Agent를 재시작하지 않고도 파라미터 값을 변경할 수 있습니다.

Datadog Agent 6/7.41.0 이상

기본적으로 희소 샘플러는 활성화되어 있지 않습니다.

참고: 활성화한경우에도 SDK 규칙이나 manual.drop과 같은 사용자 지정 로직에 의해 제거된 스팬은 이 샘플러에서 제외됩니다.

희소 샘플러를 구성하려면 Agent 메인 구성 파일(datadog.yaml)에서 또는 환경 변수 DD_APM_ENABLE_RARE_SAMPLER를 사용하여 apm_config.enable_rare_sampler 설정을 업데이트하세요.

@params apm_config.enable_rare_sampler - boolean - optional - default: false
@env DD_APM_ENABLE_RARE_SAMPLER - boolean - optional - default: false

SDK 규칙이나 manual.drop과 같은 사용자 지정 로직에 의해 제거된 스팬을 평가하려면 Trace Agent에서 DD_APM_FEATURES=error_rare_sample_tracer_drop을 사용하여 해당 기능을 활성화하세요.

Datadog Agent 6/7.33에서 6/7.40.x까지

기본적으로 희소 샘플러가 활성화되어 있습니다.

참고: 활성화한경우에도 SDK 규칙이나 manual.drop과 같은 사용자 지정 로직에 의해 제거된 스팬은 이 샘플러에서 제외됩니다. 이러한 스팬을 로직에 포함하려면 Datadog Agent 6.41.0/7.41.0 이상으로 업그레이드하세요.

기본 희소 샘플러 설정을 변경하려면 Agent 메인 구성 파일(datadog.yaml)에서 또는 환경 변수 DD_APM_DISABLE_RARE_SAMPLER를 사용하여 apm_config.disable_rare_sampler 설정을 업데이트하세요.

@params apm_config.disable_rare_sampler - boolean - optional - default: false
@env DD_APM_DISABLE_RARE_SAMPLER - boolean - optional - default: false

강제 유지 및 제거

ingestion_reason: manual

헤드 기반 샘플링 메커니즘은 SDK 수준에서 재정의될 수 있습니다. 예를 들어 중요한 트랜잭션을 모니터링해야 하는 경우, 관련 트레이스를 강제로 유지할 수 있습니다. 반면, 상태 검사와 같은 불필요하거나 반복적인 정보인 경우 트레이스를 강제로 제거할 수 있습니다.

  • 스팬에서 Manual Keep을 설정하면 해당 스팬과 모든 하위 스팬을 수집하도록 지정합니다. 해당 스팬이 트레이스의 루트 스팬이 아닌 경우, 결과 트레이스가 UI에 불완전하게 표시될 수 있습니다.

  • 스팬에서 Manual Drop을 설정하면 어떠한 하위 스팬도 수집되지 않도록 합니다. 오류 및 희소 샘플러는 Agent에서 무시됩니다.

수동으로 트레이스 유지:

import datadog.trace.api.DDTags;
import io.opentracing.Span;
import datadog.trace.api.Trace;
import io.opentracing.util.GlobalTracer;

public class MyClass {
    @Trace
    public static void myMethod() {
        // grab the active span out of the traced method
        Span span = GlobalTracer.get().activeSpan();
        // Always keep the trace
        span.setTag(DDTags.MANUAL_KEEP, true);
        // method impl follows
    }
}

수동으로 트레이스 제거:

import datadog.trace.api.DDTags;
import io.opentracing.Span;
import datadog.trace.api.Trace;
import io.opentracing.util.GlobalTracer;

public class MyClass {
    @Trace
    public static void myMethod() {
        // grab the active span out of the traced method
        Span span = GlobalTracer.get().activeSpan();
        // Always Drop the trace
        span.setTag(DDTags.MANUAL_DROP, true);
        // method impl follows
    }
}

수동으로 트레이스 유지:

from ddtrace import tracer
from ddtrace.constants import MANUAL_DROP_KEY, MANUAL_KEEP_KEY

@tracer.wrap()
def handler():
    span = tracer.current_span()
    # Always Keep the Trace
    span.set_tag(MANUAL_KEEP_KEY)
    # method impl follows

수동으로 트레이스 제거:

from ddtrace import tracer
from ddtrace.constants import MANUAL_DROP_KEY, MANUAL_KEEP_KEY

@tracer.wrap()
def handler():
    span = tracer.current_span()
    # Always Drop the Trace
    span.set_tag(MANUAL_DROP_KEY)
    # method impl follows

수동으로 트레이스 유지:

Datadog::Tracing.trace(name, options) do |span, trace|
  trace.keep! # Affects the active trace
  # Method implementation follows
end

수동으로 트레이스 제거:

Datadog::Tracing.trace(name, options) do |span, trace|
  trace.reject! # Affects the active trace
  # Method implementation follows
end

Note: This documentation uses v2 of the Go tracer, which Datadog recommends for all users. If you are using v1, see the migration guide to upgrade to v2.

수동으로 트레이스 유지:

package main

import (
    "log"
    "net/http"
    "github.com/DataDog/dd-trace-go/v2/ddtrace/ext" 
    "github.com/DataDog/dd-trace-go/v2/ddtrace/tracer"
)

func handler(w http.ResponseWriter, r *http.Request) {
    // Create a span for a web request at the /posts URL.
    span := tracer.StartSpan("web.request", tracer.ResourceName("/posts"))
    defer span.Finish()

    // Always keep this trace:
    span.SetTag(ext.ManualKeep, true)
    //method impl follows

}

수동으로 트레이스 제거:

package main

import (
    "log"
    "net/http"

    "github.com/DataDog/dd-trace-go/v2/ddtrace/ext"
    "github.com/DataDog/dd-trace-go/v2/ddtrace/tracer"
)

func handler(w http.ResponseWriter, r *http.Request) {
    // Create a span for a web request at the /posts URL.
    span := tracer.StartSpan("web.request", tracer.ResourceName("/posts"))
    defer span.Finish()

    // Always drop this trace:
    span.SetTag(ext.ManualDrop, true)
    //method impl follows
}

수동으로 트레이스 유지:

const tracer = require('dd-trace')
const tags = require('dd-trace/ext/tags')

const span = tracer.startSpan('web.request')

// Always keep the trace
span.setTag(tags.MANUAL_KEEP)
//method impl follows

수동으로 트레이스 제거:

const tracer = require('dd-trace')
const tags = require('dd-trace/ext/tags')

const span = tracer.startSpan('web.request')

// Always drop the trace
span.setTag(tags.MANUAL_DROP)
//method impl follows

수동으로 트레이스 유지:

using Datadog.Trace;

using(var scope = Tracer.Instance.StartActive("my-operation"))
{
    var span = scope.Span;

    // Always keep this trace
    span.SetTag(Datadog.Trace.Tags.ManualKeep, "true");
    //method impl follows
}

수동으로 트레이스 제거:

using Datadog.Trace;

using(var scope = Tracer.Instance.StartActive("my-operation"))
{
    var span = scope.Span;

    // Always drop this trace
    span.SetTag(Datadog.Trace.Tags.ManualDrop, "true");
    //method impl follows
}

수동으로 트레이스 유지:

<?php
  $tracer = \DDTrace\GlobalTracer::get();
  $span = $tracer->getActiveSpan();

  if (null !== $span) {
    // Always keep this trace
    $span->setTag(\DDTrace\Tag::MANUAL_KEEP, true);
  }
?>

수동으로 트레이스 제거:

<?php
  $tracer = \DDTrace\GlobalTracer::get();
  $span = $tracer->getActiveSpan();

  if (null !== $span) {
    // Always drop this trace
    $span->setTag(\DDTrace\Tag::MANUAL_DROP, true);
  }
?>

수동으로 트레이스 유지:

...
#include <datadog/tags.h>
#include <datadog/trace_segment.h>
#include <datadog/sampling_priority.h>
...

dd::SpanConfig span_cfg;
span_cfg.resource = "operation_name";

auto span = tracer.create_span(span_cfg);
// Always keep this trace
span.trace_segment().override_sampling_priority(int(dd::SamplingPriority::USER_KEEP));
//method impl follows

수동으로 트레이스 제거:

...
#include <datadog/tags.h>
#include <datadog/trace_segment.h>
#include <datadog/sampling_priority.h>
...

using namespace dd = datadog::tracing;

dd::SpanConfig span_cfg;
span_cfg.resource = "operation_name";

auto another_span = tracer.create_span(span_cfg);
// Always drop this trace
span.trace_segment().override_sampling_priority(int(dd::SamplingPriority::USER_DROP));
//method impl follows
Rust SDK는 OpenTelemetry API를 사용하며 Datadog의 ManualKeep및ManualDrop 태그를 지원하지 않습니다. Rust에서 트레이스를 강제로 유지하거나 삭제하려면 OpenTelemetry sampling.priority 속성을 사용자 지정 계측을 사용하여 루트 스팬에 설정하세요.

컨텍스트를 전파하기 전에 Manual Keep을 설정하세요. 컨텍스트 전파 이후에 설정하면 여러 서비스 전반에서 전체 트레이스가 유지되지 않을 수 있습니다. 이 결정은 트레이싱 클라이언트에서 설정되기 때문에 샘플링 규칙에 따라 Agent 또는 서버에서 트레이스가 삭제될 수 있습니다.

단일 스팬

ingestion_reason: single_span

특정 스팬을 샘플링해야 하지만 전체 트레이스는 필요하지 않은 경우, SDK를 사용하면 스팬 하나에 대해 샘플링 속도를 설정할 수 있습니다.

예를 들어, 특정 서비스를 모니터링하기 위해 스팬에서 메트릭을 구축하는 경우, 서비스를 통과하는 모든 요청의 트레이스를 100% 수집하지 않고도 이러한 메트릭이 100% 애플리케이션 트래픽에만 기반하도록 스팬 샘플링 규칙을 구성할 수 있습니다.

이 기능은 Datadog Agent v7.40.0+에서 이용할 수 있습니다.

참고: 단일 스팬 샘플링 규칙은 헤드 기반 샘플링에서 유지된 스팬을 제거할 수 없습니다. 헤드 기반 샘플링에서 제거된 추가적인 스팬을 유지하는 데만 사용할 수 있습니다.

SDK 버전 1.7.0부터 Java 애플리케이션에서는 DD_SPAN_SAMPLING_RULES 환경 변수를 사용하여 서비스 및 작업 이름별 스팬 샘플링 규칙을 설정하세요.

예를 들어, 이름이 my-service인 서비스에서 http.request 작업의 스팬을 100% 수집하되, 초당 최대 50개까지 수집하려면 다음과 같이 설정하세요.

@env DD_SPAN_SAMPLING_RULES=[{"service": "my-service", "name": "http.request", "sample_rate":1.0, "max_per_second": 50}]

샘플링 제어에 관한 자세한 내용은 Java SDK 문서를 참조하세요.

버전 v1.4.0부터 Python 애플리케이션에서는 DD_SPAN_SAMPLING_RULES 환경 변수를 사용하여 서비스별 및 작업 이름별 스팬 샘플링 규칙을 설정하세요.

예를 들어, 이름이 my-service인 서비스에서 http.request 작업의 스팬을 100% 수집하되, 초당 최대 50개까지 수집하려면 다음과 같이 설정하세요.

@env DD_SPAN_SAMPLING_RULES=[{"service": "my-service", "name": "http.request", "sample_rate":1.0, "max_per_second": 50}]

샘플링 제어에 관한 자세한 내용은 Python SDK 문서를 참조하세요.

버전 v1.5.0부터 Ruby 애플리케이션에서는 DD_SPAN_SAMPLING_RULES 환경 변수를 사용하여 서비스 및 작업 이름별 스팬 샘플링 규칙을 설정하세요.

예를 들어, 이름이 my-service인 서비스에서 http.request 작업의 스팬을 100% 수집하되, 초당 최대 50개까지 수집하려면 다음과 같이 설정하세요.

@env DD_SPAN_SAMPLING_RULES=[{"service": "my-service", "name": "http.request", "sample_rate":1.0, "max_per_second": 50}]

샘플링 제어에 관한 자세한 내용은 Ruby SDK 문서를 참조하세요.

버전 v1.41.0부터 Go 애플리케이션에서는 DD_SPAN_SAMPLING_RULES 환경 변수를 사용하여 서비스 및 작업 이름별 스팬 샘플링 규칙을 설정하세요.

예를 들어, 이름이 my-service인 서비스에서 http.request 작업의 스팬을 100% 수집하되, 초당 최대 50개까지 수집하려면 다음과 같이 설정하세요.

@env DD_SPAN_SAMPLING_RULES=[{"service": "my-service", "name": "http.request", "sample_rate":1.0, "max_per_second": 50}]

버전 v1.60.0부터 Go 애플리케이션에서는 DD_SPAN_SAMPLING_RULES 환경 변수를 사용하여 리소스 및 태그별 스팬 샘플링 규칙을 설정하세요.

예를 들어, 서비스에서 리소스가 POST /api/create_issue이고 태그 priority의 값이 high인 스팬을 100% 수집하려면 다음과 같이 설정하세요.

@env DD_SPAN_SAMPLING_RULES=[{"resource": "POST /api/create_issue", "tags": { "priority":"high" }, "sample_rate":1.0}]

샘플링 제어에 관한 자세한 내용은 Go SDK 문서를 참조하세요.

Node.js 애플리케이션에서는 DD_SPAN_SAMPLING_RULES 환경 변수를 사용하여 서비스 및 작업 이름별 스팬 샘플링 규칙을 설정하세요.

예를 들어, 이름이 my-service인 서비스에서 http.request 작업의 스팬을 100% 수집하되, 초당 최대 50개까지 수집하려면 다음과 같이 설정하세요.

@env DD_SPAN_SAMPLING_RULES=[{"service": "my-service", "name": "http.request", "sample_rate":1.0, "max_per_second": 50}]

샘플링 제어에 관한 자세한 내용은 Node.js SDK 문서를 참조하세요.

버전 v0.77.0부터 PHP 애플리케이션에서는 DD_SPAN_SAMPLING_RULES 환경 변수를 사용하여 서비스 및 작업 이름별 스팬 샘플링 규칙을 설정하세요.

예를 들어, 이름이 my-service인 서비스에서 http.request 작업의 스팬을 100% 수집하되, 초당 최대 50개까지 수집하려면 다음과 같이 설정하세요.

@env DD_SPAN_SAMPLING_RULES=[{"service": "my-service", "name": "http.request", "sample_rate":1.0, "max_per_second": 50}]

샘플링 제어에 관한 자세한 내용은 PHP SDK 문서를 참조하세요.

버전 v0.1.0부터 C++ 애플리케이션에서는 DD_SPAN_SAMPLING_RULES 환경 변수를 사용하여 서비스 및 작업 이름별 스팬 샘플링 규칙을 설정하세요.

예를 들어, 이름이 my-service인 서비스에서 http.request 작업의 스팬을 100% 수집하되, 초당 최대 50개까지 수집하려면 다음과 같이 설정하세요.

@env DD_SPAN_SAMPLING_RULES=[{"service": "my-service", "name": "http.request", "sample_rate":1.0, "max_per_second": 50}]

Rust 애플리케이션에서는 DD_SPAN_SAMPLING_RULES 환경 변수를 사용하여 서비스 및 작업 이름별 스팬 샘플링 규칙을 설정하세요.

예를 들어, 이름이 my-service인 서비스에서 http.request 작업의 스팬을 100% 수집하되, 초당 최대 50개까지 수집하려면 다음과 같이 설정하세요.

@env DD_SPAN_SAMPLING_RULES=[{"service": "my-service", "name": "http.request", "sample_rate":1.0, "max_per_second": 50}]

버전 v2.18.0부터 .NET 애플리케이션에서는 DD_SPAN_SAMPLING_RULES 환경 변수를 사용하여 서비스 및 작업 이름별 스팬 샘플링 규칙을 설정하세요.

예를 들어, 이름이 my-service인 서비스에서 http.request 작업의 스팬을 100% 수집하되, 초당 최대 50개까지 수집하려면 다음과 같이 설정하세요.

#using powershell
$env:DD_SPAN_SAMPLING_RULES='[{"service": "my-service", "name": "http.request", "sample_rate":1.0, "max_per_second": 50}]'

#using JSON file   
{
    "DD_SPAN_SAMPLING_RULES": "[{\"service\": \"my-service\", \"name\": \"http.request\", \"sample_rate\": 1.0, \"max_per_second\": 50}]"
}

샘플링 제어에 관한 자세한 내용은 .NET SDK 문서를 참조하세요.

기존 App Analytics 메커니즘은 지원이 완전히 중단되었습니다. 개별 스팬을 수집하려면 위에서 설명한 단일 스팬 샘플링을 사용하고, 전체 트레이스를 수집하려면 헤드 기반 샘플링을 사용하세요.

제품에서 수집된 스팬

RUM 트레이스

ingestion_reason:rum

웹 또는 모바일 애플리케이션에서 보낸 요청은 백엔드 서비스가 계측된 경우 트레이스를 생성합니다. Real User Monitoring과 APM의 통합으로 웹 및 모바일 애플리케이션 요청을 해당 백엔드 트레이스와 연결하므로, 한눈에 프론트엔드 및 백엔드 데이터 전체를 확인할 수 있습니다.

RUM 브라우저 SDK 버전 4.30.0부터 traceSampleRate 초기화 파라미터를 구성하여 수집되는 볼륨을 제어하고 백엔드 트레이스의 샘플링을 유지할 수 있습니다. traceSampleRate를 0에서 100의 숫자로 설정하세요. traceSampleRate 값을 설정하지 않으면 브라우저 요청에서 발생하는 트레이스의 100%(기본값)가 Datadog으로 전송됩니다.

다른 SDK에서도 트레이스 샘플링 속도를 제어할 수 있습니다.

SDK파라미터최소 버전
브라우저traceSampleRatev4.30.0
iOStracingSamplingRate1.11.0. 1.13.0부터 샘플링 속도가 Ingestion Control 페이지에 표시됩니다.
AndroidtraceSampleRate1.13.0. 1.15.0부터 샘플링 속도가 Ingestion Control 페이지에 표시됩니다.
FluttertracingSamplingRate1.0.0
React NativetracingSamplingRate1.0.0. 1.2.0부터 샘플링 속도가 Ingestion Control 페이지에 표시됩니다.

Synthetic 트레이스

ingestion_reason:synthetics 및 ingestion_reason:synthetics-browser

HTTP 및 브라우저 테스트는 백엔드 서비스가 계측된 경우 트레이스를 생성합니다. Synthetic Testing과 APM의 통합은 Synthetic 테스트를 해당 백엔드 트레이스와 연결합니다. 실패한 테스트 실행에서 해당 테스트 실행으로 생성된 트레이스를 확인하여 문제의 근본 원인까지 추적할 수 있습니다.

기본적으로, Synthetic HTTP 및 브라우저 테스트의 100%가 백엔드 트레이스를 생성합니다.

기타 제품

특정 Datadog 제품에서 생성된 스팬에는 다음과 같은 일부 추가적인 수집 이유가 지정됩니다.

제품수집 이유수집 메커니즘 설명
Serverlesslambda 및 xrayServerless 애플리케이션에서 수신되고 Datadog SDK 또는 AWS X-Ray 통합을 사용하여 추적된 트레이스입니다.
App and API ProtectionappsecDatadog SDK에서 수집되고 AAP가 위협으로 플래그한 트레이스입니다.
Data Observability: Jobs Monitoringdata_jobsDatadog Java Tracer Spark 통합 또는 Databricks 통합에서 수집된 트레이스입니다.

OpenTelemetry의 수집 메커니즘

ingestion_reason:otel

OpenTelemetry SDK 설정에 따라(OpenTelemetry Collector 또는 Datadog Agent 사용) 수집 샘플링을 제어하는 여러 가지 방법이 있습니다. 다양한 OpenTelemetry 설정에서 OpenTelemetry SDK, OpenTelemetry Collector 및 Datadog Agent 수준에서 샘플링에 사용할 수 있는 옵션에 관한 자세한 내용은 OpenTelemetry를 사용한 수집 샘플링을 참조하세요.

추가 자료