랩 11: Azure에 배포된 서비스 모니터링

Microsoft Azure 사용자 인터페이스

Microsoft 클라우드 도구의 동적 특성을 고려할 때 이 교육 콘텐츠를 개발한 후 발생하는 Azure UI 변경이 발생할 수 있습니다. 따라서 랩 지침 및 랩 단계가 올바르게 정렬되지 않을 수 있습니다.

Microsoft는 커뮤니티에서 변경해야 할 사항이 있음을 알려줄 때 이 학습 과정을 업데이트합니다. 그러나 클라우드 업데이트가 자주 이루어지기 때문에 이 학습 콘텐츠가 업데이트되기 전에 UI가 변경될 수 있습니다. 이 경우 변경 사항에 적응하고 필요에 따라 랩에서 작업합니다.

Instructions

시작하기 전에

랩 환경에 로그인

다음 자격 증명을 사용하여 Windows 11 VM(가상 머신)에 로그인합니다.

  • 사용자 이름: Admin
  • 암호: Pa55w.rd

참고: 강사가 가상 랩 환경 연결에 대한 지침을 제공합니다.

설치된 애플리케이션 검토

Windows 11 데스크톱에서 작업 표시줄을 찾습니다. 작업 표시줄에는 다음을 포함하여 이 랩에서 사용할 애플리케이션에 대한 아이콘이 포함되어 있습니다.

  • Microsoft Edge
  • 파일 탐색기
  • Visual Studio Code
  • Azure PowerShell

랩 시나리오

이 랩에서는 나중에 검토할 수 있도록 Application Insights 데이터를 모니터링하고 기록하는 데 사용할 Application Insights 리소스를 Azure에 만듭니다. 수요가 특정 임계값으로 증가하는 경우 API는 자동으로 스케일링되도록 설정되고 데이터 로깅이 서비스 활용 방법을 결정하는 데 도움을 줍니다.

아키텍처 다이어그램

Azure에 배포된 서비스의 모니터링을 보여 주는 아키텍처 다이어그램

연습 1: Azure 리소스 만들기 및 구성

