Включение отладчика моментальных снимков для приложений .NET в Azure Service Fabric, Облачные службы и Виртуальные машины
Если приложение ASP.NET или ASP.NET Core выполняется в службе приложение Azure и требует настройки настраиваемого отладчика моментальных снимков или предварительной версии .NET Core, начните с включения отладчика моментальных снимков для приложений .NET в службе приложение Azure.
Если приложение работает в Azure Service Fabric, Azure Облачные службы, Azure Виртуальные машины или локальных компьютерах, вы можете пропустить включение отладчика моментальных снимков в Служба приложений и следуйте инструкциям в этой статье.
Необходимые компоненты
- Включите Application Insights в ресурсе .NET.
- Включите пакет NuGet Microsoft.ApplicationInsights.SnapshotCollector версии 1.4.2 или выше в приложение.
- Понять, что моментальные снимки могут отправляться в экземпляр Application Insights в течение 10–15 минут после активации исключения.
Настройка сбора моментальных снимков для приложений
При добавлении пакета 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 г. Прием ключей инструментирования будет и дальше осуществляться, но мы больше не будем предоставлять обновления или поддержку для этой функции. Перейдите на строки подключения, чтобы использовать новые возможности.
Следующие шаги
- Просмотр моментальных снимков в портал Azure.
- Устранение неполадок с отладчиком моментальных снимков.