Azure Service Fabric、クラウド サービス、および Virtual Machines で .NET アプリのスナップショット デバッガーを有効にする

ASP.NET または ASP.NET Core アプリケーションが App Service で実行され、カスタマイズされたスナップショット デバッガー構成、またはプレビュー バージョンの .NET Core が必要な場合は、App Services のスナップショット デバッガーを有効にすることに関するハウツー ガイドから始めます。

アプリケーションが Azure Service Fabric、Cloud Service、Virtual Machines、またはオンプレミスのマシンで実行されている場合は、App Services でスナップショット デバッガーを有効にすることをスキップして、このガイドに進むことができます。

ASP.NET アプリケーションのスナップショット コレクションの構成

前提条件

Web アプリで Application Insights を有効にします

  1. Microsoft.ApplicationInsights.SnapshotCollector NuGet パッケージをアプリに含めます。

  2. 必要に応じて、ApplicationInsights.config に追加されたスナップショット デバッガー構成をカスタマイズします。

    既定のスナップショット デバッガー構成はほぼ空であり、すべての設定が省略可能です。 既定の構成と同じ構成を示す例を次に示します。

    <TelemetryProcessors>
        <Add Type="Microsoft.ApplicationInsights.SnapshotCollector.SnapshotCollectorTelemetryProcessor, Microsoft.ApplicationInsights.SnapshotCollector">
        <!-- The default is true, but you can disable Snapshot Debugging by setting it to false -->
        <IsEnabled>true</IsEnabled>
        <!-- Snapshot Debugging is usually disabled in developer mode, but you can enable it by setting this to true. -->
        <!-- DeveloperMode is a property on the active TelemetryChannel. -->
        <IsEnabledInDeveloperMode>false</IsEnabledInDeveloperMode>
        <!-- How many times we need to see an exception before we ask for snapshots. -->
        <ThresholdForSnapshotting>1</ThresholdForSnapshotting>
        <!-- The maximum number of examples we create for a single problem. -->
        <MaximumSnapshotsRequired>3</MaximumSnapshotsRequired>
        <!-- The maximum number of problems that we can be tracking at any time. -->
        <MaximumCollectionPlanSize>50</MaximumCollectionPlanSize>
        <!-- How often we reconnect to the stamp. The default value is 15 minutes.-->
        <ReconnectInterval>00:15:00</ReconnectInterval>
        <!-- How often to reset problem counters. -->
        <ProblemCounterResetInterval>1.00:00:00</ProblemCounterResetInterval>
        <!-- The maximum number of snapshots allowed in ten minutes.The default value is 1. -->
        <SnapshotsPerTenMinutesLimit>3</SnapshotsPerTenMinutesLimit>
        <!-- The maximum number of snapshots allowed per day. -->
        <SnapshotsPerDayLimit>30</SnapshotsPerDayLimit>
        <!-- Whether or not to collect snapshot in low IO priority thread. The default value is true. -->
        <SnapshotInLowPriorityThread>true</SnapshotInLowPriorityThread>
        <!-- Agree to send anonymous data to Microsoft to make this product better. -->
        <ProvideAnonymousTelemetry>true</ProvideAnonymousTelemetry>
        <!-- The limit on the number of failed requests to request snapshots before the telemetry processor is disabled. -->
        <FailedRequestLimit>3</FailedRequestLimit>
        </Add>
    </TelemetryProcessors>
    
  3. スナップショットは、Application Insights にレポートされる例外についてのみ収集されます。 場合によっては (たとえば、.NET プラットフォームの古いバージョン)、例外コレクションを構成して、ポータルでスナップショット付きの例外を表示する必要があります。

ASP.NET Core LTS 以降を使用してアプリケーションのスナップショット コレクションを構成する

前提条件

まだ有効にしていない場合は、ASP.NET Core Web アプリで Application Insights を有効にします。

Note

