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

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

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

Подготовка к работе

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

При добавлении Microsoft.Application Аналитика. Пакет NuGet SnapshotCollector в приложение SnapshotCollectorTelemetryProcessor должен автоматически добавляться в TelemetryProcessors раздел Application Аналитика.config.

Если вы не видите SnapshotCollectorTelemetryProcessor в приложении Аналитика.config или хотите настроить конфигурацию отладчика моментальных снимков, ее можно изменить вручную. Однако эти изменения могут перезаписаться при последующем обновлении до более новой версии Microsoft.Application Аналитика. Пакет NuGet SnapshotCollector.

В следующем примере показана конфигурация, эквивалентная конфигурации по умолчанию:

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

Моментальные снимки собираются только в исключениях, сообщаемые приложению Аналитика. В некоторых случаях (например, в более старых версиях платформы .NET) может потребоваться настроить сбор исключений, чтобы просматривать исключения с помощью моментальных снимков, которые отображаются на портале.

Настройка коллекции моментальных снимков для ASP.NET основных приложений или рабочих служб

Необходимые компоненты

Приложение уже должно ссылаться на один из следующих пакетов NuGet для приложений Аналитика:

Добавьте пакет NuGet

Добавьте Microsoft.Application Аналитика. Пакет NuGet SnapshotCollector в приложение.

Обновление коллекции служб

В коде запуска приложения, где настроены службы, добавьте вызов AddSnapshotCollector метода расширения. Рекомендуется добавить эту строку сразу после вызова AddApplicationInsightsTelemetry. Например:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddApplicationInsightsTelemetry();
builder.Services.AddSnapshotCollector();

Настройка сборщика моментальных снимков

Для большинства ситуаций достаточно параметров по умолчанию. Если нет, настройте параметры, добавив следующий код перед вызовом AddSnapshotCollector()

using Microsoft.ApplicationInsights.SnapshotCollector;
...
builder.Services.Configure<SnapshotCollectorConfiguration>(builder.Configuration.GetSection("SnapshotCollector"));

Затем добавьте SnapshotCollector раздел, чтобы appsettings.json , где можно переопределить значения по умолчанию. В следующем примере показана конфигурация, эквивалентная конфигурации по умолчанию:

{
  "SnapshotCollector": {
    "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
  }
}

Если необходимо вручную настроить поведение сборщика моментальных снимков без использования appsettings.json, используйте перегрузку AddSnapshotCollector , которая принимает делегат. Например:

builder.Services.AddSnapshotCollector(config => config.IsEnabledInDeveloperMode = true);

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

Моментальные снимки собираются только для исключений, которые передаются в Application Insights. Для приложений ASP.NET и ASP.NET Core пакет SDK Аналитика приложений автоматически сообщает необработанные исключения, которые экранирует метод контроллера или обработчик маршрутов конечной точки. Для других приложений может потребоваться изменить код, чтобы сообщить о них. Код обработки исключений зависит от структуры приложения. Приведем пример:

using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.ApplicationInsights.Extensibility;

internal class ExampleService
{
  private readonly TelemetryClient _telemetryClient;

  public ExampleService(TelemetryClient telemetryClient)
  {
    // Obtain the TelemetryClient via dependency injection.
    _telemetryClient = telemetryClient;
  }

  public void HandleExampleRequest()
  {
    using IOperationHolder<RequestTelemetry> operation = 
        _telemetryClient.StartOperation<RequestTelemetry>("Example");
    try
    {
      // TODO: Handle the request.
      operation.Telemetry.Success = true;
    }
    catch (Exception ex)
    {
      // Report the exception to Application Insights.
      operation.Telemetry.Success = false;
      _telemetryClient.TrackException(ex);
      // TODO: Rethrow the exception if desired.
    }
  }
}

В следующем примере используется ILogger вместо TelemetryClient. В этом примере предполагается, что вы используете поставщик средства ведения журнала Аналитика приложения. Как показано в примере, при обработке исключения обязательно передайте исключение в качестве первого параметра LogError.

using Microsoft.Extensions.Logging;

internal class LoggerExample
{
  private readonly ILogger _logger;

  public LoggerExample(ILogger<LoggerExample> logger)
  {
    _logger = logger;
  }

  public void HandleExampleRequest()
  {
    using IDisposable scope = _logger.BeginScope("Example");
    try
    {
      // TODO: Handle the request
    }
    catch (Exception ex)
    {
      // Use the LogError overload with an Exception as the first parameter.
      _logger.LogError(ex, "An error occurred.");
    }
  }
}

Примечание.

По умолчанию приложение Аналитика ведения журнала (ApplicationInsightsLoggerProvider) перенаправит исключения в отладчик моментальных снимков через TelemetryClient.TrackException. Это поведение управляется свойством TrackExceptionsAsExceptionTelemetry класса ApplicationInsightsLoggerOptions . Если задано TrackExceptionsAsExceptionTelemetry значение false при настройке средства ведения журнала приложений Аналитика, предыдущий пример не активирует отладчик моментальных снимков. В этом случае измените код для вызова TrackException вручную.

Примечание.

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

Следующие шаги

  • Создайте трафик для вашего приложения, который может вызвать исключение. Затем подождите 10–15 минут, пока моментальные снимки будут отправлены в экземпляр приложения Аналитика.
  • См. снимки состояния на портале Azure.
  • Устранение неполадок отладчика моментальных снимков.