Snapshot di debug per le eccezioni nelle app .NETDebug snapshots on exceptions in .NET apps

Quando si verifica un'eccezione, è possibile raccogliere automaticamente uno snapshot di debug dall'applicazione Web live.When an exception occurs, you can automatically collect a debug snapshot from your live web application. Lo snapshot mostra lo stato del codice sorgente e delle variabili nel momento in cui è stata generata l'eccezione.The snapshot shows the state of source code and variables at the moment the exception was thrown. Snapshot Debugger (anteprima) di Azure Application Insights monitora la telemetria delle eccezioni dall'app Web.The Snapshot Debugger (preview) in Azure Application Insights monitors exception telemetry from your web app. Raccoglie snapshot per le eccezioni generate più frequentemente in modo che l'utente possa avere le informazioni necessarie per diagnosticare i problemi nell'ambiente di produzione.It collects snapshots on your top-throwing exceptions so that you have the information you need to diagnose issues in production. Includere il pacchetto NuGet Snapshot Collector nell'applicazione e configurare facoltativamente i parametri di raccolta in ApplicationInsights.config. Gli snapshot vengono visualizzati per le eccezioni nel portale Application Insights.Include the Snapshot collector NuGet package in your application, and optionally configure collection parameters in ApplicationInsights.config. Snapshots appear on exceptions in the Application Insights portal.

È possibile visualizzare gli snapshot di debug nel portale per vedere lo stack di chiamate e ispezionare le variabili in ogni stack frame di chiamate.You can view debug snapshots in the portal to see the call stack and inspect variables at each call stack frame. Per eseguire più efficacemente il debug del codice sorgente, aprire gli snapshot con Visual Studio 2017 Enterprise scaricando l'estensione Snapshot Debugger per Visual Studio.To get a more powerful debugging experience with source code, open snapshots with Visual Studio 2017 Enterprise by downloading the Snapshot Debugger extension for Visual Studio. In Visual Studio è anche possibile impostare punti di ancoraggio per creare in modo interattivo snapshot senza attendere un'eccezione.In Visual Studio, you can also set Snappoints to interactively take snapshots without waiting for an exception.

La raccolta di snapshot è disponibile per:Snapshot collection is available for:

  • Applicazioni .NET Framework e ASP.NET che eseguono .NET Framework 4.5 o versione successiva..NET Framework and ASP.NET applications running .NET Framework 4.5 or later.
  • Applicazioni .NET Core 2.0 e ASP.NET Core 2.0 in esecuzione in Windows..NET Core 2.0 and ASP.NET Core 2.0 applications running on Windows.

Sono supportati i seguenti ambienti:The following environments are supported:

  • Servizio app di Azure.Azure App Service.
  • Servizio cloud di Azure in esecuzione nella famiglia del sistema operativo 4 o versione successiva.Azure Cloud Service running OS family 4 or later.
  • Servizi Azure Service Fabric in esecuzione su Windows Server 2012 R2 o versione successiva.Azure Service Fabric services running on Windows Server 2012 R2 or later.
  • Macchine virtuali di Azure in esecuzione su Windows Server 2012 R2 o versione successiva.Azure Virtual Machines running Windows Server 2012 R2 or later.
  • Macchine fisiche o virtuali locali in esecuzione su Windows Server 2012 R2 o versione successiva.On-premises virtual or physical machines running Windows Server 2012 R2 or later.

Nota

Le applicazioni client (ad esempio, WPF, Windows Forms o piattaforma UWP) non sono supportate.Client applications (for example, WPF, Windows Forms or UWP) are not supported.

Configurare la raccolta di snapshot per le applicazioni ASP.NETConfigure snapshot collection for ASP.NET applications

  1. Abilitare Application Insights nell'app Web se non è ancora stato fatto.Enable Application Insights in your web app, if you haven't done it yet.

  2. Includere il pacchetto NuGet Microsoft.ApplicationInsights.SnapshotCollector nell'app.Include the Microsoft.ApplicationInsights.SnapshotCollector NuGet package in your app.

  3. Esaminare le opzioni predefinite che il pacchetto ha aggiunto ad ApplicationInsights.config:Review the default options that the package added to ApplicationInsights.config:

    <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>1</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>
    
  4. Gli snapshot vengono raccolti solo per le eccezioni segnalate ad Application Insights.Snapshots are collected only on exceptions that are reported to 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.In some cases (for example, older versions of the .NET platform), you might need to configure exception collection to see exceptions with snapshots in the portal.

