Поделиться через


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

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

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

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

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

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

Если вы не видите SnapshotCollectorTelemetryProcessor ApplicationInsights.configили хотите настроить конфигурацию отладчика моментальных снимков, ее можно изменить вручную.

Примечание.

Любые конфигурации вручную могут перезаписывать при обновлении до более новой версии пакета NuGet Microsoft.ApplicationInsights.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>

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

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

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

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

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

Добавьте пакет NuGet Microsoft.ApplicationInsights.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 который можно переопределить значения по умолчанию.

Конфигурация сборщика моментальных снимков по умолчанию 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 Application Insights автоматически сообщает необработанные исключения, которые экранирует метод контроллера или обработчик маршрутов конечной точки.

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

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. В этом примере предполагается, что вы используете поставщик средства ведения журнала Application Insights. Как показано в примере, при обработке исключения обязательно передайте исключение в качестве первого параметра 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 Application Insights перенаправит исключения в отладчик моментальных снимков.TelemetryClient.TrackException Это поведение управляется свойством TrackExceptionsAsExceptionTelemetry класса ApplicationInsightsLoggerOptions .

Если задано TrackExceptionsAsExceptionTelemetry значение false при настройке средства ведения журнала Application Insights, предыдущий пример не активирует отладчик моментальных снимков. В этом случае измените код для вызова TrackException вручную.

Примечание.

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

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