Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Se o seu aplicativo ASP.NET ou ASP.NET Core for executado no Serviço de Aplicativo do Azure e exigir uma configuração personalizada do Depurador de Instantâneo ou uma versão de visualização do .NET Core, comece com Habilitar o Depurador de Instantâneo para aplicativos .NET no Serviço de Aplicativo do Azure.
Se a sua aplicação for executada no Azure Service Fabric, nos Serviços de Nuvem do Azure, nas Máquinas Virtuais do Azure ou em máquinas locais, pode ignorar a habilitação do Snapshot Debugger no App Service e seguir as orientações neste artigo.
Pré-requisitos
- Habilite o Application Insights em seu recurso .NET.
- Inclua o pacote NuGet Microsoft.ApplicationInsights.SnapshotCollector versão 1.4.2 ou superior em seu aplicativo.
- Compreenda que os snapshots podem demorar entre 10 a 15 minutos a ser enviados para a instância do Application Insights após uma exceção ter sido acionada.
Configurar a coleta de instantâneos para aplicativos ASP.NET
Quando adicionas o pacote NuGet Microsoft.ApplicationInsights.SnapshotCollector à tua aplicação, o SnapshotCollectorTelemetryProcessor é adicionado automaticamente à secção TelemetryProcessors de ApplicationInsights.config.
Se não vir SnapshotCollectorTelemetryProcessor em ApplicationInsights.config, ou se quiser personalizar a configuração do Depurador de Snapshots, pode editá-la manualmente.
Nota
Qualquer configuração manual pode ser sobrescrevida quando se atualiza para uma versão mais recente do pacote NuGet Microsoft.ApplicationInsights.SnapshotCollector .
A configuração padrão do Snapshot Collector é semelhante ao exemplo a seguir:
<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>
Os instantâneos são coletados apenas em exceções relatadas ao Application Insights. Em alguns casos, como em versões mais antigas da plataforma .NET, pode ser necessário configurar a recolha de exceções para visualizar exceções com instantâneos no portal.
Configurar a coleta de instantâneos para aplicativos ASP.NET Core ou Worker Services
Pré-requisitos
Seu aplicativo já deve fazer referência a um dos seguintes pacotes NuGet do Application Insights:
Adicionar o pacote NuGet
Adicione o Microsoft.ApplicationInsights.SnapshotCollector pacote NuGet ao seu aplicativo.
Atualizar a coleção de serviços
No código de inicialização do seu aplicativo, onde os serviços são configurados, adicione uma chamada ao AddSnapshotCollector método de extensão. Sugerimos adicionar esta linha imediatamente após a chamada para AddApplicationInsightsTelemetry. Por exemplo:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddApplicationInsightsTelemetry();
builder.Services.AddSnapshotCollector();
Personalizar o coletor de instantâneo
Para a maioria dos cenários, as configurações padrão do Snapshot Collector são suficientes. No entanto, você pode personalizar as configurações adicionando o seguinte código antes da chamada para AddSnapshotCollector():
using Microsoft.ApplicationInsights.SnapshotCollector;
...
builder.Services.Configure<SnapshotCollectorConfiguration>(builder.Configuration.GetSection("SnapshotCollector"));
Em seguida, adicione uma SnapshotCollector seção à appsettings.json a qual você pode substituir os padrões.
A configuração de appsettings.json padrão do Snapshot Collector é semelhante ao exemplo a seguir:
{
"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
}
}
Caso necessites personalizar o comportamento do Snapshot Collector de forma manual, sem usar o appsettings.json, utiliza a sobrecarga de AddSnapshotCollector que recebe um delegado. Por exemplo:
builder.Services.AddSnapshotCollector(config => config.IsEnabledInDeveloperMode = true);
Configurar a recolha de instantâneos para outras aplicações .NET
Os instantâneos são recolhidos somente em exceções informadas ao Application Insights.
Para aplicações ASP.NET e ASP.NET Core, o SDK do Application Insights relata automaticamente exceções não tratadas que escapam de um método de controlador ou manipulador de rotas.
Para outras aplicações, talvez seja necessário modificar o teu código para relatá-las. O código de tratamento de exceção depende da estrutura do seu aplicativo. Por exemplo:
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.
}
}
}
O exemplo a seguir usa ILogger em vez de TelemetryClient. Este exemplo pressupõe que você esteja usando o Application Insights Logger Provider. Como mostra o exemplo, ao manipular uma exceção, certifique-se de passar a exceção como o primeiro parâmetro para 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.");
}
}
}
Por defeito, o Application Insights Logger (ApplicationInsightsLoggerProvider) encaminha exceções para o Depurador de Snapshots usando TelemetryClient.TrackException. Este comportamento é controlado através da TrackExceptionsAsExceptionTelemetry propriedade na ApplicationInsightsLoggerOptions classe.
Se definires TrackExceptionsAsExceptionTelemetry para false quando configurares o Application Insights Logger, o exemplo anterior não vai ativar o Depurador de Snapshots. Nesse caso, modifique seu código para chamar TrackException manualmente.
Conteúdo relacionado
- Exiba instantâneos no portal do Azure.
- Resolução de Problemas do Depurador de Instantâneos.