Configurare la raccolta di snapshot per le applicazioni ASP.NET Core 2.0Configure snapshot collection for ASP.NET Core 2.0 applications

  1. Abilitare Application Insights nell'app Web ASP.NET Core se non è ancora stato fatto.Enable Application Insights in your ASP.NET Core web app, if you haven't done it yet.

    Nota

    Verificare che l'applicazione faccia riferimento alla versione 2.1.1 o più recente del pacchetto Microsoft.ApplicationInsights.AspNetCore.Be sure that your application references version 2.1.1, or newer, of the Microsoft.ApplicationInsights.AspNetCore package.

  2. Includere il pacchetto NuGet Microsoft.ApplicationInsights.SnapshotCollector nell'app.Include the Microsoft.ApplicationInsights.SnapshotCollector NuGet package in your app.

  3. Modificare la classe Startup dell'applicazione per aggiungere e configurare il processore di telemetria dell'agente di raccolta snapshot.Modify your application's Startup class to add and configure the Snapshot Collector's telemetry processor.

    Aggiungere le istruzioni using seguenti a Startup.csAdd the following using statements to Startup.cs

    using Microsoft.ApplicationInsights.SnapshotCollector;
    using Microsoft.Extensions.Options;
    using Microsoft.ApplicationInsights.AspNetCore;
    using Microsoft.ApplicationInsights.Extensibility;
    

    Aggiungere la classe SnapshotCollectorTelemetryProcessorFactory seguente a Startup.Add the following SnapshotCollectorTelemetryProcessorFactory class to Startup class.

    class Startup
    {
        private class SnapshotCollectorTelemetryProcessorFactory : ITelemetryProcessorFactory
        {
            private readonly IServiceProvider _serviceProvider;
    
            public SnapshotCollectorTelemetryProcessorFactory(IServiceProvider serviceProvider) =>
                _serviceProvider = serviceProvider;
    
            public ITelemetryProcessor Create(ITelemetryProcessor next)
            {
                var snapshotConfigurationOptions = _serviceProvider.GetService<IOptions<SnapshotCollectorConfiguration>>();
                return new SnapshotCollectorTelemetryProcessor(next, configuration: snapshotConfigurationOptions.Value);
            }
        }
        ...
    

    Aggiungere i servizi SnapshotCollectorConfiguration e SnapshotCollectorTelemetryProcessorFactory alla pipeline di avvio:Add the SnapshotCollectorConfiguration and SnapshotCollectorTelemetryProcessorFactory services to the startup pipeline:

       // This method gets called by the runtime. Use this method to add services to the container.
       public void ConfigureServices(IServiceCollection services)
       {
           // Configure SnapshotCollector from application settings
           services.Configure<SnapshotCollectorConfiguration>(Configuration.GetSection(nameof(SnapshotCollectorConfiguration)));
    
           // Add SnapshotCollector telemetry processor.
           services.AddSingleton<ITelemetryProcessorFactory>(sp => new SnapshotCollectorTelemetryProcessorFactory(sp));
    
           // TODO: Add other services your application needs here.
       }
    }
    
  4. Configurare l'agente di raccolta snapshot aggiungendo una sezione SnapshotCollectorConfiguration ad appsettings.json.Configure the Snapshot Collector by adding a SnapshotCollectorConfiguration section to appsettings.json. Ad esempio: For example:

    {
      "ApplicationInsights": {
        "InstrumentationKey": "<your instrumentation key>"
      },
      "SnapshotCollectorConfiguration": {
        "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
      }
    }
    

Configurare la raccolta di snapshot per le altre applicazioni .NETConfigure snapshot collection for other .NET applications

  1. Se l'applicazione non è già instrumentata con Application Insights, iniziare abilitando Application Insights e impostando la chiave di strumentazione.If your application is not already instrumented with Application Insights, get started by enabling Application Insights and setting the instrumentation key.

  2. Aggiungere il pacchetto NuGet Microsoft.ApplicationInsights.SnapshotCollector nell'app.Add the Microsoft.ApplicationInsights.SnapshotCollector NuGet package in your app.

  3. Gli snapshot vengono raccolti solo per le eccezioni segnalate ad Application Insights.Snapshots are collected only on exceptions that are reported to Application Insights. Potrebbe essere necessario modificare il codice per segnalarle.You may need to modify your code to report them. Anche se il codice di gestione delle eccezioni dipende dalla struttura dell'applicazione, di seguito è riportato un esempio:The exception handling code depends on the structure of your application, but an example is below:

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

Concedere le autorizzazioniGrant permissions

Gli snapshot possono essere ispezionati dai proprietari della sottoscrizione di Azure.Owners of the Azure subscription can inspect snapshots. Agli altri utenti deve essere concessa l'autorizzazione da un proprietario.Other users must be granted permission by an owner.

