비동기 트랜잭션 지원
.NET 에이전트는 비동기 .NET 응용 프로그램 트랜잭션에 대한 데이터를 캡처할 수 있습니다. 비동기 작업은 순차적으로 실행될 수도 있고 병렬로 실행될 수도 있습니다. 순서대로 발생하는 비동기 이벤트는 첫 번째 작업의 결과 콜백입니다. 이 결과 콜백이 다음 비동기 작업을 시작합니다. 비동기 작업이 다른 작업을 호출해야 완료되는 경우 비동기 이벤트는 부모-자식 관계를 갖습니다.
apmdevops104kr
.NET 에이전트는 비동기 .NET 응용 프로그램 트랜잭션에 대한 데이터를 캡처할 수 있습니다. 비동기 작업은 순차적으로 실행될 수도 있고 병렬로 실행될 수도 있습니다. 순서대로 발생하는 비동기 이벤트는 첫 번째 작업의 결과 콜백입니다. 이 결과 콜백이 다음 비동기 작업을 시작합니다. 비동기 작업이 다른 작업을 호출해야 완료되는 경우 비동기 이벤트는 부모-자식 관계를 갖습니다.
다음의 서로 다른 이벤트가 비동기 작업을 추적하는 데 중요한 역할을 합니다.
- 작업 시작이 이벤트는 비동기 API 호출이 시작될 때 측정되며 트랜잭션 구성 요소 시작 시간을 표시합니다.
- 작업 완료이 이벤트는 작업 결과 콜백이 시작될 때 측정되며 트랜잭션 구성 요소 종료 시간을 표시합니다. 또한 이 이벤트는 다음 비동기 작업 시작이 이전 작업과 함께 순서대로 발생하는지, 병렬로 발생하는지를 추적합니다.
.NET Framework는 여러 프로그래밍 모델을 사용하여 응용 프로그램 내에서 비동기 트랜잭션을 제공합니다. .NET 에이전트는 트랜잭션이 서로 다른 관련 스레드 사이를 이동할 때 트랜잭션을 모니터링할 수 있습니다. 최근의 .NET 비동기 프로그래밍 모델 두 가지는 다음과 같습니다.
- async/await 키워드컴파일러는 뒤에서 상태 컴퓨터를 생성합니다.
- TAP(태스크 기반 비동기 패턴)데이터베이스 백엔드 및 HTTP 백엔드와 같은 표준 백엔드가 이 모델을 사용합니다.
async/await 비동기 프로그래밍 모델링
.NET은 컴파일러에서 생성된 상태 컴퓨터 모델에 의해 지원되는 async/await 비동기 프로그래밍 모델을 제공합니다.
async/await 모델은 MVC(모델 뷰 컨트롤러) 작업을 포함하는 몇 가지 MVC를 구현합니다. MVC 작업은 자동으로 감지됩니다.
기본적으로 .NET 에이전트는 async/await 모델에 대해 지원되는 MVC 컨트롤러의 모니터링만 지원합니다. 하지만 .NET 비동기 트랜잭션 모니터링은 async/await 패턴을 사용하는 다른 모든 클래스 및 메서드를 지원할 수 있습니다.
응용 프로그램이 실행된 후에는 이 프로세스를 다시 시작해야 합니다. .NET 에이전트는 비동기 상태 컴퓨터를 검색하고 해당 계측을 <
에이전트 홈
>/persistedprobes/StateMachineAsync.pbd에 저장합니다.TAP 모델
TAP 모델은 API HttpClient에서의 HTTP 비동기 호출에 대해 기본적으로 지원됩니다.
MVC 이외의 async/await API에 이 모델을 사용하는 방법을 알아보려면 MVC.pbd에서
MVCAsyncTracing
PBD 항목을 찾아보십시오.TAP 모델 응답 시간 메트릭은 HTTP 요청에 대한 응답을 반환하는 데 소요된 총 시간입니다. TAP 모델에서 트랜잭션 추적의 처리 및 전송은 호출 스레드에서 수행되는 것이 아니라 다른 스레드에 의해 이루어집니다.
추가 정보: 태스크 기반 비동기 패턴 모델
비동기 계측 확장
다른 모든 비동기 API의 경우 MVC 및 HTTP 백엔드가 아닌 다른 클래스에 대해 비동기 호출이 작동하도록 하려면 PBD를 구성해야 합니다.
다음은 async/await PBD의 예입니다.
SetTracerClassMapping: AsyncBlamePointTracer com.wily.introscope.agent.trace.async.hc2.AsyncStateMachineBlamePointTracer com.wily.introscope.probebuilder.validate.ResourceNameValidatorSetTracerParameter: AsyncBlamePointTracer nameformatter com.wily.introscope.agent.trace.async.hc2.AsyncStateMachineNameFormatterSetTracerParameter: AsyncBlamePointTracer computemetrics false SetTracerClassMapping: FrontendMarkerAsync com.wily.introscope.agent.trace.async.hc2.AsyncStateMachineFrontendTracer com.wily.introscope.probebuilder.validate.ResourceNameValidatorSetTracerParameter: FrontendMarkerAsync nameformatter com.wily.introscope.agent.trace.async.hc2.AsyncStateMachineNameFormatterSetTracerParameter: FrontendMarkerAsync isTransactionContextOwner true# Use the isTransactionContextOwner for BlameTracer if you are not using frontend in the below instrumentation.SetTracerParameter: FrontendMarkerAsync computemetrics falseSetTracerOrdering: FrontendMarkerAsync -100 SetFlag: MVCAsyncExtendedTracingTurnOn: MVCAsyncExtendedTracing##### Following tracer enables the state machine push for persistenceSetTracerClassMapping: AsyncStateMachineEnablingTracerV2 com.wily.introscope.agent.trace.async.hc2.AsyncStateMachineEnablingTracer com.wily.introscope.probebuilder.validate.ResourceNameValidatorSetTracerParameter: AsyncStateMachineEnablingTracerV2 nameformatterSetTracerParameter: AsyncStateMachineEnablingTracerV2 formattingKeys "{namespaceandclassname},{method}"SetTracerParameter: AsyncStateMachineEnablingTracerV2 tracerGroup MVCAsyncExtendedTracing IdentifyClassAs: <Your class name> MVCAsyncExtendedTracing// You can use IdentifyMatchingClassesAs for more classes to capture... TraceAnnotatedMethodsIfFlagged: MVCAsyncTracing [mscorlib]System.Runtime.CompilerServices.AsyncStateMachineAttribute AsyncStateMachineEnablingTracerV2 "NOT USED"TraceOneMethodWithParametersIfFlagged: MVCAsyncExtendedTracing MoveNext AsyncBlamePointTracer "AsyncAPIS|{namespaceandclassname}|{method}"