작업 1: Azure Portal 열기

  1. 작업 표시줄에서 Microsoft Edge 아이콘을 선택합니다.

  2. 브라우저 창에서 Azure Portal(https://portal.azure.com)로 이동한 다음, 이 랩에 사용할 계정으로 로그인합니다.

    참고: Azure Portal에 처음 로그인하는 경우 포털 둘러보기가 제공됩니다. 둘러보기를 건너뛰고 포털 사용을 시작하려면 시작하기를 선택합니다.

작업 2: Application Insights 리소스 만들기

  1. Azure Portal에서 페이지 위쪽의 검색 리소스, 서비스 및 문서 텍스트 상자를 사용하여 Application Insights를 검색한 다음, 결과 목록에서 Application Insights를 선택합니다.

  2. Application Insights 블레이드에서 + 만들기를 선택합니다.

  3. Application Insights 블레이드의 기본 사항 탭에서 다음 작업을 수행하고 검토 + 만들기를 선택합니다.

    설정 작업
    구독 드롭다운 목록 기본값을 유지합니다.
    리소스 그룹 섹션 새로 만들기를 선택하고, MonitoredAssets를 입력한 다음, 확인을 선택합니다.
    이름 텍스트 상자 instrm [사용자 이름]
    지역 드롭다운 목록 Application Insights 리소스를 배포할 수 있는 Azure 지역 선택
    리소스 모드 섹션 작업 영역 기반 옵션을 선택합니다.
    작업 영역 세부 정보 섹션 구독Log Analytics 작업 영역 드롭다운 목록의 기본값을 유지합니다.

    다음 스크린샷은 Application Insights 블레이드에 구성된 설정을 표시합니다.

    Azure Application Insights 인스턴스 만들기 블레이드

  4. 검토 + 만들기 탭에서 이전 단계에서 선택한 옵션을 검토합니다.

  5. 지정된 구성을 사용하여 Application Insights 인스턴스를 만들려면 만들기를 선택합니다.

    참고: 이 랩을 계속 진행하기 전에 만들기 작업이 완료될 때까지 기다립니다.

  6. Microsoft.AppInsights | 개요 블레이드에서 리소스로 이동 단추를 선택하여 새로 만든 Application Insights 리소스의 블레이드로 이동합니다.

  7. Application Insights 블레이드의 구성 섹션에서 속성 링크를 선택합니다.

  8. 속성 블레이드의 계측 키 항목 옆에 있는 클립보드로 복사 단추를 선택한 다음, 복사된 값을 기록합니다. 이 값은 이 랩의 뒷부분에서 사용합니다.

    참고: 이 키는 클라이언트 애플리케이션에서 특정 Application Insights에 연결하는 데 사용합니다.

작업 3: Azure 웹 API 리소스 만들기

  1. Azure Portal에서 페이지 위쪽에 있는 리소스, 서비스 및 문서 검색 텍스트 상자를 사용하여 App Services를 검색한 다음, 결과 목록에서 App Services를 선택합니다.

  2. App Services 블레이드에서 + 만들기를 선택합니다.

  3. 웹앱 만들기 블레이드의 기본 사항 탭에서 다음 작업을 수행하고 모니터링 탭을 선택합니다.

    설정 작업
    구독 드롭다운 목록 기본값을 유지합니다.
    리소스 그룹 드롭다운 목록 MonitoredAssets를 선택합니다.
    이름 텍스트 상자 smpapi [사용자 이름] 을 입력합니다.
    게시 섹션 코드 선택
    런타임 스택 드롭다운 목록 .NET 8(LTS) 을 선택합니다.
    운영 체제 섹션 Windows를 선택합니다.
    지역 드롭다운 목록 Application Insights 리소스 위치로 선택한 것과 동일한 지역 선택
    Windows 플랜(미국 동부) 섹션 새로 만들기를 선택하고, 이름 텍스트 상자에 MonitoredPlan을 입력한 다음, 확인을 선택합니다.
    가격 책정 플랜 섹션 기본값을 유지합니다.
  4. 모니터링 탭에서 다음 작업을 수행한 다음, 검토 + 만들기를 선택합니다.

    설정 작업
    Application Insights 사용 섹션 가 선택되어 있는지 확인합니다.
    Application Insights 드롭다운 목록 이 랩에서 이전에 만든 instrm [사용자 이름] Application Insights 리소스를 선택합니다.
  5. 검토 + 만들기 탭에서 이전 단계에서 선택한 옵션을 검토합니다.

  6. 지정된 구성을 사용하여 웹 API를 만들려면 만들기를 선택합니다.

    참고: 이 랩을 계속 진행하기 전에 만들기 작업이 완료될 때까지 기다립니다.

  7. 배포 개요 블레이드에서 리소스로 이동 단추를 선택하여 새로 만든 Azure 웹 API의 블레이드로 이동합니다.

  8. App Service 블레이드의 설정 섹션에서 구성 링크를 선택합니다.

  9. 구성 섹션에서 다음 작업을 수행합니다.

    a. 애플리케이션 설정 탭에서 값 표시를 선택하여 웹 API와 연결된 비밀을 표시합니다.

    b. APPLICATIONINSIGHTS_CONNECTION_STRING 키를 나타내는 값을 기록해 둡니다. 이 값은 웹 API 리소스를 빌드할 때 자동으로 설정되었습니다.

  10. App Service 블레이드의 설정 섹션에서 속성 링크를 선택합니다.

  11. 속성 섹션에서 URL 링크의 값을 기록합니다. 나중에 랩에서 이 값을 사용하여 웹 API에 요청을 제출합니다.

작업 4: 웹 API 자동 스케일링 옵션 구성

  1. App Service 블레이드의 설정 섹션에서 스케일 아웃(App Service 요금제) 링크를 선택합니다.

  2. 스케일 아웃 방법이 표시될 때까지 아래로 스크롤합니다. 규칙 기반 옵션을 클릭한 다음 규칙 기반 크기 조정 관리를 선택합니다.

스케일 아웃 방법에 대한 올바른 옵션 선택

  1. 스케일 아웃 섹션에서 다음 작업을 수행한 다음, 저장을 선택합니다.

    설정 작업
    스케일 아웃 섹션 사용자 지정 자동 크기 조정을 선택합니다.
    자동 스케일링 설정 이름 텍스트 상자 ComputeScaler를 입력합니다.
    리소스 그룹 드롭다운 목록 MonitoredAssets를 선택합니다.
    스케일링 모드 섹션 메트릭에 따라 스케일링을 선택합니다.
    인스턴스 제한 섹션의 최소 텍스트 상자 1 입력
    인스턴스 제한 섹션의 최대 텍스트 상자 8을 입력합니다.
    인스턴스 제한 섹션의 기본 텍스트 상자 3을 입력합니다.

    다음 스크린샷은 App Service 블레이드의 스케일 아웃 섹션에 구성된 설정을 표시합니다.

    Azure 웹 API 블레이드의 기본 스케일링 조건

    설정 작업
    규칙 섹션 규칙 추가를 선택합니다.
    스케일링 규칙 블레이드 모든 설정에 대한 기본값을 유지하고 추가를 선택합니다.

    다음 스크린샷은 App Service 블레이드의 스케일 아웃 섹션에 추가 설정을 표시합니다.

    Azure 웹 API 블레이드에서 기본 스케일링 조건의 스케일링 규칙 블레이드

    참고: 이 랩을 계속 진행하기 전에 저장 작업이 완료될 때까지 기다립니다.

검토

이 연습에서는 랩의 나머지 부분에 사용할 Azure 리소스를 만들었습니다.

연습 2: Application Insights를 사용하여 로컬 웹 API 모니터링

작업 1: .NET 웹 API 프로젝트 빌드

  1. 랩 컴퓨터에서 Visual Studio Code를 시작합니다.

  2. Visual Studio Code의 파일 메뉴에서 폴더 열기를 선택합니다.

  3. 폴더 열기 창에서 Allfiles (F):\Allfiles\Labs\11\Starter\Api로 이동한 다음, 폴더 선택을 선택합니다.

  4. Visual Studio Code 창의 메뉴 모음에서 터미널을 선택한 다음, 새 터미널*을 선택합니다.

  5. 터미널 프롬프트에서 다음 명령을 실행하여 현재 디렉터리에 SimpleApi라는 새 .NET Web API 애플리케이션을 만듭니다.

     dotnet new webapi --output . --name SimpleApi --framework net8.0
    
  6. 다음 명령을 실행하여 NuGet에서 현재 프로젝트로 Microsoft.ApplicationInsights 버전 2.21.0을 가져옵니다.

     dotnet add package Microsoft.ApplicationInsights --version 2.21.0
    

    참고: dotnet add package 명령은 NuGet에서 Microsoft.ApplicationInsights 패키지를 추가합니다. 자세한 내용은 Microsoft.ApplicationInsights를 참조하세요.

  7. 다음 명령을 실행하여 NuGet에서 Microsoft.ApplicationInsights.AspNetCore 버전 2.21.0을 가져옵니다.

     dotnet add package Microsoft.ApplicationInsights.AspNetCore --version 2.21.0
    

    참고: dotnet add package 명령은 NuGet에서 Microsoft.ApplicationInsights.AspNetCore 패키지를 추가합니다. 자세한 내용은 Microsoft.ApplicationInsights.AspNetCore를 참조하세요.

  8. 터미널 프롬프트에서 다음 명령을 실행하여 NuGet에서 현재 프로젝트로 Microsoft.ApplicationInsights.PerfCounterCollector 버전 2.21.0을 가져옵니다.

     dotnet add package Microsoft.ApplicationInsights.PerfCounterCollector --version 2.21.0
    

    참고: dotnet add package 명령은 NuGet에서 Microsoft.ApplicationInsights.PerfCounterCollector 패키지를 추가합니다. 자세한 내용은 Microsoft.ApplicationInsights.PerfCounterCollector를 참조하세요.

  9. 터미널 프롬프트에서 다음 명령을 실행하여 NuGet에서 현재 프로젝트로 Microsoft.ApplicationInsights.Profiler.AspNetCore 버전 2.4.0을 가져옵니다.

     dotnet add package Microsoft.ApplicationInsights.Profiler.AspNetCore --version 2.4.0
    

    참고: dotnet add package 명령은 NuGet에서 Microsoft.ApplicationInsights.Profiler.AspNetCore 패키지를 추가합니다. 자세한 내용은 Microsoft.ApplicationInsights.Profiler.AspNetCore를 참조하세요.

  10. 터미널 프롬프트에서 다음 명령을 실행하여 .NET Web API를 빌드합니다.

     dotnet build
    

작업 2: HTTPS를 사용하지 않고 Application Insights를 사용하도록 앱 코드 업데이트

  1. Visual Studio Code 창의 탐색기 창에서 Program.cs 파일을 선택하여 편집기 창에서 파일을 엽니다.

  2. 편집기 창의 줄 17에 있는 다음 코드를 찾아서 삭제합니다.

     app.UseHttpsRedirection();
    

    참고: 이 코드 줄을 사용하면 웹 API가 HTTPS를 강제로 사용합니다. 이 랩에서는 필요가 없습니다.

  3. Program.cs 파일에서 7줄부터 다음 두 줄을 추가해 Application Insights와 함께 서비스 컬렉션에 등록하여 Profiler를 활성화합니다.

     builder.Services.AddApplicationInsightsTelemetry();
     builder.Services.AddServiceProfiler();
    
  4. Program.cs 파일을 저장하고 닫습니다.

  5. Visual Studio Code 창의 탐색기 창에서 appsettings.json 파일을 선택하여 편집기 창에서 파일을 엽니다.

  6. 로깅 요소 바로 다음에 다음 요소를 appsettings.json 파일에 추가하고 instrumentation-key 자리 표시자를 이 랩의 앞부분에서 기록한 Application Insights 리소스 계측 키 값으로 바꿉니다.

        "ApplicationInsights":
        {
           "InstrumentationKey": "instrumentation-key"
        },
    

    참고: 추가하려는 섹션이 파일의 마지막 요소인 경우 후행 쉼표는 제거합니다.

  7. 이제 appsettings.json 파일의 구조가 다음과 비슷해 보일 것입니다.

    ```json { “Logging”:{ “LogLevel”: { “Default”: “Information”, “Microsoft.AspNetCore”: “Warning” } }, “ApplicationInsights”: { “InstrumentationKey”: “instrumentation-key” }, “AllowedHosts”: “*” }

    Note” Ensure you have replaced the placeholder with your own instrumentation key that you recorded earlier.

  8. Save the changes to the appsettings.json file and close it.

  9. At the terminal prompt, run the following command to build the .NET Web API.

     dotnet publish -c Release -r win-x86 --self-contained -p:PublishReadyToRun=true .\SimpleApi.csproj
    

Task 3: Test an API application locally

  1. At the terminal prompt, run the following command to launch the .NET Web API.

     dotnet run
    
  2. Review the output of the command and note the HTTP URL that the site is listening on.

  3. From the taskbar, open the context menu for the Microsoft Edge icon, and then open a new browser window.

  4. In the browser window that opens, navigate to the http://localhost URL and add the /weatherforecast relative path of your web API.

    Note: The full URL is http://localhost:[port-number]/weatherforecast, where the [port-number] placeholder identifies the port number at which the web app is accessible via the HTTP protocol.

    Note: The page should contain an output in the following format. The actual values will be different.

     [
         {
             "date": "2023-10-29",
             "temperatureC": -8,
             "summary": "Sweltering",
             "temperatureF": 18
         },
         {
             "date": "2023-10-30",
             "temperatureC": -12,
             "summary": "Hot",
             "temperatureF": 11
         },
         {
             "date": "2023-10-31",
             "temperatureC": 50,
             "summary": "Chilly",
             "temperatureF": 121
         },
         {
             "date": "2023-11-01",
             "temperatureC": 51,
             "summary": "Chilly",
             "temperatureF": 123
         },
         {
             "date": "2023-11-02",
             "temperatureC": 29,
             "summary": "Balmy",
             "temperatureF": 84
         }
     ]
    
  5. 일부 응답을 시뮬레이션하려면 브라우저 페이지를 여러 번 새로 고칩니다.

  6. http://localhost:[port-number]/weatherforecast에서 생성한 페이지를 표시하는 브라우저 창을 닫습니다.

  7. Visual Studio Code에서 터미널 종료(휴지통 아이콘)를 선택하여 터미널 창과 모든 연결된 프로세스를 닫습니다.

작업 4: Application Insights에서 메트릭 검토

  1. 랩 컴퓨터에서 Azure Portal을 표시하는 Microsoft Edge 브라우저 창으로 전환합니다.

  2. Azure Portal에서 이전에 이 랩에서 만든 instrm [yourname] Application Insights 리소스의 블레이드로 다시 이동합니다.

  3. Application Insights 블레이드의 가운데에 있는 타일에서 표시된 메트릭을 찾습니다. 특히 발생한 서버 요청 수 및 평균 서버 응답 시간을 확인합니다.

    다음 스크린샷은 로컬 웹앱의 Application Insights 메트릭을 표시합니다.

    Azure Portal에서 로컬 웹앱의 Application Insights 메트릭

    참고: Application Insights 메트릭 차트에 요청이 표시되는 데 최대 5분이 걸릴 수 있습니다.

검토

이 연습에서는 ASP.NET 사용하여 API 앱을 만들고 애플리케이션 메트릭을 Application Insights에 스트림하도록 구성했습니다. 그런 다음, Application Insights 대시보드를 사용하여 API에 관한 성능 세부 정보를 검토했습니다.

연습 3: Application Insight를 사용하여 웹 API 모니터링

작업 1: 웹 API에 애플리케이션 배포

  1. 랩 컴퓨터에서 Visual Studio Code로 전환합니다.

  2. Visual Studio Code 창의 메뉴 모음에서 터미널을 선택한 다음, 새 터미널을 선택합니다.

  3. 터미널 프롬프트에서 다음 명령을 실행하여 현재 디렉터리가 배포 파일이 있는 Allfiles (F):\Allfiles\Labs\11\Starter\Api\bin\Release\net8.0\net8.0\win-x86\publish로 설정되어 있는지 확인합니다.

     cd F:\Allfiles\Labs\11\Starter\Api\bin\Release\net8.0\win-x86\publish\
    
  4. 다음 명령을 실행하여 Azure 웹 API 옆에 배포할 시작 프로젝트가 포함된 zip 파일을 만듭니다.

     Compress-Archive -Path * -DestinationPath api.zip
    
  5. 터미널 프롬프트에서 다음 명령을 실행하여 Azure PowerShell을 통해 Azure 구독에 로그인합니다.

     Connect-AzAccount
    
  6. 메시지가 표시되면 이 랩에 사용하는 Azure 구독에 액세스하기 위한 자격 증명을 제공하여 인증합니다.

    참고: 로그인 프로세스가 완료될 때까지 기다립니다.

  7. 다음 명령을 실행하여 MonitoredAssets 리소스 그룹의 모든 웹앱 목록을 표시합니다.

     Get-AzWebApp -ResourceGroupName MonitoredAssets
    
  8. 다음 명령을 실행하여 이름이 smpapi* 로 시작하는 웹앱 목록을 MonitoredAssets 리소스 그룹에 표시합니다.

     Get-AzWebApp -ResourceGroupName MonitoredAssets | Where-Object {$_.Name -like 'smpapi*'}
    
  9. 다음 명령을 실행하여 이전 단계에서 식별된 첫 번째 웹앱의 이름을 표시하고 $webAppName이라는 변수에 저장합니다.

     Get-AzWebApp -ResourceGroupName MonitoredAssets | Where-Object {$_.Name -like 'smpapi*'} | Select-Object -ExpandProperty Name
     $webAppName = (Get-AzWebApp -ResourceGroupName MonitoredAssets | Where-Object {$_.Name -like 'smpapi*'})[0] | Select-Object -ExpandProperty Name
    
  10. 다음 명령을 실행하여 이전에 이 작업에서 만든 api.zip 파일을 이전 단계에서 이름을 식별한 웹 API에 배포합니다.

     Publish-AzWebApp -ResourceGroupName MonitoredAssets -Name $webAppName -ArchivePath "F:\Allfiles\Labs\11\Starter\Api\bin\Release\net8.0\win-x86\publish\api.zip" -force
    

    참고: 이 랩을 계속 진행하기 전에 배포가 완료될 때까지 기다립니다.

  11. 랩 컴퓨터에서 또 다른 Microsoft Edge 브라우저 창을 시작합니다.

  12. 브라우저 창에서 접미사 /weatherforecast를 해당 URL(이전에 이 랩에서 기록함)에 추가하여 이전에 이 작업에서 API 앱을 배포한 Azure 웹 API 앱으로 이동합니다.

    참고: 예를 들어, URL이 https://smpapianu.azurewebsites.net인 경우 새 URL은 https://smpapianu.azurewebsites.net/weatherforecast입니다.

  13. 출력이 API 앱을 로컬로 실행할 때 생성된 출력과 유사한지 확인합니다.

    참고: 출력에는 여러 값이 포함되지만 형식은 같아야 합니다.

작업 2: Web Apps에 대한 심층 메트릭 컬렉션 구성

  1. 랩 컴퓨터에서 Azure Portal을 표시하는 Microsoft Edge 브라우저 창으로 전환합니다.

  2. Azure Portal에서 이전에 이 랩에서 만든 smpapi [yourname] 웹앱 리소스의 블레이드로 다시 이동합니다.

  3. App Service 블레이드에서 Application Insights를 선택합니다.

  4. Application Insights 블레이드에서 다음 작업을 수행하고, 적용을 선택한 다음, 확인 대화 상자에서 를 선택합니다.

    설정 작업
    Application Insights 슬라이더 사용으로 설정되어 있는지 확인합니다.
    애플리케이션 계측 섹션 .NET 탭을 선택합니다.
    컬렉션 수준 섹션 권장을 선택합니다.
    프로파일러 섹션 켜기를 선택합니다.
    스냅샷 디버거 섹션 끄기를 선택합니다.
    SQL 명령 섹션 끄기를 선택합니다.

    다음 스크린샷은 Azure 웹 API의 Application Insights 설정을 표시합니다.

    Azure 웹 API의 Application Insights 설정

  5. 이전 작업에서 연 브라우저 탭으로 전환하여 대상 Azure API 앱(대상 URL의 /weatherforecast 상대 경로 포함)에 API 앱을 배포한 결과를 표시하고 브라우저 페이지를 여러 번 새로 고칩니다.

  6. API에서 생성된 JSON 형식 출력을 검토합니다.

  7. JSON 형식 출력에 액세스하는 데 사용한 URL을 기록합니다.

    참고: smpapianu가 이전에 만든 사이트 이름인 경우 URL은 https://smpapianu.azurewebsites.net/weatherforecast 형식이어야 합니다.

작업 3: Application Insights에서 업데이트된 메트릭 가져오기

  1. Azure Portal에서 Azure 웹앱을 표시하는 브라우저 창으로 돌아갑니다.

  2. 웹앱의 Application Insights 블레이드에서 Application Insights 데이터 보기 링크를 선택합니다.

  3. Application Insights 블레이드에서 발생한 서버 요청 수, 평균 서버 응답 시간 등을 포함하여 블레이드 가운데에 있는 타일에서 수집된 메트릭을 검토합니다.

    다음 스크린샷은 Azure Portal에서 Azure 웹앱의 Application Insights 메트릭을 표시합니다.

    Azure Portal에서 Azure 웹앱의 Application Insights 메트릭

    참고: 업데이트된 메트릭이 Application Insights 메트릭 차트에 표시되는 데 최대 5분이 걸릴 수 있습니다.

작업 4: Application Insights에서 실시간 메트릭 보기

  1. Application Insights 블레이드의 조사 섹션에서 라이브 메트릭을 선택합니다.

  2. 대상 Azure 웹앱에서 실행되는 대상 API 앱(대상 URL의 /weatherforecast 상대 경로를 대상으로 함)을 표시하는 브라우저 창으로 다시 전환한 다음, 브라우저 페이지를 여러 번 새로 고칩니다.

  3. 라이브 메트릭 블레이드를 표시하는 브라우저 창으로 전환하고 해당 콘텐츠를 검토합니다.

    참고: 들어오는 요청 섹션은 몇 초 내에 업데이트되어 웹앱에 대한 요청을 표시합니다.

검토

이 연습에서는 웹 API 앱의 Application Insights 로깅을 구성 및 테스트하고 요청에 대한 실시간 정보를 확인했습니다.