Per concedere l'autorizzazione, assegnare il ruolo Application Insights Snapshot Debugger agli utenti che ispezioneranno gli snapshot.To grant permission, assign the Application Insights Snapshot Debugger role to users who will inspect snapshots. Questo ruolo può essere assegnato a singoli utenti o gruppi dai proprietari della sottoscrizione per la risorsa di Application Insights di destinazione oppure per il gruppo di risorse o la sottoscrizione di tale risorsa.This role can be assigned to individual users or groups by subscription owners for the target Application Insights resource or its resource group or subscription.

  1. Passare alla risorsa di Application Insights nel portale di Azure.Navigate to the Application Insights resource in the Azure portal.
  2. Fare clic su Controllo di accesso (IAM).Click Access Control (IAM).
  3. Fare clic sul pulsante +Aggiungi.Click the +Add button.
  4. Selezionare Snapshot Debugger di Azure Application Insights nell'elenco a discesa Ruoli.Select Application Insights Snapshot Debugger from the Roles drop-down list.
  5. Cercare e immettere un nome per l'utente da aggiungere.Search for and enter a name for the user to add.
  6. Fare clic sul pulsante Salva per aggiungere l'utente al ruolo.Click the Save button to add the user to the role.

Importante

Gli snapshot possono contenere informazioni personali e altre informazioni riservate nei valori delle variabili e dei parametri.Snapshots can potentially contain personal and other sensitive information in variable and parameter values.

Snapshot di debug nel portale di Application InsightsDebug snapshots in the Application Insights portal

Se è disponibile uno snapshot per una determinata eccezione o un determinato ID problema, viene visualizzato il pulsante Open Debug Snapshot (Apri snapshot di debug) per l'eccezione nel portale di Application Insights.If a snapshot is available for a given exception or a problem ID, an Open Debug Snapshot button appears on the exception in the Application Insights portal.

Pulsante Open Debug Snapshot per l'eccezione

Nella vista Debug Snapshot (Snapshot di debug) vengono visualizzati uno stack di chiamate e un riquadro delle variabili.In the Debug Snapshot view, you see a call stack and a variables pane. Quando si selezionano frame dello stack di chiamate nel riquadro corrispondente, è possibile visualizzare i parametri e le variabili locali per la chiamata di funzione nel riquadro delle variabili.When you select frames of the call stack in the call stack pane, you can view local variables and parameters for that function call in the variables pane.

Visualizzare uno snapshot di debug nel portale

Gli snapshot possono contenere informazioni riservate e per impostazione predefinita non sono visibili.Snapshots might include sensitive information, and by default they aren't viewable. Per visualizzare gli snapshot, è necessario che all'utente sia stato assegnato il ruolo Application Insights Snapshot Debugger.To view snapshots, you must have the Application Insights Snapshot Debugger role assigned to you.

Snapshot di debug con Visual Studio 2017 EnterpriseDebug snapshots with Visual Studio 2017 Enterprise

  1. Fare clic sul pulsante Download Snapshot (Scarica snapshot) per scaricare un file .diagsession che può essere aperto con Visual Studio 2017 Enterprise.Click the Download Snapshot button to download a .diagsession file, which can be opened by Visual Studio 2017 Enterprise.

  2. Per aprire il file .diagsession, è necessario prima di tutto scaricare e installare l'estensione Snapshot Debugger per Visual Studio.To open the .diagsession file, you must first download and install the Snapshot Debugger extension for Visual Studio.

  3. Quando si apre il file di snapshot, in Visual Studio viene visualizzata la pagina per il debug di minidump.After you open the snapshot file, the Minidump Debugging page in Visual Studio appears. Fare clic su Debug Managed Code (Debug codice gestito) per avviare il debug dello snapshot.Click Debug Managed Code to start debugging the snapshot. Lo snapshot viene aperto alla riga di codice in cui è stata generata l'eccezione in modo da consentire il debug dello stato corrente del processo.The snapshot opens to the line of code where the exception was thrown so that you can debug the current state of the process.

    Visualizzare lo snapshot di debug in Visual Studio

Lo snapshot scaricato contiene tutti i file di simboli trovati nel server applicazioni Web.The downloaded snapshot includes any symbol files that were found on your web application server. Questi file di simboli sono necessari per associare i dati degli snapshot al codice sorgente.These symbol files are required to associate snapshot data with source code. Per le app del servizio app, assicurarsi di abilitare la distribuzione dei simboli al momento della pubblicazione delle app Web.For App Service apps, make sure to enable symbol deployment when you publish your web apps.

