본문 바로가기
WIKI 기술 지식 베이스

앱 애널리틱스 (App Analytics)

원문 보기 위키 갱신

⚠️ 이 페이지는 레거시 App Analytics와 관련된 구성 정보가 있는 더 이상 사용되지 않는 기능을 설명해요. 일부 오래된 설정을 트러블슈팅하거나 수정할 때 유용해요. trace를 완전히 제어하려면 수집 제어와 보존 필터를 대신 사용해요.

출처: 문서

본문

새 구성 옵션으로 마이그레이션하기 (Migrate to the new configuration options)

수집 제어 페이지로 이동하면 레거시 구성이 있는 서비스를 볼 수 있어요. 이 서비스는 Legacy Setup 상태로 표시돼요.

새 구성 옵션으로 마이그레이션하려면 Legacy Setup으로 표시된 서비스에서 모든 레거시 App Analytics 구성 옵션을 제거해요. 그런 다음 trace를 보내도록 Datadog Agent와 SDK의 샘플링 메커니즘을 구현해요.

App Analytics 구성 (App Analytics setup)

App Analytics 구성 옵션은 Tracing Libraries와 Datadog Agent에 있어요. 라이브러리에서는 서비스의 analytics 스팬이 자동 또는 수동으로 생성돼요.

Tracing Libraries에서

자동 구성 (Automatic configuration)

Java

App Analytics는 Java tracing client 0.25.0 버전부터 사용할 수 있어요. Tracing client의 구성 파라미터 하나로 모든 웹 서버 통합에 전역으로 활성화할 수 있어요:

  • 시스템 속성: -Ddd.trace.analytics.enabled=true
  • 환경 변수: DD_TRACE_ANALYTICS_ENABLED=true

Python

App Analytics는 Python tracing client 0.19.0 버전부터 사용할 수 있어요. 이 구성은 ddtrace 3.x 이하 버전에서만 사용할 수 있어요. Tracing Client의 구성 파라미터 하나로 모든 웹 통합에 전역으로 App Analytics를 활성화해요:

  • Tracer 구성: ddtrace.config.analytics_enabled = True
  • 환경 변수: DD_TRACE_ANALYTICS_ENABLED=true

Ruby

App Analytics는 Ruby tracing client 0.19.0 버전부터 사용할 수 있고, 전역 플래그로 모든 웹 통합에 대해 활성화할 수 있어요.

그렇게 하려면 환경에 DD_TRACE_ANALYTICS_ENABLED=true를 설정하거나 다음과 같이 구성해요:

Datadog.configure { |c| c.tracing.analytics.enabled = true }
  • true는 모든 웹 프레임워크에 대해 analytics를 활성화해요.
  • false 또는 nil은 명시적으로 활성화한 통합을 제외하고 analytics를 비활성화해요. (기본값)

Go

App Analytics는 Go tracing client 1.11.0 버전부터 사용할 수 있고, 다음을 사용해 모든 웹 통합에 대해 전역으로 활성화할 수 있어요:

  • 예를 들어 WithAnalytics(v1 문서) tracer 시작 옵션:

    tracer.Start(tracer.WithAnalytics(true))
    
  • 1.26.0 버전부터 환경 변수: DD_TRACE_ANALYTICS_ENABLED=true 사용

Node.js

App Analytics는 Node.js tracing client 0.10.0 버전부터 사용할 수 있고, tracing client의 구성 파라미터 하나로 모든 웹 통합에 대해 전역으로 활성화할 수 있어요:

tracer.init({
  analytics: true
})

다음 구성 파라미터도 사용할 수 있어요:

  • 환경 변수: DD_TRACE_ANALYTICS_ENABLED=true

.NET

App Analytics는 .NET tracing client 1.1.0 버전부터 사용할 수 있고, Tracing Client의 구성 파라미터 하나로 모든 웹 통합에 대해 전역으로 활성화할 수 있어요:

  • 환경 변수 또는 AppSetting: DD_TRACE_ANALYTICS_ENABLED=true

이 설정은 코드에서도 설정할 수 있어요:

Tracer.Instance.Settings.AnalyticsEnabled = true;

PHP

App Analytics는 PHP tracing client 0.17.0 버전부터 사용할 수 있고, Tracing Client의 구성 파라미터 하나로 모든 웹 통합에 대해 전역으로 활성화할 수 있어요:

  • 환경 변수: DD_TRACE_ANALYTICS_ENABLED=true

C++

