다음을 통해 공유


Power Platform의 여러 서비스에 걸쳐 분산 추적 구현

분산 추적은 애플리케이션, 특히 마이크로서비스 아키텍처를 사용하여 구축된 애플리케이션을 프로파일링하고 모니터링하는 데 사용되는 방법입니다. 이를 통해 한 서비스에서 다른 서비스로 시스템의 이벤트를 추적하고 성능 및 대기 시간에 대한 종단 간 진단을 검색할 수 있습니다. W3C 추적 컨텍스트 권장 사항은 분산 추적 시나리오에서 컨텍스트 정보가 서비스 간에 전송되고 수정되는 방식을 정의합니다. 이 문서에서는 Power Platform의 여러 서비스에서 분산 추적을 구현하는 방법을 설명하고, 이에 대한 실용적인 애플리케이션 및 사용 사례를 제공합니다.

추적 식별자

W3C 추적 컨텍스트 표준에서 각 추적에는 전역적으로 고유한 16바이트 trace-id가 할당됩니다. 추적 내의 모든 동작에는 고유한 8바이트 span-id가 할당됩니다. trace-id는 전체 트랜잭션을 나타내고 span-id는 해당 트랜잭션 내의 개별 작업을 나타냅니다. 각 활동은 trace-id, 자체 span-id, 상위의 span-id를 기록하여 활동 간의 상위-하위 관계를 설정합니다.

W3C 표준에서 traceparent는 다른 서비스 또는 시스템을 통해 이동하는 요청을 추적하는 데 사용되는 헤더입니다. 여기에는 고유한 trace-id, 직접 호출자를 나타내는 parent-id 및 샘플링 결정을 위한 trace-flags가 포함됩니다.

예제 시나리오

브라우저가 트랜잭션을 시작하고, 여러 마이크로 서비스가 상호 작용하고, Dataverse 웹 API를 호출하는 예를 살펴보겠습니다.

출처 trace-idspan-id
브라우저 trace-parent: 00-11111111111111111111111111111111-2222222222222222-01
Kubernetes trace-parent: 00-11111111111111111111111111111111-3333333333333333-01
Dataverse trace-parent: 00-11111111111111111111111111111111-4444444444444444-01
  1. 브라우저가 트랜잭션 시작: 브라우저가 웹 서버에 요청을 보냅니다. 요청에는 trace-idspan-id, span-id-1이 할당됩니다.

  2. 마이크로 서비스 상호 작용: 웹 서버는 요청을 처리하고 마이크로 서비스를 호출합니다. 통화에는 새로운 span-id(span-id-2)가 할당되고 동일하게 trace-id 유지됩니다. 마이크로 서비스는 다른 마이크로 서비스를 호출하여 다른 span-id(span-id-3)를 생성합니다. 각각의 경우, trace-id 는 동일하게 유지되지만 각 작업에 대해 새로 span-id 생성됩니다.

  3. Dataverse 웹 API 호출: 마이크로 서비스 중 하나가 Dataverse 웹 API를 호출합니다. 또한, 통화에는 새로운 span-id(span-id-4)가 할당되고 동일하게 trace-id 유지됩니다.

trace-id 및 상위-하위 관계

trace-id는 상위-하위 관계가 있는 모든 트랜잭션을 연결합니다. 각각의 span-id는 추적 내의 고유한 작업을 나타내며, 상위 span-id는 이를 상위 작업에 연결합니다. 이 계층 구조를 사용하면 여러 서비스 및 시스템을 통과하는 경우에도 초기 요청에서 최종 응답까지 전체 트랜잭션을 추적할 수 있습니다.

trace-id 및 연산 ID 매핑

Application Insights는 W3C trace-id 필드를 Operation Id에 매핑하여 엔드투엔드 추적의 일부로 발생하는 관련 작업 세트를 쉽게 쿼리할 수 있도록 합니다.

Application Insights에 매핑된 작업 ID 필드의 스크린샷.

실용적인 응용 프로그램 및 이점