Funzionamento degli snapshotHow snapshots work

L'agente di raccolta snapshot viene implementato come un processore di Application Insights Telemetry.The Snapshot Collector is implemented as an Application Insights Telemetry Processor. Quando l'applicazione viene eseguita, il processore di telemetria dell'agente di raccolta snapshot viene aggiunto alla pipeline di telemetria dell'applicazione.When your application runs, the Snapshot Collector Telemetry Processor is added to your application's telemetry pipeline. Ogni volta che l'applicazione chiama TrackException, l'agente di raccolta snapshot consente di calcolare un ID problema dal tipo di eccezione generata e dal metodo generante.Each time your application calls TrackException, the Snapshot Collector computes a Problem ID from the type of exception being thrown and the throwing method. Ogni volta che l'applicazione chiama TrackException, un contatore viene incrementato con l'ID problema appropriato.Each time your application calls TrackException, a counter is incremented for the appropriate Problem ID. Quando il contatore raggiunge il valore ThresholdForSnapshotting, l'ID problema viene aggiunto a un piano di raccolta.When the counter reaches the ThresholdForSnapshotting value, the Problem ID is added to a Collection Plan.

L'agente di raccolta snapshot monitora anche le eccezioni quando vengono generate sottoscrivendo l'evento AppDomain.CurrentDomain.FirstChanceException.The Snapshot Collector also monitors exceptions as they are thrown by subscribing to the AppDomain.CurrentDomain.FirstChanceException event. Quando viene generato l'evento, l'ID problema dell'eccezione viene calcolato e confrontato con gli ID problema inclusi nel piano di raccolta.When that event fires, the Problem ID of the exception is computed and compared against the Problem IDs in the Collection Plan. Se esiste una corrispondenza, viene creato uno snapshot del processo in esecuzione.If there's a match, then a snapshot of the running process is created. Allo snapshot viene assegnato un identificatore univoco e l'eccezione viene contrassegnata con tale identificatore.The snapshot is assigned a unique identifier and the exception is stamped with that identifier. Dopo che è stato restituito il gestore FirstChanceException, l'eccezione generata viene elaborata come di consueto.After the FirstChanceException handler returns, the thrown exception is processed as normal. Infine, l'eccezione raggiunge nuovamente il metodo TrackException in cui viene segnalata ad Application Insights, insieme all'identificatore dello snapshot.Eventually, the exception reaches the TrackException method again where it, along with the snapshot identifier, is reported to Application Insights.

L'esecuzione del processo principale continua e rende disponibile il traffico agli utenti con un'interruzione minima.The main process continues to run and serve traffic to users with little interruption. Nel frattempo, lo snapshot viene trasferito al processo di caricamento degli snapshot.Meanwhile, the snapshot is handed off to the Snapshot Uploader process. Tale processo crea un minidump e lo carica in Application Insights insieme agli eventuali file di simboli pertinenti (con estensione pdb).The Snapshot Uploader creates a minidump and uploads it to Application Insights along with any relevant symbol (.pdb) files.

Suggerimento

  • Uno snapshot del processo è un clone sospeso del processo in esecuzione.A process snapshot is a suspended clone of the running process.
  • Per la creazione dello snapshot sono necessari da 10 a 20 millisecondi circa.Creating the snapshot takes about 10 to 20 milliseconds.
  • Il valore predefinito di ThresholdForSnapshotting è 1,The default value for ThresholdForSnapshotting is 1. ovvero il valore minimo.This is also the minimum value. Pertanto, l'app deve attivare la stessa eccezione due volte prima che venga creato uno snapshot.Therefore, your app has to trigger the same exception twice before a snapshot is created.
  • Impostare IsEnabledInDeveloperMode su true se si vuole generare gli snapshot durante il debug in Visual Studio.Set IsEnabledInDeveloperMode to true if you want to generate snapshots while debugging in Visual Studio.
  • La frequenza di creazione dello snapshot è limitata dall'impostazione SnapshotsPerTenMinutesLimit.The snapshot creation rate is limited by the SnapshotsPerTenMinutesLimit setting. Per impostazione predefinita, il limite è uno snapshot ogni dieci minuti.By default, the limit is one snapshot every ten minutes.
  • Non è possibile caricare più di 50 snapshot al giorno.No more than 50 snapshots per day may be uploaded.

Limitazioni correntiCurrent limitations

Pubblicare i simboliPublish symbols