お使いのアプリケーションが、2.1.1 以降のバージョンの Microsoft.ApplicationInsights.AspNetCore パッケージを参照していることを確認します。

  1. Microsoft.ApplicationInsights.SnapshotCollector NuGet パッケージをアプリに含めます。

  2. アプリケーションの Startup クラスを変更し、スナップショット コレクターのテレメトリ プロセッサを追加および構成します。

    1. Microsoft.ApplicationInsights.SnapshotCollector NuGet パッケージ バージョン 1.3.5 以降を使用している場合は、Startup.cs に次の using ステートメントを追加します。

           using Microsoft.ApplicationInsights.SnapshotCollector;
      

      Startup.csStartup クラス内にある ConfigureServices メソッドの末尾に次を追加します。

           services.AddSnapshotCollector((configuration) => Configuration.Bind(nameof(SnapshotCollectorConfiguration), configuration));
      
    2. Microsoft.ApplicationInsights.SnapshotCollector NuGet パッケージ バージョン 1.3.4 以前を使用している場合は、Startup.cs に次の using ステートメントを追加します。

      using Microsoft.ApplicationInsights.SnapshotCollector;
      using Microsoft.Extensions.Options;
      using Microsoft.ApplicationInsights.AspNetCore;
      using Microsoft.ApplicationInsights.Extensibility;
      

      次の SnapshotCollectorTelemetryProcessorFactory クラスを Startup クラスに追加します。

      class Startup
      {
          private class SnapshotCollectorTelemetryProcessorFactory : ITelemetryProcessorFactory
          {
              private readonly IServiceProvider _serviceProvider;
      
              public SnapshotCollectorTelemetryProcessorFactory(IServiceProvider serviceProvider) =>
                  _serviceProvider = serviceProvider;
      
              public ITelemetryProcessor Create(ITelemetryProcessor next)
              {
                  var snapshotConfigurationOptions = _serviceProvider.GetService<IOptions<SnapshotCollectorConfiguration>>();
                  return new SnapshotCollectorTelemetryProcessor(next, configuration: snapshotConfigurationOptions.Value);
              }
          }
          ...
      

      SnapshotCollectorConfigurationSnapshotCollectorTelemetryProcessorFactory サービスをスタートアップ パイプラインに追加します。

         // This method gets called by the runtime. Use this method to add services to the container.
         public void ConfigureServices(IServiceCollection services)
         {
             // Configure SnapshotCollector from application settings
             services.Configure<SnapshotCollectorConfiguration>(Configuration.GetSection(nameof(SnapshotCollectorConfiguration)));
      
             // Add SnapshotCollector telemetry processor.
             services.AddSingleton<ITelemetryProcessorFactory>(sp => new SnapshotCollectorTelemetryProcessorFactory(sp));
      
             // TODO: Add other services your application needs here.
         }
      }
      
  3. 必要に応じて、appsettings.jsonSnapshotCollectorConfiguration セクションを追加して、スナップショット デバッガー構成をカスタマイズします。

    スナップショット デバッガー構成のすべての設定は省略可能です。 既定の構成と同じ構成を示す例を次に示します。

    {
      "SnapshotCollectorConfiguration": {
        "IsEnabledInDeveloperMode": false,
        "ThresholdForSnapshotting": 1,
        "MaximumSnapshotsRequired": 3,
        "MaximumCollectionPlanSize": 50,
        "ReconnectInterval": "00:15:00",
        "ProblemCounterResetInterval":"1.00:00:00",
        "SnapshotsPerTenMinutesLimit": 1,
        "SnapshotsPerDayLimit": 30,
        "SnapshotInLowPriorityThread": true,
        "ProvideAnonymousTelemetry": true,
        "FailedRequestLimit": 3
      }
    }
    

その他の .NET アプリケーションのスナップショット コレクションの構成

  1. アプリケーションがまだ Application Insights を使用してインストルメント化されていない場合、まずApplication Insights を有効にし、インストルメンテーション キーを設定します。

  2. Microsoft.ApplicationInsights.SnapshotCollector NuGet パッケージをアプリに追加します。

  3. スナップショットは、Application Insights にレポートされる例外についてのみ収集されます。 例外をレポートするようにコードを変更する必要があります。 例外処理コードは、アプリケーションの構造によって異なります。次に例を示します。

    TelemetryClient _telemetryClient = new TelemetryClient();
    
    void ExampleRequest()
    {
        try
        {
            // TODO: Handle the request.
        }
        catch (Exception ex)
        {
            // Report the exception to Application Insights.
            _telemetryClient.TrackException(ex);
    
            // TODO: Rethrow the exception if desired.
        }
    }
    

注意

インストルメンテーション キーのインジェストのサポートは、2025 年 3 月 31 日に終了します。 インストルメンテーション キーのインジェストは引き続き機能しますが、この機能の更新プログラムやサポートは提供されなくなります。 接続文字列に移行することで、新機能をご利用いただけます。

次のステップ

  • 例外をトリガーできるアプリケーションへのトラフィックを生成します。 その後、Application Insights インスタンスにスナップショットが送信がされるまで 10 ~ 15 分待機します。
  • Azure portal でスナップショットを確認します。
  • スナップショット デバッガーの問題のトラブルシューティングについては、スナップショット デバッガーのトラブルシューティングのページを参照してください。