연습 - .NET Aspire 프로젝트에서 원격 분석 사용
이 연습에서는 OpenTelemetry API를 사용하여 로그에 사용자 지정 데이터를 추가합니다. 또한 로그를 검사하여 사용자 지정 이벤트를 찾습니다.
필수 구성 요소 설치
이 연습의 필수 조건은 다음과 같습니다.
- .NET 8
- Visual Studio 2022 Preview
- Docker Desktop
- Visual Studio의 .NET Aspire 워크로드
이러한 패키지가 이미 설치되어 있는 경우 먼저 건너뛰고 OpenTelemetry 로깅 작업을 시작할 수 있습니다.
.NET 8 설치
이 .NET 8 링크를 따라가서 운영 체제에 맞는 올바른 설치 프로그램을 선택합니다. 예를 들어, Windows 11과 최신 프로세서를 사용하는 경우 Windows용 x64 .NET 8 SDK를 선택합니다.
다운로드가 완료되면 설치 프로그램을 실행하고 지침을 따릅니다. 터미널 창에서 다음 명령을 실행하여 설치가 성공했는지 확인합니다.
dotnet --version
설치한 .NET SDK의 버전 번호가 표시되어야 합니다. 예시:
8.0.300-preview.24203.14
Visual Studio 2022 Preview 설치
이 Visual Studio 2022 미리 보기 링크를 따라가서 미리 보기 다운로드를 선택합니다. 다운로드가 완료되면 설치 프로그램을 실행하고 지침을 따릅니다.
Docker Desktop 설치
이 Docker Desktop 링크를 따라가서 운영 체제에 맞는 올바른 설치 프로그램을 선택합니다. 다운로드가 완료되면 설치 프로그램을 실행하고 지침을 따릅니다. 최고의 성능과 호환성을 위해서는 WSL 2 백 엔드를 사용합니다.
Docker Desktop 애플리케이션을 열고 서비스 계약에 동의합니다.
Visual Studio에서 .NET Aspire 워크로드 설치
.NET CLI를 사용하여 .NET Aspire 워크로드를 설치합니다.
터미널을 엽니다.
다음 명령을 사용하여 .NET 워크로드를 업데이트합니다.
dotnet workload update
워크로드가 성공적으로 업데이트되었다는 메시지가 표시됩니다.
No workloads installed for this feature band. To update workloads installed with earlier SDK versions, include the --from-previous-sdk option. Updated advertising manifest microsoft.net.sdk.ios. Updated advertising manifest microsoft.net.workload.mono.toolchain.net6. Updated advertising manifest microsoft.net.sdk.android. Updated advertising manifest microsoft.net.workload.emscripten.net7. Updated advertising manifest microsoft.net.workload.emscripten.net6. Updated advertising manifest microsoft.net.sdk.macos. Updated advertising manifest microsoft.net.workload.emscripten.current. Updated advertising manifest microsoft.net.workload.mono.toolchain.current. Updated advertising manifest microsoft.net.sdk.maui. Updated advertising manifest microsoft.net.workload.mono.toolchain.net7. Updated advertising manifest microsoft.net.sdk.maccatalyst. Updated advertising manifest microsoft.net.sdk.tvos. Updated advertising manifest microsoft.net.sdk.aspire. No workloads installed for this feature band. To update workloads installed with earlier SDK versions, include the --from-previous-sdk option. Successfully updated workload(s): .
다음 명령을 사용하여 .NET Aspire 워크로드를 설치합니다.
dotnet workload install aspire
Aspire 워크로드가 성공적으로 설치되었다는 메시지가 표시됩니다.
Installing Aspire.Hosting.Sdk.Msi.x64 ...... Done Installing Aspire.ProjectTemplates.Msi.x64 ..... Done Installing Aspire.Hosting.Orchestration.win-x64.Msi.x64 ............. Done Installing Aspire.Hosting.Msi.x64 ..... Done Installing Aspire.Dashboard.Sdk.win-x64.Msi.x64 ....... Done Successfully installed workload(s) aspire.
다음 명령을 사용하여 .NET Aspire 워크로드가 설치되었는지 확인합니다.
dotnet workload list
.NET Aspire 워크로드의 세부 정보를 확인해야 합니다.
Installed Workload Id Manifest Version Installation Source --------------------------------------------------------------------------------------------- aspire 8.0.0/8.0.100 SDK 8.0.300-preview.24203, VS 17.10.34902.84 Use `dotnet workload search` to find additional workloads to install.
샘플 앱 복제
git
를 사용하여 샘플 앱을 가져옵니다. 앱에 .NET Aspire가 포함되어 있으므로 OpenTelemetry가 기본 로깅, 메트릭 및 분산 추적과 함께 포함됩니다.
명령줄에서 코드 작업을 할 수 있는 폴더를 선택합니다.
다음 명령을 실행하여 Northern Mountains eShop 샘플 애플리케이션을 복제합니다.
git clone -b aspire-telemetry https://github.com/MicrosoftDocs/mslearn-aspire-starter
컴파일 시간 원본 생성을 사용하여 메시지 기록
컴파일 시간 원본 생성을 사용하여 성능이 뛰어난 로깅 코드를 자동으로 만들 수 있습니다. 제품 브랜드를 가져오기 위한 기술을 구현해 보겠습니다.
Visual Studio를 열고 프로젝트 또는 솔루션 열기를 선택합니다.
스타터 프로젝트를 복제한 폴더로 이동합니다. start 폴더를 열고 eShop.aspiretelemetry.sln을 선택한 다음, 열기를 선택합니다.
솔루션 탐색기에서 WebApp > 서비스를 확장한 다음 CatalogService.cs를 두 번 클릭합니다.
CatalogService
클래스를 선언하는 다음 코드 줄을 찾습니다.public class CatalogService(HttpClient httpClient)
컴파일 시간 원본 생성을 사용하려면 이 클래스를
partial
로 만들고 종속성 주입을 사용하여 로거를 가져와야 합니다. 이 코드와 일치하도록 행을 수정합니다.public partial class CatalogService(HttpClient httpClient, ILogger<CatalogService> logger)
다음으로, 다른 메서드 외부의
CatalogService
클래스 아무 곳에서나 LogGetBrands라는 새static partial
메서드를 만듭니다.public static partial void LogGetBrands(string uri, ILogger logger);
해당 줄 바로 앞에
LoggerMessageAttribute
를 추가하고 로깅 수준과 메시지를 정의합니다.[LoggerMessage( EventId = 0, Level = LogLevel.Information, Message = "Getting brands from URI: {uri}")]
GetBrands()
메서드와 그 안에 있는 다음 코드 줄을 찾습니다.var uri = $"{remoteServiceBaseUrl}catalogBrands";
새 로깅 메서드를 호출하려면 해당 줄 뒤에 다음 코드를 삽입합니다.
LogGetBrands(uri, logger);
변경 내용을 저장하려면 CTRL + S를 누르거나 파일 > 모두 저장을 선택합니다.
계측 테스트
이제 컴파일 시간 원본 생성 로깅을 테스트할 예정입니다.
Visual Studio에서 디버깅 모드로 앱을 시작하려면 F5를 누르거나 디버그 > 디버깅 시작을 선택합니다.
Docker Desktop 시작 메시지가 나타나면 예를 선택합니다. 앱이 시작되고 브라우저 탭에 .NET Aspire 대시보드가 표시됩니다.
요청을 하려면 리소스 목록에서 webapp 프로젝트를 찾은 다음 엔드포인트 열에서 해당 항목 중 하나를 선택합니다.
새 브라우저 탭이 나타나고 Northern Mountains 홈페이지가 표시됩니다. 브랜드 목록은 왼쪽에 포함되어 있습니다. .NET Aspire 대시보드로 다시 전환하고 왼쪽에서 구조적을 선택합니다.
필터 텍스트 상자에 브랜드 가져오기를 입력합니다. 페이지에 기록된 이벤트가 표시됩니다.
이벤트의 세부 정보 열에서 보기를 선택합니다. 대시보드는 항목의 세부 정보를 표시하는 아래쪽 창을 엽니다.
브라우저 탭을 닫고 Visual Studio에서 SHIFT + F5를 누르거나 디버그 >디버깅 중지를 선택합니다.
Visual Studio를 닫습니다.