Per poter decodificare le variabili e offrire un'esperienza di debug in Visual Studio, Snapshot Debugger richiede la presenza dei file di simboli nel server di produzione.The Snapshot Debugger requires symbol files on the production server to decode variables and to provide a debugging experience in Visual Studio. Per impostazione predefinita, la versione 15.2 di Visual Studio 2017 pubblica i simboli per le build di versione durante la pubblicazione nel servizio app.The 15.2 release of Visual Studio 2017 publishes symbols for release builds by default when it publishes to App Service. Nelle versioni precedenti è necessario aggiungere la riga seguente al file .pubxml del profilo di pubblicazione per pubblicare i simboli in modalità versione:In prior versions, you need to add the following line to your publish profile .pubxml file so that symbols are published in release mode:

    <ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>

Per Calcolo di Azure e altri tipi di calcoli, verificare che i file di simboli si trovino nella stessa cartella della DLL dell'applicazione principale (generalmente wwwroot/bin) o che siano disponibili nel percorso corrente.For Azure Compute and other types, ensure that the symbol files are in the same folder of the main application .dll (typically, wwwroot/bin) or are available on the current path.

Compilazioni ottimizzateOptimized builds

In alcuni casi, le variabili locali non possono essere visualizzate nelle build di versione a causa delle ottimizzazioni applicate dal compilatore JIT.In some cases, local variables can't be viewed in release builds because of optimizations that are applied by the JIT compiler. Tuttavia, in Servizi app di Azure, l'agente di raccolta snapshot può deottimizzare generando metodi che fanno parte del relativo piano di raccolta.However, in Azure App Services, the Snapshot Collector can deoptimize throwing methods that are part of its Collection Plan.

Suggerimento

Installare l'estensione del sito Application Insights nel servizio app per ottenere supporto per la deottimizzazione.Install the Application Insights Site Extension in your App Service to get deoptimization support.

risoluzione dei problemiTroubleshooting

Questi suggerimenti consentono di risolvere i problemi relativi al debugger di snapshot.These tips help you troubleshoot problems with the Snapshot Debugger.

Usare il controllo integrità dello snapshotUse the snapshot health check

Alcuni problemi comuni riguardano la mancata visualizzazione di Apri snapshot di debug.Several common problems result in the Open Debug Snapshot not showing up. Ad esempio, se si usa un agente di raccolta snapshot obsoleto, se si raggiunge il limite giornaliero di caricamento o se il caricamento dello snapshot richiede molto tempo.Using an outdated Snapshot Collector, for example; reaching the daily upload limit; or perhaps the snapshot is just taking a long time to upload. Per la risoluzione di problemi comuni, usare il controllo integrità dello snapshot.Use the Snapshot Health Check to troubleshoot common problems.

Nel riquadro dell'eccezione è presente un collegamento di visualizzazione traccia end-to-end che consente di visualizzare il controllo integrità dello snapshot.There's a link in the exception pane of the end-to-end trace view that takes you to the Snapshot Health Check.

Immettere il controllo integrità dello snapshot

L'interfaccia interattiva, simile a una chat, esegue la ricerca di problemi comuni e guida l'utente nella risoluzione.The interactive, chat-like interface looks for common problems and guides you to fix them.

Controllo integrità

Se il problema non viene risolto, fare riferimento ai passaggi manuali di risoluzione dei problemi seguenti.If that doesn't solve the problem, then refer to the following manual troubleshooting steps.

Verificare la chiave di strumentazioneVerify the instrumentation key

Verificare di usare la chiave di strumentazione corretta nell'applicazione pubblicata.Make sure you're using the correct instrumentation key in your published application. In genere, la chiave di strumentazione viene letta dal file ApplicationInsights.config.Usually, the instrumentation key is read from the ApplicationInsights.config file. Verificare che il valore sia lo stesso della chiave di strumentazione per la risorsa di Application Insights visualizzata nel portale.Verify the value is the same as the instrumentation key for the Application Insights resource that you see in the portal.

Eseguire l'aggiornamento alla versione più recente del pacchetto NuGetUpgrade to the latest version of the NuGet package

Usare Gestione pacchetti NuGet di Visual Studio per assicurarsi di usare la versione più recente di Microsoft.ApplicationInsights.SnapshotCollector.Use Visual Studio's NuGet Package Manager to make sure you're using the latest version of Microsoft.ApplicationInsights.SnapshotCollector. Le note sulla versione sono disponibili all'indirizzo https://github.com/Microsoft/ApplicationInsights-Home/issues/167Release notes can be found at https://github.com/Microsoft/ApplicationInsights-Home/issues/167

Controllare i log dell'utilità di caricamentoCheck the uploader logs

