Включение Snapshot Debugger для приложений .NET в Service Fabric, Облачной службе и Виртуальных машинах Microsoft Azure

Если ваше приложение ASP.NET или ASP.NET Core работает в службе приложений и требует индивидуальной конфигурации Snapshot Debugger или предварительной версии .NET Core, воспользуйтесь статьей Включение отладчика моментальных снимков для приложений .NET в Службе приложений Azure.

Если приложение выполняется в Azure Service Fabric, облачной службе, на Виртуальных машинах или локальных компьютерах, вы можете обойтись без включения Snapshot Debugger в службах приложений и срезу перейти к следующему руководству.

Настройка сбора моментальных снимков для приложений

Предварительное требование

Включение Application Insights в веб-приложении.

  1. Добавьте в приложение пакет NuGet Microsoft.ApplicationInsights.SnapshotCollector.

  2. При необходимости настройте конфигурацию Snapshot Debugger, внесенную в файл ApplicationInsights.config.

    По умолчанию конфигурация Snapshot Debugger почти пуста и в ней нет обязательных параметров. Ниже приведен пример, в котором показана конфигурация, эквивалентная конфигурации по умолчанию.

    <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 или более поздних версий

Предварительные требования

Включите Application Insights в веб-приложении ASP.NET Core, если вы еще не сделали это.

Примечание

Убедитесь, что приложение ссылается на версию 2.1.1 или более позднюю версию пакета Microsoft.ApplicationInsights.AspNetCore.

  1. Добавьте в приложение пакет NuGet Microsoft.ApplicationInsights.SnapshotCollector.

  2. Чтобы добавить и настроить обработчик телеметрии сборщика моментальных снимков, измените класс Startup своего приложения.

    1. Если используется пакет NuGet Microsoft.ApplicationInsights.SnapshotCollector версии 1.3.5 или выше, добавьте следующие операторы using в Startup.cs:

           using Microsoft.ApplicationInsights.SnapshotCollector;
      

      В конец метода ConfigureServices в классе Startup в файле Startup.cs добавьте следующий код:

           services.AddSnapshotCollector((configuration) => Configuration.Bind(nameof(SnapshotCollectorConfiguration), configuration));
      
    2. Если используется пакет NuGet Microsoft.ApplicationInsights.SnapshotCollector версии 1.3.4 или ниже, добавьте следующие операторы using в Startup.cs.

      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);
              }
          }
          ...
      

      Добавьте службы SnapshotCollectorConfiguration и SnapshotCollectorTelemetryProcessorFactory в конвейер запуска:

         // 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. При необходимости настройте конфигурацию Snapshot Debugger, добавив раздел SnapshotCollectorConfiguration в файл appsettings.json.

    Все параметры в конфигурации Snapshot Debugger являются необязательными. Ниже приведен пример, в котором показана конфигурация, эквивалентная конфигурации по умолчанию.

    {
      "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. Добавьте в приложение пакет NuGet Microsoft.ApplicationInsights.SnapshotCollector.

  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.
        }
    }
    

Примечание

Поддержка приема ключей инструментирования будет завершена 31 марта 31, 2025 г. Функция продолжит работать, но не будет обновляться или поддерживаться. Перейдите на строки подключения, чтобы использовать новые возможности.

Дальнейшие действия

  • Создайте для приложения трафик, который может вызвать исключение. После этого подождите 10–15 минут, пока снимки не будут отправлены в экземпляр Application Insights.
  • См. снимки состояния на портале Azure.
  • Для получения помощи по устранению неполадок отладчика снимков см. Устранение неполадок Snapshot Debugger.