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

스팬의 코드 출처 (Code Origin for Spans)

원문 보기 위키 갱신

Code Origin은 APM 스팬이 코드베이스의 정확히 어디에서 생성되는지 캡처해요. 호환 서비스에서 활성화하면 각 서비스 엔트리 스팬에 파일 경로, 줄 번호, 함수 이름을 자동으로 추가해서 다음을 더 쉽게 만들어 줘요:

출처: 문서

본문

  • 성능 문제 디버깅
  • 코드 실행 흐름 이해
  • 성능 병목 식별

Trace Explorer에서 활성화된 서비스의 스팬을 선택하면 Overview 탭에서 Code Origin 세부 정보를 볼 수 있어요.

시작하기

사전 요구 사항

  • 스팬을 캡처하도록 Datadog APM이 구성되어 있어요.
  • Source Code Integration이 활성화되어 있어요.
  • 서비스가 호환성 요구 사항을 충족해요.

호환성 요구 사항

Java

SDK 버전 프레임워크
1.47.0+ Spring Boot/Data, gRPC 서버, Micronaut 4, Kafka consumers

제한: JDK 18 이하에서 -parameters 플래그로 컴파일된 클래스는 지원되지 않을 수 있어요. Spring 6+, Spring Boot 3+, Scala는 이 플래그를 기본으로 사용해요.

Python

SDK 버전 프레임워크
2.15.0+ Django, Flask, Starlette 및 파생 프레임워크

Node.js

SDK 버전 프레임워크
4.49.0+ Fastify
5.54.0+ Express

참고: 기본 프레임워크가 Express 또는 Fastify여도 NestJS는 지원되지 않아요.

.NET

SDK 버전 프레임워크
3.15.0+ ASP.NET, ASP.NET Core

PHP

SDK 버전 프레임워크
1.11.0+ 지원되는 모든 웹 프레임워크

Go

Go 서비스는 SDK 플래그가 아니라 Source Code Integration을 통해 Code Origin 데이터를 얻어요.

요구 사항 프레임워크
Source Code Integration 활성화 Custom spans, gRPC 서버, Gin, Chi, Echo, Fiber, gorilla/mux, OpenTelemetry, OpenTracing

Code Origin 활성화하기

Source Code Integration만으로도 호환성 요구 사항을 충족하지 않는 서비스에서 일부 Code Origin 세부 정보를 자동으로 추론할 수 있어요. 'Source Code Integration을 통한 Code Origin 커버리지'를 참고해요.

호환되는 언어와 프레임워크에 SDK 플래그를 활성화하면 완전한 tracer 계측 커버리지를 얻을 수 있어요.

SDK를 통해 활성화하려면 다음 환경 변수로 서비스를 실행해요:

export DD_CODE_ORIGIN_FOR_SPANS_ENABLED=true

💡 트랜스파일된 Node.js 애플리케이션(예: TypeScript)의 경우 배포된 애플리케이션과 함께 소스 맵을 생성·게시하고, Node.js를 --enable-source-maps 플래그로 실행하며, Node.js tracer v5.59.0 이상을 사용해야 해요. 그렇지 않으면 코드 미리 보기가 동작하지 않아요. 자세한 내용은 Node.js Source Code Integration 문서를 참고해요.

Code Origin 사용하기

Trace Explorer에서

  1. Trace Explorer로 이동해요.
  2. Code Origin이 활성화된 서비스에서 "Service Entry Spans"를 검색해요.
  3. 스팬을 클릭해 세부 정보를 봐요.
  4. trace 세부 정보 사이드 패널에서 "Code Origin" 섹션을 찾아요.
  5. Code Origin 섹션에서:
    • 실행 중인 서비스에서 "Start Debug Session"을 클릭해 Live Debugger 세션을 시작해 Code Origin 메서드 위치에서 로그를 캡처해요. 또는 코드 미리 보기의 거터에서 중단점을 선택해 선택한 코드 줄에서 로그를 캡처해요.
    • 소스 코드 변수를 클릭해 Dynamic Instrumentation으로 향후 스팬에 속성으로 추가해요.

IDE에서

  1. Datadog IDE 통합을 설정해요.
    • 지원 IDE: IntelliJ, VS Code
    • 지원 언어: Java, Python
  2. 엔드포인트 메서드 위에 인라인 주석으로 RED 메트릭(Requests, Errors, Duration)을 봐요.

트러블슈팅

Code Origin 섹션이 없음

  • SDK 구성에서 Code Origin이 활성화되어 있는지 확인해요.
  • 서비스가 서비스 언어, 지원 프레임워크, 최소 tracer 버전을 포함한 모든 호환성 요구 사항을 충족하는지 확인해요. 충족하지 않아도 소스 코드 저장소가 Datadog에 연결되어 있다면 일부 Code Origin 데이터를 자동으로 얻을 수 있어요. 'Source Code Integration을 통한 Code Origin 커버리지'를 참고해요.
  • 대부분의 서비스에서 Code Origin 데이터는 서비스 엔트리 스팬에 대해서만 캡처돼요. APM Trace Explorer에서 "Service Entry Spans"로 필터링할 수 있어요.

코드 미리 보기가 보이지 않거나 파일을 찾을 수 없음

  • DD_GIT_* 환경 변수가 올바른 값으로 구성되는 등 모든 Source Code Integration 설정 요구 사항을 충족하는지 확인해요.
  • 트랜스파일된 Node.js 애플리케이션(예: TypeScript)의 경우 배포된 애플리케이션과 함께 소스 맵을 생성·게시하고, Node.js를 --enable-source-maps 플래그로 실행하며, Node.js tracer v5.59.0 이상을 사용해야 해요. 그렇지 않으면 코드 미리 보기가 동작하지 않아요. 자세한 내용은 Node.js Source Code Integration 문서를 참고해요.
  • Code Origin은 사용자 코드만 참조하도록 설계됐지만, 경우에 따라 타사 코드 참조가 섞일 수 있어요. 이런 경우 Datadog 지원에 보고해 참조를 개선하는 데 도움을 줄 수 있어요.

Source Code Integration을 통한 Code Origin 커버리지

Source Code Integration(예: GitHub, GitLab, Azure DevOps와 함께)은 사전 요구 사항으로 필요해요. 이 통합만으로도 저장소의 정적 분석을 사용해 일부 언어와 프레임워크의 코드 위치를 다른 요구 사항 없이 자동으로 결정해요.

호환성 요구 사항에 나열된 언어와 프레임워크에 대해 완전한 tracer 계측 커버리지를 얻으려면 SDK에서도 Code Origin을 활성화해요. 두 방법의 데이터는 Trace Explorer의 같은 Code Origin 섹션에 나타나며, 동일한 IDE 통합과 Live Debugger 워크플로를 지원해요.

더 알아보기 (Learn more)