분산 추적을 위한 W3C 추적 컨텍스트 표준은 다음과 같은 몇 가지 실용적인 응용 프로그램과 이점을 제공합니다.

  • 엔드투엔드 가시성: 추적 컨텍스트는 트랜잭션에 대한 엔드투엔드 가시성을 제공하여 요청이 시스템을 통해 전파되는 방식을 이해하는 데 도움이 됩니다.

  • 성능 모니터링: 개별 서비스의 성능을 모니터링하고 병목 현상을 식별할 수 있습니다.

  • 오류 진단: 요청 경로를 추적하고 오류가 발생한 위치를 식별하여 오류를 진단하는 데 도움이 됩니다.

  • 종속성 추적: 서비스 간의 종속성을 추적하고 상호 작용 방식을 이해할 수 있습니다.

W3C 추적 컨텍스트 표준으로 분산 추적을 구현하면 애플리케이션 동작에 대한 귀중한 통찰력을 얻고 성능을 개선하며 전반적인 사용자 경험을 향상시킬 수 있습니다.

잠재적인 사용 사례

다음 표에서는 Power Platform의 분산 추적에 대한 잠재적인 사용 사례를 설명합니다. 각 사용 사례는 분산 추적을 다양한 시나리오에 적용하여 여러 서비스에서 성능 문제를 모니터링하고 진단할 수 있는 방법을 보여줍니다.

설명 노트
자율 에이전트 데이터 이벤트는 자율 에이전트를 트리거합니다. 가능한 긴 수명 트랜잭션은 추적 상위를 유지합니다. 트랜잭션은 고객 서비스 에이전트에 대한 핸드오프를 포함하여 여러 프로세스와 서비스를 교차할 수 있습니다. Power Automate는 Dataverse 플러그 인에서 분산 추적을 요청할 수 있습니다. 프로세스의 각 단계는 Application Insights 원격 분석을 추가합니다. Application Insights에서 또는 KQL 쿼리를 사용하여 엔드투엔드 트랜잭션을 쿼리할 수 있습니다.
최종 사용자 웹, 모바일 또는 에이전트 트랜잭션 사용자가 고객 데이터를 업데이트하기 위해 트랜잭션을 시작합니다. 추적 항목은 Dataverse의 요청 및 추적 메시지에서 Application Insights에 추가됩니다. Kubernetes 서비스는 분산 트랜잭션을 시작합니다. Dataverse 웹 API를 호출하여 고객 세부 정보를 업데이트합니다.
고객 지원 에이전트 고객이 콜 센터에 문의합니다. 콜센터 운영자는 Dynamics 365 Customer Service에서 Copilot을 사용하고 모델 기반 앱을 사용하여 고객의 세부 정보를 업데이트합니다. 업데이트의 각 구성 요소는 Application Insights에 씁니다. 트랜잭션은 콜센터 운영자와 함께 시작됩니다. 모델 기반 앱은 Dataverse에서 분산 트랜잭션을 요청합니다.

Dataverse 웹 API 통합

Dataverse 웹 API가 분산 추적을 위해 W3C 추적 컨텍스트와 어떻게 통합될 수 있는지 살펴보겠습니다.

호출 서비스는 고유한 trace-idspan-id를 사용하여 추적을 시작합니다. 이 trace-parent 값은 HTTP POST 요청의 본문 또는 HTTP 쿼리 문자열의 일부로 Web API에 전달될 수 있습니다. 예를 들면 다음과 같습니다.

  • 옵션 1: POST 본문: postData(environmentUrl + "api/data/v9.0/" + customApiName, token, ...)
  • 옵션 2: 태그 쿼리 문자열: postData(environmentUrl + "api/data/v9.0/" + customApiName + "?tag=01-0af...")

두 방법 중 하나를 사용하여 Application Insights 추적을 통합하도록 Dataverse 플러그 인을 구성하여 새로운 span-id 및 추적 메시지를 생성할 수 있습니다.

Dataverse 통합

이제 Dataverse의 일반적으로 사용 가능한 기능을 사용하여 이 패턴을 구현하는 방법을 살펴보겠습니다.

Dataverse 웹 API에 대한 호출에 분산 추적을 적용하려면:

  • Dataverse 메시지를 사용하여 메시지 파이프라인을 확장합니다.
  • Application Insights SDK를 사용하는 Dataverse 플러그 인으로 사용자 지정 API를 만들어 필요한 상위-하위 관계를 추가합니다.