Dopo la creazione di uno snapshot, un file di minidump (DMP) viene creato sul disco.After a snapshot is created, a minidump file (.dmp) is created on disk. Un processo di caricamento separato crea il file di minidump e lo carica, con i file PDB associati, nella risorsa di archiviazione Snapshot Debugger di Application Insights.A separate uploader process creates that minidump file and uploads it, along with any associated PDBs, to Application Insights Snapshot Debugger storage. Il minidump, dopo essere stato correttamente caricato, viene eliminato dal disco.After the minidump has uploaded successfully, it's deleted from disk. I file di log per il processo di caricamento vengono conservati sul disco.The log files for the uploader process are kept on disk. In un ambiente del servizio app questi log si trovano in D:\Home\LogFiles.In an App Service environment, you can find these logs in D:\Home\LogFiles. Usare il sito di gestione di Kudu per il servizio app per trovare questi file di log.Use the Kudu management site for App Service to find these log files.

  1. Aprire l'applicazione del servizio app nel portale di Azure.Open your App Service application in the Azure portal.
  2. Fare clic su Strumenti avanzati o cercare Kudu.Click Advanced Tools, or search for Kudu.
  3. Fare clic su Vai.Click Go.
  4. Nell'elenco a discesa Console di debug selezionare CMD.In the Debug console drop-down list box, select CMD.
  5. Fare clic su LogFiles.Click LogFiles.

Verrà visualizzato almeno un file con il nome che inizia con Uploader_ o SnapshotUploader_ e l'estensione .log.You should see at least one file with a name that begins with Uploader_ or SnapshotUploader_ and a .log extension. Fare clic sull'icona appropriata per scaricare i file di log o aprirli in un browser.Click the appropriate icon to download any log files or open them in a browser. Il nome del file include un suffisso univoco che identifica l'istanza di Servizio app.The file name includes a unique suffix that identifies the App Service instance. Se l'istanza del servizio app è ospitata in più di un computer, è presente un file di log separato per ogni computer.If your App Service instance is hosted on more than one machine, there are separate log files for each machine. Quando l'utilità di caricamento rileva un nuovo file di minidump, quest'ultimo viene registrato nel file di log.When the uploader detects a new minidump file, it's recorded in the log file. Ecco un esempio di snapshot e caricamento corretti:Here's an example of a successful snapshot and upload:

SnapshotUploader.exe Information: 0 : Received Fork request ID 139e411a23934dc0b9ea08a626db16c5 from process 6368 (Low pri)
    DateTime=2018-03-09T01:42:41.8571711Z
SnapshotUploader.exe Information: 0 : Creating minidump from Fork request ID 139e411a23934dc0b9ea08a626db16c5 from process 6368 (Low pri)
    DateTime=2018-03-09T01:42:41.8571711Z
SnapshotUploader.exe Information: 0 : Dump placeholder file created: 139e411a23934dc0b9ea08a626db16c5.dm_
    DateTime=2018-03-09T01:42:41.8728496Z
SnapshotUploader.exe Information: 0 : Dump available 139e411a23934dc0b9ea08a626db16c5.dmp
    DateTime=2018-03-09T01:42:45.7525022Z
SnapshotUploader.exe Information: 0 : Successfully wrote minidump to D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp
    DateTime=2018-03-09T01:42:45.7681360Z
SnapshotUploader.exe Information: 0 : Uploading D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp, 214.42 MB (uncompressed)
    DateTime=2018-03-09T01:42:45.7681360Z
SnapshotUploader.exe Information: 0 : Upload successful. Compressed size 86.56 MB
    DateTime=2018-03-09T01:42:59.6184651Z
SnapshotUploader.exe Information: 0 : Extracting PDB info from D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp.
    DateTime=2018-03-09T01:42:59.6184651Z
SnapshotUploader.exe Information: 0 : Matched 2 PDB(s) with local files.
    DateTime=2018-03-09T01:42:59.6809606Z
SnapshotUploader.exe Information: 0 : Stamp does not want any of our matched PDBs.
    DateTime=2018-03-09T01:42:59.8059929Z
SnapshotUploader.exe Information: 0 : Deleted D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp
    DateTime=2018-03-09T01:42:59.8530649Z

Nota

L'esempio precedente è tratto dalla versione 1.2.0 del pacchetto NuGet Microsoft.ApplicationInsights.SnapshotCollector.The example above is from version 1.2.0 of the Microsoft.ApplicationInsights.SnapshotCollector NuGet package. Nelle versioni precedenti il processo di caricamento è denominato MinidumpUploader.exe e il log è meno dettagliato.In earlier versions, the uploader process is called MinidumpUploader.exe and the log is less detailed.

