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

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

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

대부분의 애플리케이션의 경우 무료 및 공유 서비스 계층에는 스냅샷을 저장할 수 있는 충분한 메모리나 디스크 공간이 없습니다.

전제 조건

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

스냅샷 디버거 사용

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

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

스냅샷 디버거는 Azure Functions 런타임의 일부로 미리 설치되며 기본적으로 사용하지 않도록 설정됩니다. 런타임에 포함되어 있으므로 추가 NuGet 패키지 또는 애플리케이션 설정을 추가할 필요가 없습니다.

아래의 간단한 .NET Core 함수 앱 예제에서 .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
      }
    }
  }
}

애플리케이션 예외를 쉽게 진단할 수 있도록 모든 앱에서 스냅샷 디버거를 사용하도록 설정하는 것이 좋습니다.

다음 단계

  • 예외를 트리거할 수 있는 애플리케이션에 대한 트래픽을 생성합니다. 그런 다음, 스냅샷이 Application Insights 인스턴스로 전송될 때까지 10~15분 정도 기다립니다.
  • Azure Portal에서 스냅샷을 봅니다.
  • Functions 앱에서 사용 사례에 따라 스냅샷 디버거 구성을 사용자 지정합니다. 자세한 내용은 host.json의 스냅샷 구성을 참조하세요.
  • 스냅샷 디버거 문제 해결에 도움이 필요한 경우 스냅샷 디버거 문제 해결을 참조하세요.