App Analytics는 C++ tracing client 1.0.0 버전부터 사용할 수 있고, 환경 변수 DD_TRACE_ANALYTICS_ENABLED를 true로 설정하면 모든 서비스 엔트리 스팬에 대해 전역으로 활성화할 수 있어요. 참고: 이 설정은 코드에서 직접 설정할 수도 있어요:

datadog::opentracing::TracerOptions tracer_options;
  tracer_options.agent_host = "dd-agent";
  tracer_options.service = "<SERVICE_NAME>";
  tracer_options.analytics_rate = 1.0;
  auto tracer = datadog::opentracing::makeTracer(tracer_options);

NGINX

Nginx에 대해 App Analytics를 활성화하려면:

  1. 환경 변수 DD_TRACE_ANALYTICS_ENABLED를 true로 설정해요.

  2. nginx.conf 파일 상단에 env DD_TRACE_ANALYTICS_ENABLED;를 추가해요.

추가 서비스 구성 (선택 사항) (Configure additional services (optional))
통합별 구성 (Configure by integration)

Java

전역 설정 외에도 다음 설정을 사용해 개별 통합에 대해 App Analytics를 활성화하거나 비활성화할 수 있어요:

  • 시스템 속성: -Ddd.<integration>.analytics.enabled=true
  • 환경 변수: DD_<INTEGRATION>_ANALYTICS_ENABLED=true

커스텀 서비스를 제출하는 통합에 전역 구성과 함께 이 설정을 사용해요. 예를 들어 커스텀 서비스로 들어오는 JMS 스팬의 경우 다음을 설정하면 App Analytics에서 모든 JMS Tracing을 활성화할 수 있어요:

  • 시스템 속성: -Ddd.jms.analytics.enabled=true
  • 환경 변수: DD_JMS_ANALYTICS_ENABLED=true

통합 이름은 integrations table에서 찾을 수 있어요.

Python

전역 설정 외에도 다음 설정을 사용해 개별 통합에 대해 App Analytics를 활성화하거나 비활성화할 수 있어요:

  • Tracer 구성: ddtrace.config.<INTEGRATION>.analytics_enabled = True
  • 환경 변수: DD_<INTEGRATION>_ANALYTICS_ENABLED=true

커스텀 서비스를 제출하는 통합에 전역 구성과 함께 이 설정을 사용해요. 예를 들어 커스텀 서비스로 들어오는 Boto 스팬의 경우 다음을 설정하면 App Analytics에서 모든 Boto Tracing을 활성화할 수 있어요:

  • Tracer 구성: ddtrace.config.boto.analytics_enabled = True
  • 환경 변수: DD_BOTO_ANALYTICS_ENABLED=true

참고: 일부 통합은 SDK의 통합별 구현 때문에 비표준 구성이 필요해요. 자세한 내용은 라이브러리 문서의 App Analytics를 참고해요.

Ruby

App Analytics는 특정 통합에 대해 활성화할 수 있어요.

그렇게 하려면 환경에 DD_<INTEGRATION>_ANALYTICS_ENABLED=true를 설정하거나 다음과 같이 구성해요:

Datadog.configure { |c| c.tracing.instrument :integration, analytics_enabled: true }

여기서 integration은 통합 이름이에요. 옵션은 사용 가능한 통합 목록을 참고해요.

  • true는 전역 설정과 관계없이 이 통합의 analytics를 활성화해요.
  • false는 전역 설정과 관계없이 이 통합의 analytics를 비활성화해요.
  • nil은 analytics에 대해 전역 설정을 따릅니다.

Go

참고: 이 문서는 Datadog가 모든 사용자에게 권장하는 Go tracer v2를 사용해요. v1을 사용한다면 마이그레이션 가이드를 참고해 v2로 업그레이드하세요.

전역 설정 외에도 각 통합에 대해 개별적으로 App Analytics를 활성화하거나 비활성화할 수 있어요. 예를 들어 표준 라이브러리의 net/http 패키지를 구성하려면 다음과 같이 할 수 있어요:

package main

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

func main() {
    tracer.Start()
    defer tracer.Stop()

    mux := httptrace.NewServeMux(httptrace.WithAnalytics(true))
    // ...
}

Node.js

전역 설정 외에도 개별 통합에 대해 App Analytics를 활성화하거나 비활성화할 수 있어요.

예를 들어 express에 App Analytics를 활성화하려면:

tracer.use('express', {
  analytics: true
})

통합 이름은 integrations table에서 찾을 수 있어요.

.NET

전역 설정 외에도 개별 통합에 대해 App Analytics를 활성화하거나 비활성화할 수 있어요.

  • 환경 변수 또는 AppSetting: DD_<INTEGRATION>_ANALYTICS_ENABLED=true

또는 코드에서:

Tracer.Instance.Settings.Integrations["<INTEGRATION>"].AnalyticsEnabled = true;

예를 들어 ASP.NET MVC에 App Analytics를 활성화하려면:

  • 환경 변수 또는 AppSetting: DD_ASPNETMVC_ANALYTICS_ENABLED=true

또는 코드에서:

Tracer.Instance.Settings.Integrations["AspNetMvc"].AnalyticsEnabled = true;

통합 이름은 integrations table에서 찾을 수 있어요. 참고: Linux에서는 환경 변수 이름이 대문자·소문자를 구분해요.

PHP

전역 설정 외에도 다음 설정을 사용해 개별 통합에 대해 App Analytics를 활성화하거나 비활성화할 수 있어요:

  • 환경 변수: DD_<INTEGRATION>_ANALYTICS_ENABLED=true

커스텀 서비스를 제출하는 통합에 전역 구성과 함께 이 설정을 사용해요. 예를 들어 커스텀 서비스로 들어오는 Symfony 스팬의 경우 다음을 설정하면 App Analytics에서 모든 Symfony Tracing을 활성화할 수 있어요:

  • 환경 변수: DD_SYMFONY_ANALYTICS_ENABLED=true

통합 이름은 integrations table에서 찾을 수 있어요.

데이터베이스 서비스 (Database services)

Java

데이터베이스 tracing은 기본적으로 App Analytics에서 캡처되지 않으며, 각 통합에 대해 수동으로 수집을 활성화해야 해요. 예:

  • 시스템 속성: -Ddd.jdbc.analytics.enabled=true
  • 환경 변수: DD_JDBC_ANALYTICS_ENABLED=true

Python

데이터베이스 tracing은 기본적으로 App Analytics에서 캡처되지 않으며, 각 통합에 대해 수동으로 수집을 활성화해야 해요. 예:

  • Tracer 구성: ddtrace.config.psycopg.analytics_enabled = True
  • 환경 변수: DD_PSYCOPG_ANALYTICS_ENABLED=true

Ruby

데이터베이스 tracing은 기본적으로 App Analytics에서 캡처되지 않으며, 각 통합에 대해 수동으로 수집을 활성화해야 해요. 예:

Datadog.configure { |c| c.tracing.instrument :mongo, analytics_enabled: true }

Go

데이터베이스 tracing은 기본적으로 App Analytics에서 캡처되지 않아요. 각 통합에 대해 수동으로 수집을 활성화해요. 예:

// Register the database driver with Analytics enabled.
sqltrace.Register("mysql", &mysql.MySQLDriver{}, sqltrace.WithAnalytics(true))

Node.js

데이터베이스 tracing은 기본적으로 App Analytics에서 캡처되지 않으며, 각 통합에 대해 수동으로 수집을 활성화해야 해요. 예:

tracer.use('mysql', {
  analytics: true
})

.NET

데이터베이스 tracing은 기본적으로 App Analytics에서 캡처되지 않으며, 각 통합에 대해 수동으로 수집을 활성화해야 해요. 예를 들어 ADO.NET에 App Analytics를 활성화하려면:

  • 환경 변수 또는 AppSetting: DD_AdoNet_ANALYTICS_ENABLED=true

또는 코드에서:

Tracer.Instance.Settings.Integrations["AdoNet"].AnalyticsEnabled = true;

통합 이름은 integrations table에서 찾을 수 있어요. 참고: Linux에서는 환경 변수 이름이 대문자·소문자를 구분해요.

PHP

데이터베이스 tracing은 기본적으로 App Analytics에서 캡처되지 않아요. 다음 설정을 사용해 개별 통합에 대해 App Analytics를 활성화하거나 비활성화할 수 있어요:

  • 환경 변수: DD_<INTEGRATION>_ANALYTICS_ENABLED=true

커스텀 서비스를 제출하는 통합에 전역 구성과 함께 이 설정을 사용해요. 예를 들어 mysqli의 경우:

  • 환경 변수: DD_MYSQLI_ANALYTICS_ENABLED=true

통합 이름은 integrations table에서 찾을 수 있어요.

커스텀 계측 (Custom instrumentation)

Java

커스텀 계측이 있는 애플리케이션은 스팬에 ANALYTICS_SAMPLE_RATE 태그를 설정해 App Analytics를 활성화할 수 있어요:

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

class MyClass {
  @Trace
  void myMethod() {
    final Span span = GlobalTracer.get().activeSpan();
    // Span provided by @Trace annotation.
    if (span != null) {
      span.setTag(DDTags.SERVICE, "<SERVICE_NAME>");
      span.setTag(DDTags.ANALYTICS_SAMPLE_RATE, 1.0);
    }
  }
}

