Abilitare il debugger snapshot per le app .NET in Azure Service Fabric, Servizi cloud e Macchine virtuali

Se l'applicazione ASP.NET o ASP.NET Core viene eseguita in Servizio app di Azure e richiede una configurazione del debugger snapshot personalizzata o una versione di anteprima di .NET Core, iniziare con Abilita debugger snapshot per le app .NET in Servizio app di Azure.

Se l'applicazione viene eseguita in Azure Service Fabric, Azure Servizi cloud, Azure Macchine virtuali o computer locali, è possibile ignorare l'abilitazione del debugger snapshot in servizio app e seguire le indicazioni riportate in questo articolo.

Prima di iniziare

Configurare la raccolta di snapshot per le applicazioni ASP.NET

Quando si aggiunge il pacchetto NuGet Microsoft.ApplicationInsights.SnapshotCollector all'applicazione, deve SnapshotCollectorTelemetryProcessor essere aggiunto automaticamente alla TelemetryProcessors sezione di ApplicationInsights.config.

Se non viene visualizzato SnapshotCollectorTelemetryProcessor in ApplicationInsights.config o se si vuole personalizzare la configurazione del debugger snapshot, è possibile modificarla in base alla mano. Tuttavia, queste modifiche possono essere sovrascritte se si esegue l'aggiornamento successivo a una versione più recente del pacchetto Microsoft.ApplicationInsights.SnapshotCollector NuGet.

Nell'esempio seguente viene illustrata una configurazione equivalente alla configurazione predefinita:

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

Gli snapshot vengono raccolti solo sulle eccezioni segnalate a Application Insights. In alcuni casi (ad esempio, versioni precedenti della piattaforma .NET), potrebbe essere necessario configurare la raccolta di eccezioni per visualizzare le eccezioni con gli snapshot nel portale.

Configurare la raccolta snapshot per applicazioni ASP.NET Core o Servizi di lavoro

Prerequisiti

L'applicazione deve fare già riferimento a uno dei seguenti pacchetti NuGet di Application Insights:

Aggiungere il pacchetto NuGet

Aggiungere il pacchetto NuGet Microsoft.ApplicationInsights.SnapshotCollector all'app.

Aggiornare la raccolta di servizi

Nel codice di avvio dell'applicazione, in cui i servizi sono configurati, aggiungere una chiamata al AddSnapshotCollector metodo di estensione. È consigliabile aggiungere questa riga immediatamente dopo la chiamata a AddApplicationInsightsTelemetry. Ad esempio:

var builder = WebApplication.CreateBuilder(args);

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

Configurare l'agente di raccolta snapshot

Per la maggior parte delle situazioni, le impostazioni predefinite sono sufficienti. In caso contrario, personalizzare le impostazioni aggiungendo il codice seguente prima della chiamata a AddSnapshotCollector()

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

Aggiungere quindi una SnapshotCollector sezione a appsettings.json in cui è possibile eseguire l'override delle impostazioni predefinite. Nell'esempio seguente viene illustrata una configurazione equivalente alla configurazione predefinita:

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

Se è necessario personalizzare manualmente il comportamento di Snapshot Collector, senza usare appsettings.json, usare l'overload di AddSnapshotCollector che accetta un delegato. Ad esempio:

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

Configurare la raccolta di snapshot per le altre applicazioni .NET

Gli snapshot vengono raccolti solo per le eccezioni segnalate ad Application Insights. Per ASP.NET e applicazioni ASP.NET Core, Application Insights SDK segnala automaticamente eccezioni non gestite che eseguano l'escape di un metodo controller o del gestore di route degli endpoint. Per altre applicazioni, potrebbe essere necessario modificare il codice per segnalarli. Il codice di gestione delle eccezioni dipende dalla struttura dell'applicazione. Ecco un esempio:

TelemetryClient _telemetryClient = new TelemetryClient();
void ExampleRequest()
{
    try
    {
        // TODO: Handle the request.
    }
    catch (Exception ex)
    {
        // Report the exception to Application Insights.
        _telemetryClient.TrackException(ex);
        // TODO: Rethrow the exception if desired.
    }
}

Nota

Il 31 marzo 2025, il supporto per l'inserimento delle chiavi di strumentazione terminerà. L'inserimento delle chiavi di strumentazione continuerà a funzionare, ma non verranno più forniti aggiornamenti o supporto per la funzionalità. Passare alle stringhe di connessione per sfruttare le nuove funzionalità.

Passaggi successivi

  • Generare il traffico all'applicazione che può attivare un'eccezione. Attendere quindi da 10 a 15 minuti l'invio di snapshot all'istanza di Application Insights.
  • Vedere gli snapshot nella portale di Azure.
  • Per informazioni sulla risoluzione dei problemi relativi al debugger snapshot, vedere Risoluzione dei problemi del debugger snapshot.