구성 기반 .NET 전체 프레임워크 추적 SDK
구성 기반의 .NET 전체 프레임워크 추적 SDK를 사용하면 스팬과 해당 스팬이 포함해야 할 태그를 선언적으로 지정하고, 애플리케이션의 특정 메서드를 실행하여 이를 생성할 수 있습니다.
선언적 접근 방식은 코드 기반 추적 SDK를 사용하는 것보다 표현력이 약간 더 뛰어나지만, 모든 기능을 제공하는 것은 아닙니다.
사용자 지정 추적 기능을 구현하기 전에 추적 모범 사례를 읽어보시기 바랍니다.
면책사항
구성 기반 SDK는 애플리케이션의 변경사항에 대해 취약합니다. 클래스 또는 메소드의 이름을 바꿀 수 있으며, 갑자기 구성이 더 이상 일치하지 않게 되어 추적 데이터가 유실됩니다. 가능한 경우, 코드 변경에 훨씬 더 탄력적으로 대응할 수 있고 목표 달성에 도움이 되는 기능이 더 풍부한 ‘.NET ’ 전체 프레임워크 SDK를 사용하시기를 권장합니다.
구성
이 구성은 파일에 configuration.yaml 명시되어 있습니다.
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 필터에 사용됨)과 설정해야 할 태그가 포함됩니다.
계측기에 맞는 방법
이 오브젝트는 인스트루먼테이션이 발생해야 하는 코드 포인트를 설명합니다.
type: 인스트루먼트할 코드의 유형입니다. 지원되는 값은 다음과 같습니다.class, 구체적 클래스 일치
name: 일치시킬 클래스, 인터페이스 또는 기본 클래스의 완전한 정규명. 중첩 클래스의 경우 구문을a.b.c.OutsideClass$NestedClass사용해야 합니다method: 호출을 기록해야 하는 지정된 클래스, 인터페이스 또는 기본 클래스의 메소드 이름arguments: 메소드가 사용하는 인수의 수 (이 수의 인수가 있는 오버로드만 일치됨). 인수가 전달되지 않은 경우 0입니다.
스팬의 모양을 지정하기
이 오브젝트는 match 에 설명된 메소드가 호출되는 경우 작성될 범위의 특성을 설명합니다.
name: 범위 이름type: 보안 범위 유형 (선택사항), 지원되는 값:ENTRY-외부 시스템에서 "수신" 호출을 표시하는 데 사용됩니다.- "관심있는" 메소드에 대한 내부 호출을 캡처하는 데 사용되는
INTERMEDIATE(기본값) EXIT-외부 시스템에 대한 "발신" 호출을 표시하는 데 사용됩니다.
tags: 캡처할 태그/어노테이션 목록 및 해당 값을 얻는 방법 (선택사항). 지원되는 값:constant, 상수 값 캡처kind:constantname: 작성할 태그의 이름value: 작성할 태그의 상수 값
return, 메소드 호출의 리턴값 캡처kind:returnname: 작성할 태그의 이름입니다. 값은 리턴된 오브젝트의 값입니다.
argument, 메소드 호출의 특정 인수 값 캡처kind:argumentname: 작성할 태그의 이름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인 항목 범위, 상수 값이 BatchJob인 endpoint 어노테이션 및 첫 번째 인수가 해당 값인 batch.job 어노테이션을 작성하도록 인스트루먼트됩니다.
또한 일괄처리 처리 중에 출력 DB 호출 (즉, Example.ProprietaryDatabaseClient의 ExecuteQuery 메소드 호출) 은 이름이 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를 명시적으로 작성하지 않고 모든 인수 또는 리턴 값을 캡처하는 것은 지원되지 않습니다.- 클래스 또는 메소드의 이름 패턴 지정은 지원되지 않습니다.
- 범위를 작성하기 전에 추적 컨텍스트 복원은 지원되지 않습니다.