Nell'esempio precedente la chiave di strumentazione è c12a605e73c44346a984e00000000000.In the previous example, the instrumentation key is c12a605e73c44346a984e00000000000. Questo valore deve corrispondere alla chiave di strumentazione dell'applicazione.This value should match the instrumentation key for your application. Il minidump è associato a uno snapshot con l'ID 139e411a23934dc0b9ea08a626db16c5.The minidump is associated with a snapshot with the ID 139e411a23934dc0b9ea08a626db16c5. Sarà possibile usare questo ID in seguito per individuare i dati di telemetria delle eccezioni associati in Application Insights Analytics.You can use this ID later to locate the associated exception telemetry in Application Insights Analytics.

L'utilità di caricamento cerca i nuovi file PDB ogni 15 minuti circa.The uploader scans for new PDBs about once every 15 minutes. Ad esempio:Here's an example:

SnapshotUploader.exe Information: 0 : PDB rescan requested.
    DateTime=2018-03-09T01:47:19.4457768Z
SnapshotUploader.exe Information: 0 : Scanning D:\home\site\wwwroot for local PDBs.
    DateTime=2018-03-09T01:47:19.4457768Z
SnapshotUploader.exe Information: 0 : Local PDB scan complete. Found 2 PDB(s).
    DateTime=2018-03-09T01:47:19.4614027Z
SnapshotUploader.exe Information: 0 : Deleted PDB scan marker : D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\6368.pdbscan
    DateTime=2018-03-09T01:47:19.4614027Z

Per le applicazioni non ospitate nel servizio app, i log di caricamento sono nella stessa cartella dei minidump: %TEMP%\Dumps\<ikey> (dove <ikey> è la chiave di strumentazione).For applications that are not hosted in App Service, the uploader logs are in the same folder as the minidumps: %TEMP%\Dumps\<ikey> (where <ikey> is your instrumentation key).

Risoluzione dei problemi di servizi cloudTroubleshooting Cloud Services

Per i ruoli nei servizi cloud, la cartella temporanea predefinita potrebbe essere troppo piccola per contenere i file di minidump, con conseguente perdita di snapshot.For roles in Cloud Services, the default temporary folder may be too small to hold the minidump files, leading to lost snapshots. Lo spazio necessario dipende dal working set totale dell'applicazione e dal numero di snapshot simultanei.The space needed depends on the total working set of your application and the number of concurrent snapshots. Il working set di un ruolo Web ASP.NET a 32 bit è in genere compreso tra 200 MB e 500 MB.The working set of a 32-bit ASP.NET web role is typically between 200 MB and 500 MB. È necessario consentire almeno due snapshot simultanei.Allow for at least two concurrent snapshots. Ad esempio, se l'applicazione usa 1 GB di working set totale, è necessario assicurarsi che ci siano almeno 2 GB di spazio su disco per archiviare gli snapshot.For example, if your application uses 1 GB of total working set, you should ensure that there is at least 2 GB of disk space to store snapshots. Seguire questi passaggi per configurare il ruolo del servizio cloud con una risorsa locale dedicata per gli snapshot.Follow these steps to configure your Cloud Service role with a dedicated local resource for snapshots.

  1. Aggiungere una nuova risorsa locale al servizio cloud modificando il file di definizione del servizio cloud (con estensione csdef).Add a new local resource to your Cloud Service by editing the Cloud Service definition (.csdef) file. L'esempio seguente definisce una risorsa denominata SnapshotStore con una dimensione pari a 5 GB.The following example defines a resource called SnapshotStore with a size of 5 GB.

    <LocalResources>
      <LocalStorage name="SnapshotStore" cleanOnRoleRecycle="false" sizeInMB="5120" />
    </LocalResources>
    
  2. Modificare il codice di avvio del ruolo per aggiungere una variabile di ambiente che punti alla risorsa locale SnapshotStore.Modify your role's startup code to add an environment variable that points to the SnapshotStore local resource. Per i ruoli di lavoro, il codice deve essere aggiunto al metodo OnStart del ruolo:For Worker Roles, the code should be added to your role's OnStart method:

    public override bool OnStart()
    {
        Environment.SetEnvironmentVariable("SNAPSHOTSTORE", RoleEnvironment.GetLocalResource("SnapshotStore").RootPath);
        return base.OnStart();
    }
    

    Per i ruoli Web (ASP.NET), il codice deve essere aggiunto al metodo Application_Start dell'applicazione Web:For Web Roles (ASP.NET), the code should be added to your web application's Application_Start method:

    using Microsoft.WindowsAzure.ServiceRuntime;
    using System;
    
    namespace MyWebRoleApp
    {
        public class MyMvcApplication : System.Web.HttpApplication
        {
           protected void Application_Start()
           {
              Environment.SetEnvironmentVariable("SNAPSHOTSTORE", RoleEnvironment.GetLocalResource("SnapshotStore").RootPath);
              // TODO: The rest of your application startup code
           }
        }
    }
    
  3. Aggiornare il file ApplicationInsights.config del ruolo per sostituire il percorso della cartella temporanea usato da SnapshotCollectorUpdate your role's ApplicationInsights.config file to override the temporary folder location used by SnapshotCollector

    <TelemetryProcessors>
     <Add Type="Microsoft.ApplicationInsights.SnapshotCollector.SnapshotCollectorTelemetryProcessor, Microsoft.ApplicationInsights.SnapshotCollector">
       <!-- Use the SnapshotStore local resource for snapshots -->
       <TempFolder>%SNAPSHOTSTORE%</TempFolder>
       <!-- Other SnapshotCollector configuration options -->
     </Add>
    </TelemetryProcessors>
    

