Microsoft Dataverse에 대한 원격 분석 이벤트
데이터 스트림은 현재 Dataverse API 수신 호출, Dataverse 플러그 인 실행 호출, Dataverse SDK 호출에 관한 성능 데이터를 제공합니다. 또한 플러그 인 및 Dataverse SDK 작업의 오류에 대한 데이터도 제공합니다.
Dataverse API 수신 호출
Dataverse API로 전송되는 호출입니다. 통합 인터페이스(UCI), 레거시 웹 클라이언트, SDK를 사용하는 사용자 지정 클라이언트 등이 될 수 있습니다. Application Insights의 요청 테이블에서 찾을 수 있으며, 다음 필드가 있습니다.
이름: 요청 유형입니다. 두 가지 범주로 나뉩니다.
- 웹 API 요청: 통합 인터페이스 및 최신 클라이언트에서 일반적으로 사용되는 OData v4 끝점에 대한 요청입니다. 이 요청은 둘 다에 공통적인 작업으로 변환됩니다. Web API는 RESTful 프로그래밍 모델을 가능하게 하는 "래퍼"지만 데이터를 수신한 후에는 서버 내에서 모든 것이 동일하게 됩니다. 응답이 반환되면 요청이 Web API에서 온 경우 JSON으로 변환됩니다.
- 조직 서비스 요청: SDK 클라이언트나 레거시 웹 클라이언트에서 사용하는 조직 API 끝점에 대한 요청입니다.
기간: 서버가 요청에 응답하는 데 걸린 시간입니다.
Url: 호출이 이루어진 URL입니다.
사용자 정의 치수:
UserAgent: Application Insights 데이터 센터의 서버에서 로그가 푸시되므로 사용자 에이전트 필드에 자동으로 PC 를 채웁니다. Application Insights는 사용자 에이전트 필드가 재정의되는 것을 허용하지 않습니다. 사용자 에이전트 필드를 채울 수 없는 경우가 있습니다. 다음 쿼리를 사용하여 호출한 사용자 에이전트를 볼 수 있습니다.
requests | summarize count() by tostring(customDimensions.userAgent)
Operation_Name: 엔드투엔드 트랜잭션 뷰와 같은 뷰에 표시할 작업의 읽을 수 있는 이름입니다.
Dataverse플러그 인 실행 로그
해당 작업에 대해 실행 중인 사용자 정의 플러그 인의 로그는 종속성 테이블에 있습니다. 다음은 샘플 쿼리입니다.
dependencies
| where type == "Plugin"
| take 100
- 이름/대상: 실행되는 플러그인의 완전히 정규화된 유형 이름입니다.
- 지속 시간: 플러그인이 실행되는 데 걸린 시간입니다.
- 사용자 정의 치수:
- Depth: 호출 스택에서 실행의 현재 Depth 입니다.
- EntityName: 플러그인에 의해 작업이 수행되는 엔터티의 이름입니다.
- IsolationType: 플러그인이 샌드박스에서 실행되는지 여부를 나타내는 값 입니다.
- 1: 없음
- 2: 샌드박스
- 3: 외부
- PluginName: 플러그인의 사용자 친화적인 이름입니다.
- PluginType: 실행되는 플러그인 유형의 이름입니다.
- PluginVersion: 게시된 플러그인의 버전입니다. 여기서 의도는 이 정보를 사용하여 버전 업데이트 문제를 해결할 수 있도록 하는 것입니다.
- Stage: 다음 값에 매핑됩니다.
- PreValidation = 10
- PreOperation = 20
- PreOperationBeforeExternalPlugins = 15
- PreOperationAfterExternalPlugins = 25
- MainOperation = 30
- PostOperationBeforeExternalPlugins = 35
- PostOperationAfterExternalPlugins = 45
- PostOperation = 40
- PostOperationDeprecated = 50
- StepName: SDK 메시지 처리 단계의 이름입니다. 이는 일반적으로 PluginName, PluginType 및 작업 이름(예: ErrorMessageTest.ThrowException: Creation of account)에 대한 정보를 사용하여 플러그인 등록 도구에서 생성됩니다.
플러그 인 코드 내 원격 분석
플러그인 코드 내부에서 무슨 일이 일어나는지 이해하려면 플러그인 코드에서 .Xrm.Sdk.PluginTelemetry.ILogger 인터페이스 를 사용하여 플러그인 내에서 사용자 지정 원격 측정 데이터를 포함시켜서 원격 측정 데이터를 리소스에 직접 쓸 수 있습니다. Microsoft Application Insights 추가 정보: ILogger를 사용하여 Application Insights 리소스에 원격 분석 쓰기(프리뷰)
Dataverse SDK 로그
수신 요청의 일부로 트리거된 SDK 작업에 대한 로그입니다. 실행 요청에 대한 종속성으로 추적되므로 Application Insights의 종석성 테이블에 로깅됩니다. SDK로 시작하는 유형 이름으로 식별됩니다. 다음은 샘플 쿼리입니다.
dependencies
| where type startswith "SDK"
| take 10
- 유형: 트리거된 SDK 요청의 유형입니다. 예로는 Retrieve, RetrieveMultiple, FetchXmlToQueryExpression 및 WhoAmI가 있습니다.
- 이름/대상: 이는 SDK 작업의 대상이 되는 엔터티의 이름입니다.
- 사용자 정의 치수:
- ClientType: 호출이 들어오는 클라이언트 유형입니다. 가능한 값은 Web, UCIClient 및 OutlookFull입니다.
- EntityId: 사용되는 엔터티의 고유 식별자입니다.
- EntityName: 사용되는 엔터티의 이름입니다.
예외
Application Insights에서 플러그 인 및 SDK 작업의 실패에 대한 세부 정보를 볼 수 있습니다. Application Insights의 예외 테이블은 실패 패널을 제공합니다. 이러한 실패 세부 정보는 종단 간 보기에서 플러그 인 및 SDK 호출의 나머지 이벤트와 상관 관계가 있습니다. 사용 가능한 모든 정보는 가능한 경우 열에 추가되고 정확히 일치하는 열이 없을 때는 customDimensions에 추가됩니다.
예외 테이블의 일부 필드가 채워지지 않는 걸 볼 수 있습니다. Application Insights SDK가 소스에서 로그를 내보내는 데 사용되는 경우에만 이러한 필드가 설정될 수 있기 때문입니다. 이 기능은 플랫폼 원격 분석을 수집한 다음 Application Insights 스키마에 따라 Application Insights로 푸시합니다.
exceptions
| take 10
이 쿼리는 예외 테이블에서 모든 특성 세부 정보를 반환합니다.
- problemId/type: 예외 유형입니다.
- outerMessage: 예외 메시지.
- 사용자 지정 차원:
- clientType: 호출이 들어오는 클라이언트의 유형입니다. 가능한 값은 Web, UCIClient 및 OutlookFull입니다.
- exceptionSource: 예외가 발생한 플러그인 또는 가리키다.
- entityName: 사용되는 엔터티의 이름입니다.
- pluginName: 예외가 발생한 플러그인의 이름입니다.
사용자가 오류를 보고하면 사용자 ID(Microsoft Entra ID ID)를 사용하여 예외 테이블의 세부 정보를 이해할 수 있습니다.
exceptions
| where user_Id == '00aa00aa-bb11-cc22-dd33-44ee44ee44ee'
엔티티 ID 및 엔티티 이름은 종속성 테이블의 customDimensions에서 사용할 수 있습니다.
dependencies
| where type == "SDK Retrieve"
자주 묻는 질문(FAQ)
다음은 Dataverse의 원격 측정 이벤트와 관련된 몇 가지 자주 묻는 질문입니다.
플러그 인 업그레이드로 인해 성능이 저하되었는지 여부를 어떻게 확인할 수 있나요?
dependencies
| where ['type'] == "Plugin"
| where name startswith "[InsertYourPluginName]"
| summarize avg(duration) by name
플러그 인 이름에는 사용자 정의 플러그 인의 버전도 포함되어야 합니다.
보고된 문제 이전에 시간 또는 위치를 기준으로 API의 성능은 어땠나요? API 저하가 점진적이었나요? 아니면 갑작스러웠나요?
requests
| where url == "https://<URLHere>"
| summarize avg(duration), count() by bin(timestamp, 1h)
| render timechart
이 차트에서 요청 수에 대한 API 엔드포인트의 성능을 일정 기간 동안 볼 수 있습니다.
Application Insights 내에서 특정 API의 성능을 기반으로 알림을 설정할 수도 있습니다.
특정 시간 또는 특정 사용자가 호출 스택을 이해할 수 있도록 오류 또는 실패에 대한 드릴다운을 사용할 수 있나요?
실패 패널에서는 주어진 기간의 실패에 대한 개요를 제공합니다. 그런 다음 API 호출 또는 종속성 유형을 기반으로 특정 실패로 범위를 좁혀 종단 간 보기를 볼 수 있습니다.
사용자 지정 대시보드를 만들 수 있나요?
있음. Application Insights로 사용자 지정 대시보드를 빌드할 수 있습니다.
플러그 인 사용 성능(응답 시간)과 최대 사용 중 실패율을 확인할 수 있나요?
예. 플러그 인의 성능을 이해하려면 다음 샘플 쿼리를 참조하세요.
dependencies
| where ['type'] == "Plugin"
| where name == "[Plugin name here]"
| summarize avg(duration) by bin(timestamp, 1h)
| render timechart
이 원격 측정에 조절 기능이 있나요?
있음. 기본 429 오류 세부 정보가 현재 제공됩니다.
실행 경로를 이해할 수 있나요? 플러그 인에서 호출하면 플러그인이 느려지나요?
예. 모든 요청에 대해 실행된 모든 메시지와 플러그 인을 볼 수 있습니다.
모든 메시지 및 플러그 인 실행 기간이 기록됩니다. 플러그 인에 시간이 더 걸리는 경우 해당 플러그 인을 식별할 수 있습니다. 플러그 인이 Dataverse로 콜백하는 경우 해당 통화 시간이 기록됩니다. 플러그 인에 대한 자세한 정보는 향후 배포를 위해 계획되어 있습니다.
플러그 인에 의한 모든 아웃바운드 호출은 자동으로 종속성으로 기록됩니다.
특정 요청에 대한 원격 분석을 볼 수 있나요?
Dataverse는 모든 요청에 대한 헤더 응답에서 x-ms-service-requestId를 반환합니다. 이 requestId를 사용하여 모든 원격 분석을 쿼리할 수 있습니다.
union *
| where operation_ParentId contains <requestId>