다른 Power Platform 서비스에서 호출

Copilot Studio, Power Apps 또는 Power Automate 클라우드 흐름과 같은 다른 Power Platform 서비스를 전체 분산 추적 솔루션에 포함할 수 있도록 허용한다고 가정해 보겠습니다. 이 섹션에서 설명한 대로 앱, 흐름, 코드 또는 다른 함수에서 함수를 호출하여 Dataverse 사용자 지정 API를 호출하는 것이 좋습니다.

엔터티 또는 사용자 지정 API에 대한 Dataverse 메시지

Dataverse 환경에서 엔터티 또는 사용자 지정 API와 상호 작용할 수 있는 사용자 지정 Dataverse 메시지를 정의할 수 있습니다. Dataverse 메시지를 사용하면 데이터 관리 프로세스를 간소화하고 관찰 가능성 요구 사항과 원활하게 통합할 수 있습니다. 고유한 메시지 만들기에서 자세히 알아보세요.

플러그 인에 단계 추가

Dataverse 메시지 유형을 만들거나 환경에서 미리 정의된 엔터티 유형을 사용한 후 플러그 인을 사용하여 데이터 처리 파이프라인의 여러 단계에서 실행을 구성하고 분산 추적을 허용합니다. 플러그 인을 사용하여 비즈니스 프로세스 확장에서 자세히 알아보세요.

파이프라인 단계에는 사전 유효성 검사, 사전 작업 및 사후 작업 단계가 포함될 수 있습니다. 플러그인에 단계를 추가하면 데이터 흐름을 제어하고 적시에 작업이 수행되도록 할 수 있습니다.

  • 사전 유효성 검사: 주 작업이 실행되기 전에 발생합니다. 데이터의 유효성을 검사하고 필요한 기준을 충족하는지 확인합니다.

  • 사전 작업: 사전 유효성 검사 단계 이후, 주 작업이 실행되기 전에 발생합니다. 데이터에 필요한 준비 또는 수정을 수행합니다.

  • 사후 작업: 주요 작업이 실행된 후에 발생합니다. 기본 작업의 결과에 따라 필요한 정리 또는 기타 작업을 수행합니다.

응용 프로그램의 요구 사항에 따라 이러한 단계를 동기적 또는 비동기적으로 실행하도록 플러그인을 구성할 수 있습니다.

비보안 구성 값 및 보안 구성 값

플러그 인 등록 도구에서 비보안 구성보안 구성 필드를 사용하여 플러그 인 동작의 여러 측면을 제어할 수 있습니다.

  • 비보안 구성: 비보안 설정은 모든 사용자에게 표시되며 로그 수준, 추적 사용/사용 안 함 및 기타 중요하지 않은 정보와 같은 설정을 포함할 수 있습니다.

  • 보안 구성: 보안 설정은 적절한 권한이 있는 사용자에게만 표시되며 연결 문자열, API 키 및 기타 기밀 데이터와 같은 중요한 정보를 포함할 수 있습니다.

분산 추적 시나리오의 경우 비보안 구성 필드를 사용하여 추적이 켜져 있는지 여부를 관리하고 로깅 수준을 설정합니다. 보안 구성 필드를 사용하여 플러그 인에 필요한 연결 문자열 정보를 저장합니다.

플러그 인을 등록하는 스크린샷.

플러그 인 등록에서 자세히 알아보세요.

요청 및 응답 매개 변수가 있는 사용자 지정 API

Dataverse를 사용하면 특정 요청 및 응답 매개 변수를 사용하여 사용자 지정 API를 만들고 사용하여 애플리케이션의 요구 사항을 충족할 수 있습니다.

  • InputParameters: 사용자 지정 API에 필요한 입력 데이터를 정의합니다. 여기에는 문자열, 정수 및 복합 개체와 같은 다양한 데이터 형식이 포함될 수 있습니다.

  • OutputParameters: 사용자 지정 API에서 반환된 출력 데이터를 정의합니다. 여기에는 다양한 데이터 유형 및 구조가 포함될 수 있으므로 API 소비자에게 상세하고 의미 있는 응답을 제공할 수 있습니다.

