Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Если приложение ASP.NET или ASP.NET Core выполняется в службе приложение Azure и требует настройки настраиваемого отладчика моментальных снимков или предварительной версии .NET Core, начните с включения отладчика моментальных снимков для приложений .NET в службе приложение Azure.
Если ваше приложение работает в Azure Service Fabric, Azure Cloud Services, Azure Virtual Machines или на локальных машинах, вы можете пропустить включение отладчика моментальных снимков в службе приложений Azure и следовать инструкциям в этой статье.
Предварительные условия
- Включите Application Insights в вашем ресурсе .NET.
- Включите пакет NuGet Microsoft.ApplicationInsights.SnapshotCollector версии 1.4.2 или выше в приложение.
- Имейте в виду, что моментальные снимки могут занимать от 10 до 15 минут для отправки в экземпляр Application Insights после активации исключения.
Настройка сбора моментальных снимков для приложений ASP.NET
При добавлении пакета NuGet Microsoft.ApplicationInsights.SnapshotCollector в ваше приложение, SnapshotCollectorTelemetryProcessor автоматически добавляется в раздел TelemetryProcessorsApplicationInsights.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
Microsoft.ApplicationInsights.SnapshotCollector Добавьте пакет NuGet в приложение.
Обновите коллекцию служб
В коде запуска приложения, где настроены службы, добавьте вызов 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.");
}
}
}
По умолчанию логгер Application Insights перенаправляет исключения в отладчик моментальных снимков с помощью ApplicationInsightsLoggerProvider и TelemetryClient.TrackException. Это поведение управляется свойством TrackExceptionsAsExceptionTelemetry класса ApplicationInsightsLoggerOptions .
Если вы зададите TrackExceptionsAsExceptionTelemetry в false при конфигурации журнала Application Insights, приведённый выше пример не инициирует отладчик моментальных снимков. В этом случае измените код для вызова TrackException вручную.
Связанный контент
- Просматривайте моментальные снимки в портале Azure.
- Устранение неполадок отладчика моментальных снимков.