구성 기반 .NET 전체 프레임워크 추적 SDK

구성 기반의 .NET 전체 프레임워크 추적 SDK를 사용하면 스팬과 해당 스팬이 포함해야 할 태그를 선언적으로 지정하고, 애플리케이션의 특정 메서드를 실행하여 이를 생성할 수 있습니다.

선언적 접근 방식은 코드 기반 추적 SDK를 사용하는 것보다 표현력이 약간 더 뛰어나지만, 모든 기능을 제공하는 것은 아닙니다.

사용자 지정 추적 기능을 구현하기 전에 추적 모범 사례를 읽어보시기 바랍니다.

면책사항

구성 기반 SDK는 애플리케이션의 변경사항에 대해 취약합니다. 클래스 또는 메소드의 이름을 바꿀 수 있으며, 갑자기 구성이 더 이상 일치하지 않게 되어 추적 데이터가 유실됩니다. 가능한 경우, 코드 변경에 훨씬 더 탄력적으로 대응할 수 있고 목표 달성에 도움이 되는 기능이 더 풍부한 ‘.NET ’ 전체 프레임워크 SDK를 사용하시기를 권장합니다.

구성

이 구성은 파일에 configuration.yaml 명시되어 있습니다.

참고: 구성 기반 .NET 전체 프레임워크 추적 SDK의 구성 변경 사항은 Instana 에이전트에 자동으로 반영됩니다. 변경된 구성을 사용하려면 이미 인스트루먼트된 애플리케이션을 다시 시작해야 합니다.
참고: 구성 기반 .NET 전체 프레임워크 추적 SDK는 CLR 센서 버전 1.1.44 이상에서 사용할 수 있습니다. 1.1.47 이전 버전에서는 이 기능이 선택적 활성화 기능입니다. 이 기능을 활성화하려면 환경 변수를 INSTANA_CLR_SDKCONFIG 로 설정하십시오 1 . 1.1.47 이상 버전에서는 이 스위치가 더 이상 필요하지 않습니다.

형식

다음 목록은 구성의 일반 형식을 설명합니다.

# .NET Full Framework Tracing
com.instana.plugin.clr:
  instrumentation:
    sdk:
      targets:
        - match:
            type: class
            class: '<type-name>'
            method: '<method-name>'
            arguments: <number of arguments>
          span:
            name: '<span-name>'
            type: 'ENTRY' | 'EXIT' | 'INTERMEDIATE'
            tags:
              - name: '<name of tag>'
                kind: argument
                index: <0-based index of the method's argument>
              - name: '<name of tag>'
                kind: constant
                value: '<constant value>'
              - name: '<name of tag>'
                kind: return
 

targets 키 내에 여러 대상을 정의할 수 있으며, 각 대상은 작성할 하나의 범위를 지정합니다. one의 객체는 match 계측을 target 적용할 메서드를 지정합니다. 이 span 객체는 스팬을 생성하는 방법을 지정하며, 여기에는 스팬의 이름(예: Unbounded Analytics의 call.name 필터에 사용됨)과 설정해야 할 태그가 포함됩니다.

계측기에 맞는 방법

참고: 구성 기반 SDK는 현재 클래스의 메서드 매칭만 지원합니다. 인터페이스 또는 기본 클래스를 기반으로 하는 인스트루먼테이션 (상속 경로 순회) 은 아직 지원되지 않습니다.

이 오브젝트는 인스트루먼테이션이 발생해야 하는 코드 포인트를 설명합니다.

  • type: 인스트루먼트할 코드의 유형입니다. 지원되는 값은 다음과 같습니다.
    • class, 구체적 클래스 일치
  • name: 일치시킬 클래스, 인터페이스 또는 기본 클래스의 완전한 정규명. 중첩 클래스의 경우 구문을 a.b.c.OutsideClass$NestedClass 사용해야 합니다
  • method: 호출을 기록해야 하는 지정된 클래스, 인터페이스 또는 기본 클래스의 메소드 이름
  • arguments: 메소드가 사용하는 인수의 수 (이 수의 인수가 있는 오버로드만 일치됨). 인수가 전달되지 않은 경우 0입니다.

스팬의 모양을 지정하기