참고: dd.trace.methods 또는 trace annotations 스팬의 앱 애널리틱스는 -Ddd.trace-annotation.analytics.enabled=true를 설정해 활성화할 수 있어요.

Python

커스텀 계측이 있는 애플리케이션은 스팬에 ddtrace.constants.ANALYTICS_SAMPLE_RATE_KEY 태그를 설정해 App Analytics를 활성화할 수 있어요:

from ddtrace import tracer
from ddtrace.constants import ANALYTICS_SAMPLE_RATE_KEY

@tracer.wrap()
def my_method():
    span = tracer.current_span()
    span.set_tag(ANALYTICS_SAMPLE_RATE_KEY, True)

Ruby

커스텀 계측이 있는 애플리케이션은 스팬에 Analytics::TAG_ENABLED 태그를 설정해 App Analytics를 활성화할 수 있어요:

Datadog::Tracing.trace('my.task') do |span|
  # Set the analytics sample rate to 1.0
  span.set_tag(Datadog::Tracing::Metadata::Ext::Analytics::TAG_ENABLED, true)
end

Go

커스텀 계측의 경우 아래에서 볼 수 있듯이 스팬에 App Analytics를 활성화하는 특별한 태그가 추가되었어요:

span.SetTag(ext.AnalyticsEvent, true)

이렇게 하면 스팬이 App Analytics 이벤트로 표시돼요.

Node.js

커스텀 계측이 있는 애플리케이션은 스팬에 ANALYTICS 태그를 설정해 App Analytics를 활성화할 수 있어요:

const { ANALYTICS } = require('dd-trace/ext/tags')

span.setTag(ANALYTICS, true)

.NET

커스텀 계측이 있는 애플리케이션은 스팬에 Tags.Analytics 태그를 설정해 App Analytics를 활성화할 수 있어요:

using Datadog.Trace;

using(var scope = Tracer.Instance.StartActive("web.request"))
{
    // enable Analytics on this span
    scope.span.SetTag(Tags.Analytics, "true");
}

PHP

커스텀 계측이 있는 애플리케이션은 스팬에 ANALYTICS_KEY 태그를 설정해 App Analytics를 활성화할 수 있어요:

<?php
  // ... your existing span that you want to enable for App Analytics
  $span->setTag(Tag::ANALYTICS_KEY, true);
?>

C++

커스텀 계측이 있는 애플리케이션은 스팬에 analytics_event 태그를 설정해 App Analytics를 활성화할 수 있어요:

...
#include <datadog/tags.h>
...
auto tracer = ...
auto span = tracer->StartSpan("operation_name");
// A boolean value of true enables App Analytics for the span,
// with a sample rate of 1.0.
span->SetTag(datadog::tags::analytics_event, true);
// A double value between 0.0 and 1.0 enables App Analytics
// and sets the sample rate to the provided value.
span->SetTag(datadog::tags::analytics_event, 0.5);

Datadog Agent에서 (In the Datadog Agent)

⚠️ 이 섹션은 레거시 App Analytics와 관련된 구성 정보가 있는 더 이상 사용되지 않는 기능을 설명해요.

서비스별로 분석할 스팬 비율을 구성하려면 datadog.yaml 파일에 다음을 설정해요:

apm_config:
  analyzed_rate_by_service:
    service_A: 1
    service_B: 0.2
    service_C: 0.05

서비스와 작업 이름별로 분석할 스팬 비율을 구성하려면 datadog.yaml 파일에 다음을 설정해요:

apm_config:
  analyzed_spans:
    service_A|operation_name_X: 1
    service_A|operation_name_Y: 0.25
    service_B|operation_name_Z: 0.01

트러블슈팅: 초당 최대 이벤트 수 제한 (Troubleshooting: Maximum events per second limit)

Agent 로그에서 다음 오류 메시지를 보게 된다면 애플리케이션이 APM이 허용하는 기본 200 trace 이벤트/초보다 더 많이 내보내고 있는 거예요.

Max events per second reached (current=300.00/s, max=200.00/s). Some events are now being dropped (sample rate=0.54). Consider adjusting event sampling rates.

Agent의 APM 비율 제한을 늘리려면 Agent 구성 파일(apm_config: 섹션 아래)에서 max_events_per_second 속성을 구성해요. 컨테이너화된 배포(예: Docker 또는 Kubernetes)에서는 DD_APM_MAX_EPS 환경 변수를 사용해요.

참고: APM 비율 제한을 늘리면 App Analytics 비용이 증가할 수 있어요.