Datadog과 함께 OpenTelemetry를 언제 사용해야 하는지 OpenTelemetry API를 사용한 커스텀 계측에서 확인해 보세요.

개요

다음의 경우 OpenTelemetry API를 사용해 애플리케이션을 수동으로 계측해야 합니다.

  • Datadog이 지원하는 라이브러리 계측을 사용하고 있지 않습니다.
  • ddtrace 라이브러리의 기능을 확장하고 싶습니다.
  • 애플리케이션 계측을 보다 세밀하게 제어해야 합니다.

ddtrace 라이브러리는 이러한 목표를 달성하는 데 도움이 됩니다. 다음 섹션에서는 커스텀 계측을 위해 Datadog과 OpenTelemetry API를 함께 사용하는 방법을 다룹니다.

설정

OpenTelemetry를 설정하여 Datadog 트레이스 공급자를 사용하려면,

  1. OpenTelemetry Node.js 수동 계측 설명서에 따라 원하는 수동 OpenTelemetry 계측을 Node.js 코드에 추가하세요. 참고: 해당 지침에 따라 코드가 OpenTelemetry SDK를 호출해야 하는 경우, 대신 Datadog 추적 라이브러리 을 호출하세요.

  2. package.json에 dd-trace 모듈을 추가합니다.

    npm install dd-trace
    
  3. 애플리케이션에서 dd-trace 모듈을 초기화합니다.

    const tracer = require('dd-trace').init({
      // ...
    })
    
  4. tracer에서 TracerProvider를 가져옵니다.

    const { TracerProvider } = tracer
    
  5. TracerProvider를 만들고 등록합니다.

    const provider = new TracerProvider()
    provider.register()
    
  6. OpenTelemetry API를 가져와 OpenTelemetry 트레이서 인스턴스를 생성합니다.

    const ot = require('@opentelemetry/api')
    const otelTracer = ot.trace.getTracer(
      'my-service'
    )
    
  7. 애플리케이션을 실행합니다.

Datadog는 이러한 OpenTelemetry 스팬(span)과 다른 Datadog 애플리케이션 성능 모니터링(APM) 스팬(span)을 단일 애플리케이션 트레이스로 결합합니다. 또한 통합 계측OpenTelemetry 자동 계측도 지원합니다.

스팬(span) 태그 추가하기

스팬(span)에 커스텀 속성을 추가하여 추가 컨텍스트를 제공합니다.

function processData(i, param1, param2) {
  return tracer.startActiveSpan(`processData:${i}`, (span) => {
    const result = someOperation(param1, param2);

    // Add an attribute to the span
    span.setAttribute('app.processedData', result.toString());

    span.end();
    return result;
    });
}

스팬(span) 생성하기

새로운 스팬(span)을 생성하고 제대로 닫으려면 startActiveSpan 메서드를 사용합니다.

function performTask(iterations, param1, param2) {
  // Create a span. A span must be closed.
  return tracer.startActiveSpan('performTask', (span) => {
    const results = [];
    for (let i = 0; i < iterations; i++) {
      results.push(processData(i, param1, param2));
    }
    // Be sure to end the span!
    span.end();
    return results;
  });
}

요청 필터링하기

경우에 따라 상태 점검 또는 신서틱(Synthetic) 트래픽과 같은 특정 요청을 계측 대상에서 제외할 수 있습니다. http 플러그인에서 blocklist 또는 allowlist 옵션을 사용하여 이러한 요청을 무시할 수 있습니다.

애플리케이션 수준에서 요청을 제외하려면 트레이서를 초기화한 후 다음을 추가합니다.

// at the top of the entry point right after tracer.init()
tracer.use('http', {
  blocklist: ['/health', '/ping']
})

필요한 경우 클라이언트와 서버 간 설정을 분리할 수도 있습니다.

tracer.use('http', {
  server: {
    blocklist: ['/ping']
  }
})

또한 리소스 이름에 따라 트레이스를 제외하여 에이전트가 Datadog로 리소스를 보내지 않도록 할 수 있습니다. 보안 및 에이전트 설정 조정에 대한 자세한 내용은 보안 또는 원치 않는 리소스 무시를 참조하세요.

참고 자료