Usare la ricerca di Application Insights per trovare le eccezioni con gli snapshotUse Application Insights search to find exceptions with snapshots

Quando viene creato uno snapshot, l'eccezione generata viene contrassegnata con un ID snapshot.When a snapshot is created, the throwing exception is tagged with a snapshot ID. Tale ID snapshot viene incluso come proprietà personalizzata, quando i dati di telemetria dell'eccezione vengono segnalati ad Application Insights.That snapshot ID is included as a custom property when the exception telemetry is reported to Application Insights. Usando Cerca in Application Insights, è possibile trovare tutti i dati di telemetria con la proprietà personalizzata ai.snapshot.id.Using Search in Application Insights, you can find all telemetry with the ai.snapshot.id custom property.

  1. Passare alla risorsa di Application Insights nel portale di Azure.Browse to your Application Insights resource in the Azure portal.
  2. Fare clic su Search(Cerca).Click Search.
  3. Digitare ai.snapshot.id nella casella di testo di ricerca e premere INVIO.Type ai.snapshot.id in the Search text box and press Enter.

Cercare i dati di telemetria con i ID snapshot nel portale

Se questa ricerca non restituisce risultati, significa che nessuno snapshot è stato segnalato ad Application Insights per l'applicazione nell'intervallo di tempo selezionato.If this search returns no results, then no snapshots were reported to Application Insights for your application in the selected time range.

Per cercare uno specifico ID snapshot dei log di caricamento, digitare tale ID nella casella di ricerca.To search for a specific snapshot ID from the Uploader logs, type that ID in the Search box. Se non è possibile trovare dati di telemetria per uno snapshot che è stato sicuramente caricato, seguire questa procedura:If you can't find telemetry for a snapshot that you know was uploaded, follow these steps:

  1. Controllare di esaminare la risorsa di Application Insights corretta verificando la chiave di strumentazione.Double-check that you're looking at the right Application Insights resource by verifying the instrumentation key.

  2. Usando il timestamp del log di caricamento, modificare il filtro Intervallo di tempo della ricerca per coprire tale intervallo di tempo.Using the timestamp from the Uploader log, adjust the Time Range filter of the search to cover that time range.

Se ancora non vengono visualizzate eccezioni con tale ID snapshot, significa che i dati di telemetria dell'eccezione non sono stati segnalati ad Application Insights.If you still don't see an exception with that snapshot ID, then the exception telemetry wasn't reported to Application Insights. Questa situazione si può verificare se l'applicazione ha subito un arresto anomalo del sistema dopo avere acquisito lo snapshot, ma prima di segnalare i dati di telemetria dell'eccezione.This situation can happen if your application crashed after it took the snapshot but before it reported the exception telemetry. In questo caso, controllare i log del servizio app in Diagnose and solve problems per accertare se si sono verificati riavvi non previsti o eccezioni non gestite.In this case, check the App Service logs under Diagnose and solve problems to see if there were unexpected restarts or unhandled exceptions.

Modificare le regole proxy o firewall di reteEdit network proxy or firewall rules

Se l'applicazione si connette a Internet tramite un proxy o un firewall, può essere necessario modificare le regole per consentire all'applicazione di comunicare con il servizio Snapshot Debugger.If your application connects to the Internet via a proxy or a firewall, you may need to edit the rules to allow your application to communicate with the Snapshot Debugger service. Ecco un elenco di porte e indirizzi IP usati da Snapshot Debugger.Here is a list of IP addresses and ports used by the Snapshot Debugger.

Passaggi successiviNext steps