동적 계측

개요

동적 계측을 사용하면 재시작 없이도 타사 라이브러리를 포함하여 애플리케이션 코드의 어느 위치에서든 실행 중인 프로덕션 시스템에 계측을 추가할 수 있습니다. 또한, Datadog UI에서 로그, 메트릭, 스팬 및 해당 태그 지정에 대한 원격 분석을 추가하거나 수정할 수 있습니다. 동적 계측은 오버헤드가 낮고 시스템에 부작용이 없습니다.

동적 계측에 대한 최신 사용자 경험 개선 사항을 시험해 보고 싶다면 자동 완성 및 검색 공개 베타를 선택하는 것을 고려해 보세요.

시작하기

사전 필수 조건

동적 계측에는 다음이 필요합니다.

  • Datadog Agent 7.45.0 이상이 서비스와 함께 설치됩니다.
  • 해당 Agent에 원격 설정이 활성화되어 있습니다.
  • Java 애플리케이션의 경우 추적 라이브러리 dd-trace-java 1.34.0 또는 이상.
  • Python 애플리케이션의 경우 추적 라이브러리 dd-trace-py 2.2.0 이상.
  • .NET 애플리케이션의 경우 추적 라이브러리 dd-trace-dotnet 2.54.0 또는 이상.
  • PHP 애플리케이션의 경우 추적 라이브러리 dd-trace-php 1.4.0 이상이 필요합니다.
  • 통합 서비스 태깅 태그 service, envversion가 배포에 적용됩니다.
  • (권장 사항) 자동 완성 및 검색(오픈 베타)이 활성화됩니다.
  • (권장 사항) 소스코드 통합이 서비스에 설정되어 있습니다.
  • Dynamic Instrumentation 페이지에 접근하려면 Dynamic Instrumentation Read Configuration(debugger_read) 권한이 필요합니다.
  • 계측을 생성하거나 수정하려면 Dynamic Instrumentation Write Configuration(debugger_write) 권한이 필요합니다.
  • Capture method parameters and local variables 옵션을 사용하려면Dynamic Instrumentation Capture Variables(debugger_capture_variables) 권한이 필요합니다.

역할 및 사용자에게 역할을 할당하는 방법에 대한 자세한 내용은 역할 기반 접근 제어를 참조하세요.

로그 인덱스 만들기

동적 계측은 Datadog으로 전송되고 일반 애플리케이션 로그와 함께 표시되는 “동적 로그"를 생성합니다.

제외 필터를 사용하는 경우 동적 계측 로그가 필터링되지 않는지 확인하세요.

  1. 로그 인덱스를 생성하고 no sampling을 사용하여 원하는 보존으로 설정합니다.
  2. source:dd_debugger 태그와 일치하도록 필터를 설정합니다. 모든 동적 계측 로그에는 이 소스가 있습니다.
  3. 첫 번째 일치 항목이 적합하므로 새 색인이 해당 태그와 일치하는 필터가 있는 다른 색인보다 우선하도록 하세요.

동적 계측 활성화

서비스에서 동적 계측을 활성화하려면 인앱 설정 페이지로 이동하세요.

자세한 지침을 보려면 아래에서 런타임을 선택하세요.

Java
Python
Dotnet
Dotnet
Dotnet

한계

  • 동적 계측은 아직 Azure App Services 또는 서버리스 환경과 호환되지 않습니다.
  • 지원은 파이썬(Python), 자바(Java), .NET 및 PHP로 빌드된 애플리케이션으로 제한됩니다.

동적 계측 살펴보기

동적 계측은 애플리케이션이 런타임에 수행하는 작업을 이해하는 데 도움이 됩니다. 동적 계측 프로브를 추가하면 코드를 변경하거나 다시 배포할 필요 없이 애플리케이션에서 추가 데이터를 내보낼 수 있습니다.

프로브 사용하기

프로브를 사용하면 프로그램 실행을 중단하지 않고도 코드의 특정 지점에서 데이터를 수집할 수 있습니다.

프로브를 사용하면 코드를 변경하고 배포하거나 서비스를 다시 시작하지 않고도 실행 중인 애플리케이션에 동적 로그, 메트릭 및 스팬을 추가하여 옵저버빌리티를 향상시킬 수 있습니다. 사용자 경험을 방해하거나 장시간 배포 없이 즉시 데이터를 수집할 수 있습니다.

개발자로서는 프로브를 “중단되지 않는 중단점"이라고 생각할 수도 있습니다. 전통적인 디버깅에서는 중단점이란 프로그램 실행을 중지하는 지점으로, 개발자는 그 시점에서 프로그램의 상태를 검사할 수 있습니다. 그러나 실제 프로덕션 환경에서 프로그램 실행을 중지하는 것은 현실적이지 않으며 불가능합니다. 프로브는 방해가 되지 않는 방식으로 프로덕션 환경의 변수 상태를 검사할 수 있도록 하여 이러한 격차를 해소합니다.

프로브 만들기

모든 프로브 유형에는 동일한 초기 설정이 필요합니다.

  1. Dynamic Instrumentation 페이지로 이동합니다.
  2. 오른쪽 상단에서 Create Probe를 클릭하거나 서비스에서 점 3개 메뉴를 클릭하고 Add a probe for this service를 선택합니다.
  3. 미리 채워져 있지 않은 경우 서비스, 런타임, 환경 및 버전을 선택합니다.
  4. 소스 코드에서 클래스와 메서드 또는 소스 파일과 행을 선택하여 프로브를 설정할 위치를 지정합니다. 자동 완성 및 검색 공개 베타를 선택한 경우 자동 완성 기능은 클래스나 메서드 선택에 대한 제안을 표시합니다.

각 프로브 유형에 대한 특정 생성 단계는 아래의 개별 프로브 유형을 참조하세요.

또는 다음과 같은 다른 컨텍스트에서 프로브를 생성할 수 있습니다.

프로파일링
프로파일러 플레임 그래프에서 프레임의 컨텍스트 메뉴에 있는 Instrument this frame with a probe를 선택하여 메서드에 대한 프로브를 생성할 수 있습니다.
오류 추적
스택 추적에서 스택 프레임 위에 마우스를 놓고 Instrument를 클릭합니다. 이렇게 하면 Issue context로 프로브 생성 양식이 미리 채워집니다.

로그 프로브 만들기

로그 프로브는 실행될 때 로그를 내보냅니다.

로그 프로브를 생성하려면:

  1. 프로브 유형으로 Log를 선택합니다.
  2. 일반 프로브 설정을 완료합니다(서비스, 환경, 버전 및 프로브 위치 선택).
  3. 로그 메시지 템플릿을 정의합니다. 동적 계측 표현 언어를 사용하여 실행 컨텍스트의 값을 참조할 수 있습니다.
  4. 필요한 경우 프로브에서 추가 데이터 캡처를 활성화합니다. (베타)
  5. 필요한 경우 동적 계측 표현 언어를 사용하여 조건을 정의합니다. 표현식이 true로 평가되면 로그가 내보내집니다.

로그 프로브는 지정된 환경 및 버전과 일치하는 모든 서비스 인스턴스에서 기본적으로 활성화됩니다. 서비스의 각 인스턴스에서 초당 최대 5000회가 실행되도록 속도가 제한되어 있습니다.

모든 로그 프로브에 로그 메시지 템플릿을 설정해야 합니다. 템플릿은 중괄호 안에 표현식을 포함하는 것을 지원합니다 (예: User {user.id} purchased {count(products)} products).

표현 언어를 사용하여 로그 프로브에 대한 조건을 설정할 수도 있습니다. 표현식은 부울로 평가되어야 합니다. 식이 true이면 프로브가 실행되고, 식이 false이면 데이터를 캡처하거나 내보내지 않습니다.

동적 계측 로그 프로브 만들기

베타: 로그 프로브에서 Capture method parameters and local variables를 활성화하면 모든 실행 컨텍스트가 로그 이벤트에 추가됩니다.

  • 메서드 인수, 로컬 변수필드(다음과 같은 기본 제한 포함):
    • 3단계 깊이의 참조를 따릅니다 (UI에서 설정 가능).
    • 컬렉션의 처음 100개 항목.
    • 문자열 값의 처음 255자.
    • 개체 내부의 20개 필드. 정적 필드는 수집되지 않습니다.
  • 스택 트레이스를 호출합니다.
  • 캡처되거나 캡처되지 않은 예외.

이 설정이 활성화된 프로브는 초당 1회 적중으로 속도가 제한됩니다.

경고: 캡처된 데이터에는 개인 데이터, 비밀번호, AWS 키 등 민감한 정보가 포함될 수 있습니다.