이 오브젝트는 match 에 설명된 메소드가 호출되는 경우 작성될 범위의 특성을 설명합니다.

  • name: 범위 이름
  • type: 보안 범위 유형 (선택사항), 지원되는 값:
    • ENTRY-외부 시스템에서 "수신" 호출을 표시하는 데 사용됩니다.
    • "관심있는" 메소드에 대한 내부 호출을 캡처하는 데 사용되는 INTERMEDIATE(기본값)
    • EXIT-외부 시스템에 대한 "발신" 호출을 표시하는 데 사용됩니다.
  • tags: 캡처할 태그/어노테이션 목록 및 해당 값을 얻는 방법 (선택사항). 지원되는 값:
    • constant, 상수 값 캡처
      • kind: constant
      • name: 작성할 태그의 이름
      • value: 작성할 태그의 상수 값
    • return, 메소드 호출의 리턴값 캡처
      • kind: return
      • name: 작성할 태그의 이름입니다. 값은 리턴된 오브젝트의 값입니다.
    • argument, 메소드 호출의 특정 인수 값 캡처
      • kind: argument
      • name: 작성할 태그의 이름
      • index: 태그의 값으로 캡처할 인수의 0기반 색인
참고: 캡처된 값이 이거나 null 값이 Nullable<T> 없는 경우, 정의된 태그는 추가되지 않습니다. 태그가 누락된 구간은 Unbounded Analytics에서 is not present 연산자와 필터를 call.tag 함께 사용하여 조회할 수 있습니다.

잘못된 스팬

가 계측된 Exception 메서드 외부로 전파될 경우, 해당 스팬은 자동으로 오류로 표시되며, 의 값은 오류 Exception::Message 메시지로 설정됩니다. 이 류 메시지는 Unbounded Analytics에서 call.error.message 태그를 통해 검색할 수 있습니다.

다음 스니펫은 일괄처리 작업을 처리하는 애플리케이션을 추적할 수 있는 방법에 대한 예제 구성을 보여줍니다.

com.instana.plugin.clr:
  instrumentation:
    sdk:
      targets:
        - match:
            type: class
            class: Example.BatchJobStarter
            method: ExecuteJob
            arguments: 1
          span:
            name: BatchJob
            type: ENTRY
            tags:
              - name: endpoint
                kind: constant
                value: BatchJob
              - name: batch.job
                kind: argument
                index: 0
        - match:
            type: class
            class: Example.ProprietaryDatabaseClient
            method: ExecuteQuery
            arguments: 1
          span:
            name: DatabaseCall
            type: EXIT
            tags:
              - name: db.connection_string
                kind: constant
                value: 'Data Source=SomeServer;Initial Catalog=SomeDB'
              - name: db.statement
                kind: argument
                index: 0
 

먼저 Example.BatchJobStarter 클래스의 ExecuteJob 메소드는 이름이 BatchJob인 항목 범위, 상수 값이 BatchJobendpoint 어노테이션 및 첫 번째 인수가 해당 값인 batch.job 어노테이션을 작성하도록 인스트루먼트됩니다.

또한 일괄처리 처리 중에 출력 DB 호출 (즉, Example.ProprietaryDatabaseClientExecuteQuery 메소드 호출) 은 이름이 DatabaseCall 이고 어노테이션이 db.connection_string 이며 메소드 호출의 첫 번째 인수가 있는 상수 값이 Data Source=SomeServer;Initial Catalog=SomeDB 이고 어노테이션이 db.statement 인 엑시트 범위를 작성합니다.

ExecuteJob 를 사용하여 새 일괄처리를 처리하면 새 추적이 시작되고 ExecuteQuery 를 사용하는 후속 DB 업데이트가 하위 범위로 나열됩니다. Unbounded Analytics와 같은 모든 Instana 기능은 Instana AutoTrace 를 통해 생성된 추적 정보와 동일한 방식으로 사용할 수 있습니다.

제한사항

다음 제한 사항은 구성 기반 .NET 전체 프레임워크 추적 SDK에 적용됩니다:

  • 생성자 인스트루먼트는 지원되지 않습니다.
  • 정적 메서드에 대한 인스트루멘테이션은 지원되지 않습니다.
  • 한 메소드에서 범위를 시작하고 다른 메소드에서 범위를 닫는 것은 지원되지 않습니다. 즉, 구성 기반 SDK에는 autotrace에서 사용되는 MethodPairInstrumentation 에 해당하는 것이 없습니다.
  • tag 를 명시적으로 작성하지 않고 모든 인수 또는 리턴 값을 캡처하는 것은 지원되지 않습니다.
  • 클래스 또는 메소드의 이름 패턴 지정은 지원되지 않습니다.
  • 범위를 작성하기 전에 추적 컨텍스트 복원은 지원되지 않습니다.