Azure Functions에서 .NET 및 .NET Core 앱용 스냅샷 디버거 사용

현재 스냅샷 디버거는 Windows 서비스 플랜의 Azure Functions에서 실행되는 ASP.NET 및 ASP.NET Core 앱에 대해 작동합니다.

스냅샷 디버거를 사용하는 경우 기본 또는 상위 서비스 계층에서 애플리케이션을 실행하는 것이 좋습니다. 대부분의 애플리케이션의 경우:

  • 무료 및 공유 서비스 계층에는 스냅샷을 저장할 메모리나 디스크 공간이 충분하지 않습니다.
  • 소비 계층은 현재 스냅샷 디버거에서 사용할 수 없습니다.

스냅샷 디버거는 Azure Functions 런타임의 일부로 사전 설치되어 있으므로 추가 NuGet 패키지나 애플리케이션 설정을 추가할 필요가 없습니다.

전제 조건

Functions 앱에서 Application Insights 모니터링 사용.

스냅샷 디버거 사용

Functions 앱에서 스냅샷 디버거를 사용하도록 설정하려면 snapshotConfiguration 속성을 host.json 파일에 추가하고 함수를 다시 배포합니다. 예시:

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "snapshotConfiguration": {
        "isEnabled": true
      }
    }
  }
}

예외를 트리거할 수 있는 애플리케이션에 대한 트래픽을 생성합니다. 그런 다음, 스냅샷이 Application Insights 인스턴스로 전송될 때까지 10~15분 정도 기다립니다.

.NET 함수 앱 파일을 확인하여 스냅샷 디버거가 사용하도록 설정되었는지 확인할 수 있습니다. 예를 들어, 다음의 간단한 .NET 함수 앱에서 .NET 애플리케이션의 .csproj, {Your}Function.cshost.json은 스냅샷 디버거가 사용하도록 설정된 것으로 표시됩니다.

Project.csproj

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <AzureFunctionsVersion>v2</AzureFunctionsVersion>
</PropertyGroup>
<ItemGroup>
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.31" />
</ItemGroup>
<ItemGroup>
    <None Update="host.json">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
</ItemGroup>
</Project>

{Your}Function.cs

using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;

namespace SnapshotCollectorAzureFunction
{
    public static class ExceptionFunction
    {
        [FunctionName("ExceptionFunction")]
        public static Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            throw new NotImplementedException("Dummy");
        }
    }
}

Host.json

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingExcludedTypes": "Request",
      "samplingSettings": {
        "isEnabled": true
      },
      "snapshotConfiguration": {
        "isEnabled": true
      }
    }
  }
}

다른 클라우드의 스냅샷 디버거를 사용하도록 설정

현재 엔드포인트 수정이 필요한 유일한 지역은 Azure Government21Vianet에서 운영하는 Microsoft Azure입니다.

다음 예제에서는 미국 정부 클라우드 에이전트 엔드포인트로 업데이트된 host.json을 보여 줍니다.

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingExcludedTypes": "Request",
      "samplingSettings": {
        "isEnabled": true
      },
      "snapshotConfiguration": {
        "isEnabled": true,
        "agentEndpoint": "https://snapshot.monitor.azure.us"
      }
    }
  }
}

다음은 스냅샷 디버거 에이전트 엔드포인트의 지원되는 재정의입니다.

속성 미국 정부 클라우드: 중국 클라우드
AgentEndpoint https://snapshot.monitor.azure.us https://snapshot.monitor.azure.cn

스냅샷 디버거 사용 안 함

Functions 앱에서 스냅샷 디버거를 사용하지 않도록 설정하려면 snapshotConfiguration.isEnabled 속성을 false로 설정하여 host.json 파일을 업데이트합니다.

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "snapshotConfiguration": {
        "isEnabled": false
      }
    }
  }
}

다음 단계