이러한 정보가 적절하게 삭제되었는지 확인하세요.

  • Datadog 동적 계측은 민감한 정보를 삭제하기 위해 여러 가지 기술을 사용합니다. 기본 메커니즘 또는 필요에 맞게 확장하는 방법에 대해 자세히 알아보려면 민감한 데이터 스크러빙을 참조하세요.
  • 캡처 방법 파라미터 및 로컬 변수 옵션을 끄고 로그 메시지 템플릿에 포함할 변수를 명시적으로 선택합니다. 이렇게 하면 로그 프로브에 구체적으로 식별한 변수와 관련된 데이터만 포함되므로 의도하지 않은 민감한 데이터 유출의 위험을 줄일 수 있습니다.
  • Datadog 계정의 관리자로서 다른 사용자가 캡처 방법 파라미터 및 로컬 변수 옵션을 사용하지 못하도록 하려면 동적 계측 변수 캡처(debugger_capture_variables) 권한을 취소할 수 있습니다.

또는 로그을 남겨야 하지만 Datadog 제품에서 이 데이터에 액세스할 수 있는 위험을 완화하려는 경우 source:dd_debugger에 제한 쿼리 을 설정하여 조직에서 캡처된 데이터를 볼 수 있는 사용자를 제한할 수 있습니다.

메트릭 프로브 생성하기

메트릭 프로브는 실행될 때 메트릭을 내보냅니다.

메트릭 프로브를 생성하려면:

  1. 프로브 유형으로 Metric을 선택합니다.
  2. 일반 프로브 설정을 완료합니다(서비스, 환경, 버전 및 프로브 위치 선택).
  3. dynamic.instrumentation.metric.probe. 접두사가 붙을 메트릭의 이름을 지정합니다.
  4. 메트릭 유형(count, gauge, histogram)을 선택합니다.
  5. 동적 계측 표현 언어를 사용하여 메트릭 값을 선택합니다. 메서드 파라미터, 지역 변수, 클래스 필드 또는 숫자 값을 생성하는 표현식 등 실행 컨텍스트에서 원하는 숫자 값을 사용할 수 있습니다. 카운트 메트릭의 경우 선택 사항이며, 생략하면 호출할 때마다 개수가 1씩 증가합니다.
동적 계측 메트릭 프로브 만들기

메트릭 프로브는 구성된 환경 및 버전과 일치하는 모든 서비스 인스턴스에서 자동으로 활성화됩니다. 메트릭 프로브는 속도 제한이 없으며 메서드나 행이 호출될 때마다 실행됩니다.

동적 계측 메트릭 프로브는 다음 메트릭 유형을 지원합니다.

  • Count: 주어진 메서드나 행이 실행된 횟수를 셉니다. 메트릭 표현식과 결합하여 변수 값을 사용하여 개수를 늘릴 수 있습니다.
  • Gauge: 변수의 마지막 값을 기반으로 게이지를 생성합니다. 이 메트릭에는 메트릭 표현식이 필요합니다.
  • Histogram: 변수의 통계적 분포를 생성합니다. 이 메트릭에는 메트릭 표현식이 필요합니다.

스팬 프로브 만들기

스팬 프로브는 메서드가 실행될 때 스팬을 내보냅니다.

스팬 프로브를 생성하려면:

  1. 프로브 유형으로 Span을 선택합니다.
  2. 일반 프로브 설정을 완료합니다(서비스, 환경, 버전 및 프로브 위치 선택).
동적 계측 스팬 프로브 만들기

커스텀 계측으로 새 범위 생성 대신 스팬 프로브를 사용할 수 있습니다. 메서드에서 예외가 발생하면 예외의 세부정보가 새로 생성된 스팬의 error 태그와 연결됩니다.

스팬 태그 프로브 만들기

스팬 태그 프로브는 기존 스팬에 태그 값을 추가합니다. active 스팬 또는 service Entry 스팬에 태그를 추가할 수 있습니다. 내부 스팬은 기본적으로 인덱싱되지 않으므로 APM에서 검색하지 못할 수도 있습니다.

스팬 태그 프로브를 생성하려면:

  1. 프로브 유형으로 Span Tag를 선택합니다.
  2. 일반 프로브 설정을 완료합니다(서비스, 환경, 버전 및 프로브 위치 선택).
  3. 태그의 이름을 지정합니다.
  4. 동적 계측 표현 언어를 사용하여 태그의 값을 지정합니다.
  5. 선택적으로 동적 계측 표현 언어를 사용하여 조건을 정의합니다. 태그는 표현식이 true로 평가될 때만 추가됩니다.
  6. 필요에 따라 각각 고유한 이름, 표현식 및 선택적 조건이 포함된 추가 태그를 추가합니다.
동적 계측 스팬 태그 프로브 만들기

사용자 정의 계측을 사용하여 코드에 태그 추가 대신 스팬 태그 프로브를 사용할 수 있습니다.

참고 자료