사용자 지정 API 등록 스크린샷.

분산 추적의 경우 API에서 공유 변수를 전달하기 위해 쿼리 문자열 값에 태그를 지정할 수 있습니다.

사용자 지정 처리 단계(동기화 및 비동기)

사용자 지정 처리 단계를 사용할 때 단계를 동기적으로 실행할지 비동기적으로 실행할지 여부를 정의할 수 있습니다. 이러한 유연성을 통해 응용 프로그램의 성능과 응답성을 최적화할 수 있습니다.

  • 동기 처리: 단계가 순차적으로 실행됩니다. 현재 단계가 완료될 때까지 다음 단계가 시작되지 않습니다. 이 방법을 사용하면 다음 단계로 이동하기 전에 각 단계가 완료됩니다.
  • 비동기 처리: 단계가 독립적으로 실행됩니다. 현재 단계가 완료되기 전에 다음 단계를 시작할 수 있습니다. 이 방법을 사용하면 병렬 처리가 가능하며 응용 프로그램의 전반적인 성능을 향상시킬 수 있습니다.

사용자 지정 처리 단계를 정의하면 기존 엔터티 또는 사용자 지정 API 메시지에 모니터링 및 기타 기능을 추가하여 애플리케이션이 효율적이고 효과적으로 작동하도록 할 수 있습니다.

Dataverse C# 플러그 인

Application Insights SDK를 사용하는 Dataverse C# 플러그 인을 빌드하고 배포하여 서비스 간에 올바른 상위-하위 관계를 만듭니다. 플러그인 쓰기에서 자세히 알아보세요.

사용자 지정 플러그인과 기본 ILogger 비교

Dataverse는 환경 수준에서 구성할 수 있는 기본 ILogger를 제공합니다. 기본 제공 ILogger는 다양한 환경에서 표준화된 로깅 메커니즘을 제공하도록 설계되어 일관성과 사용 편의성을 보장합니다. 그러나 사용자 지정 플러그 인 ILogger와 동일한 수준의 세분성 및 사용자 지정을 제공하지 않을 수 있습니다.

Dataverse의 사용자 지정 플러그 인 ILogger는 추적, 디버그 및 정보와 같은 보다 자세한 수준의 정보를 제공합니다. 이를 통해 개발자는 플러그인을 실행하는 동안 보다 구체적이고 관련성 있는 데이터를 캡처할 수 있습니다. ILogger는 메시지 요청 또는 Share Variable 태그 매개 변수의 값을 사용하여 로그의 추적 및 상관 관계를 개선하기 위해 호출 추적 상위를 지정합니다.

ILogger를 사용하여 Application Insights 리소스에 원격 분석 쓰기에서 자세히 알아보십시오.

활동을 구문 분석하고 상위 ID를 지정하기 위한 주요 C# 개념

사용자 지정 플러그 인 ILogger를 사용하는 경우 활동을 구문 분석하고 상위 ID를 지정하기 위한 주요 C# 개념을 이해하는 것이 중요합니다. 추적 메시지에 대한 새 활동을 만드는 방법의 예는 다음과 같습니다.

// Create a new activity for the trace message
var activity = new Activity("CustomActivity");
activity.SetParentId(traceParent);
activity.Start();
// Create a trace telemetry record
var traceTelemetry = new TraceTelemetry(message, ConvertLogLevel(level))
{
    Message = message,
    Context = { Operation = { ParentId = dependencyTelemetry.Id, Id = activity.Id } }
};
// Track the trace telemetry
telemetryClient.TrackTrace(traceTelemetry);

Dataverse OpenTelemetry 샘플 프로젝트에는 Dataverse 플러그 인과 OpenTelemetry를 통합한 예가 포함되어 있습니다. OpenTelemetry는 텔레메트리 데이터를 계측, 생성, 수집 및 내보내는 데 사용할 수 있는 W3C 표준, API, SDK 및 도구 모음입니다.

기여자

Microsoft는 이 문서를 관리합니다. 이 문서를 작성한 기여자는 다음과 같습니다.

주요 작성자: