Risolvere i problemi relativi all'abilitazione del debugger snapshot di Application Insights o della visualizzazione di snapshot

Se è stato abilitato il debugger snapshot di Application Insights per l'applicazione, ma non vengono visualizzati snapshot per le eccezioni, è possibile usare queste istruzioni per risolvere i problemi.

Esistono molti motivi diversi per cui gli snapshot non vengono generati. È possibile iniziare eseguendo il controllo di integrità dello snapshot per identificare alcune delle possibili cause comuni.

Scenari non supportati

Di seguito sono disponibili scenari in cui l'agente di raccolta snapshot non è supportato:

Scenario Effetti collaterali Recommendation
Quando si usa Snapshot Collector SDK nell'applicazione direttamente (con estensione csproj) e si è abilitata l'opzione di avanzamento "Interoperabilità". Application Insights SDK locale (inclusi i dati di telemetria dell'agente di raccolta snapshot) verrà perso, pertanto non saranno disponibili snapshot.
L'applicazione potrebbe arrestarsi in modo anomalo all'avvio con System.ArgumentException: telemetryProcessorTypedoes not implement ITelemetryProcessor
Per altre informazioni sulla funzionalità "Interoperabilità" di Application Insights, vedere la documentazione.
Se si usa l'opzione di avanzamento "Interoperabilità", usare l'inserimento dell'agente di raccolta snapshot senza codice (abilitato tramite l'esperienza utente portale di Azure)

Assicurarsi di usare l'endpoint snapshot debugger appropriato

Attualmente le uniche aree che richiedono modifiche dell'endpoint sono Azure per enti pubblici e Microsoft Azure gestite da 21Vianet.

Per servizio app e applicazioni che usano Application Insights SDK, è necessario aggiornare la stringa di connessione usando gli overridi supportati per Snapshot Debugger come definito di seguito:

Connection String, proprietà US Government Cloud Cloud per la Cina
SnapshotEndpoint https://snapshot.monitor.azure.us https://snapshot.monitor.azure.cn

Per altre informazioni sugli altri overridi di connessione, vedere la documentazione di Application Insights.

Per l'app per le funzioni, è necessario aggiornare l'uso degli host.json overridi supportati di seguito:

Proprietà US Government Cloud Cloud per la Cina
AgentEndpoint https://snapshot.monitor.azure.us https://snapshot.monitor.azure.cn

Di seguito è riportato un esempio dell'aggiornamento con l'endpoint dell'agente host.json cloud us government:

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingExcludedTypes": "Request",
      "samplingSettings": {
        "isEnabled": true
      },
      "snapshotConfiguration": {
        "isEnabled": true,
        "agentEndpoint": "https://snapshot.monitor.azure.us"
      }
    }
  }
}

Usare il controllo integrità dello snapshot

Alcuni problemi comuni riguardano la mancata visualizzazione di Apri snapshot di debug. 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. Per la risoluzione di problemi comuni, usare il controllo integrità dello snapshot.

Nel riquadro dell'eccezione è presente un collegamento di visualizzazione traccia end-to-end che consente di visualizzare il controllo integrità dello snapshot.

Screenshot che mostra come immettere il controllo di integrità dello snapshot.

L'interfaccia interattiva, simile a una chat, esegue la ricerca di problemi comuni e guida l'utente nella risoluzione.

Screenshot che mostra la finestra controllo integrità interattiva che elenca i problemi e i suggerimenti per risolverli.

Se il problema non viene risolto, fare riferimento ai passaggi manuali di risoluzione dei problemi seguenti.

Verificare la chiave di strumentazione

Verificare di usare la chiave di strumentazione corretta nell'applicazione pubblicata. In genere, la chiave di strumentazione viene letto dal file ApplicationInsights.config . Verificare che il valore sia lo stesso della chiave di strumentazione per la risorsa di Application Insights visualizzata nel portale.

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

Controllare le impostazioni client TLS/SSL (ASP.NET)

Se si dispone di un'applicazione ASP.NET ospitata in Servizio app di Azure o in IIS in una macchina virtuale, l'applicazione potrebbe non connettersi al servizio Debugger snapshot a causa di un protocollo di sicurezza SSL mancante.

L'endpoint debugger snapshot richiede TLS versione 1.2. Il set di protocolli di sicurezza SSL è uno dei blocchi abilitati dal httpRuntime targetFramework valore nella system.web sezione di web.config. Se l'oggetto httpRuntime targetFramework è 4.5.2 o versione inferiore, TLS 1.2 non è incluso per impostazione predefinita.

Nota

Il httpRuntime targetFramework valore è indipendente dal framework di destinazione usato durante la compilazione dell'applicazione. Per controllare l'impostazione, aprire il file web.config e trovare la sezione system.web. Assicurarsi che l'oggetto targetFramework for httpRuntime sia impostato su 4.6 o versioni successive.

<system.web>
   ...
   <httpRuntime targetFramework="4.7.2" />
   ...
</system.web>

Nota

La modifica del httpRuntime targetFramework valore modifica gli errori di runtime applicati all'applicazione e può causare altre modifiche di comportamento sottili. Assicurarsi di testare attentamente l'applicazione dopo aver apportato questa modifica. Per un elenco completo delle modifiche di compatibilità, vedere Riesezionare le modifiche.

Nota

Se l'oggetto targetFramework è 4.7 o versioni successive, Windows determina i protocolli disponibili. In Servizio app di Azure è disponibile TLS 1.2. Tuttavia, se si usa la propria macchina virtuale, potrebbe essere necessario abilitare TLS 1.2 nel sistema operativo.

Versioni di anteprima di .NET Core

Se si usa una versione di anteprima di .NET Core o dell'applicazione fa riferimento a Application Insights SDK, direttamente o indirettamente tramite un assembly dipendente, seguire le istruzioni per Abilitare il debugger snapshot per altri ambienti.

Controllare la pagina Stato dell'estensione del sito di Servizi di diagnostica

Se il debugger snapshot è stato abilitato tramite il riquadro Application Insights nel portale, è stato abilitato dall'estensione del sito di Servizi di diagnostica.

Nota

L'installazione senza codice del debugger snapshot di Application Insights segue i criteri di supporto di .NET Core. Per altre informazioni sui runtime supportati, vedere Criteri di supporto di .NET Core. È possibile controllare la pagina stato di questa estensione passando all'URL seguente: https://{site-name}.scm.azurewebsites.net/DiagnosticServices

Nota

Il dominio del collegamento Pagina stato varia a seconda del cloud. Questo dominio sarà lo stesso del sito di gestione Kudu per servizio app. Questa pagina stato mostra lo stato di installazione degli agenti Profiler e Snapshot Collector. Se si è verificato un errore imprevisto, verrà visualizzato e verrà mostrato come risolverlo.

È possibile usare il sito di gestione Kudu per servizio app per ottenere l'URL di base di questa pagina di stato:

  1. Aprire l'applicazione del servizio app nel portale di Azure.
  2. Selezionare Strumenti avanzati o cercare Kudu.
  3. Selezionare Vai.
  4. Dopo aver eseguito il sito di gestione Kudu, nell'URL aggiungere quanto segue /DiagnosticServices e premere INVIO. Termina come segue: https://<kudu-url>/DiagnosticServices

Eseguire l'aggiornamento alla versione più recente del pacchetto NuGet

In base alla modalità di abilitazione del debugger snapshot, vedere le opzioni seguenti:

Per gli aggiornamenti e le correzioni di bug più recenti , consultare le note sulla versione.

Controllare i log dell'utilità di caricamento

Dopo aver creato uno snapshot, viene creato un file minidump (con estensione dmp) su disco. 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. Il minidump, dopo essere stato correttamente caricato, viene eliminato dal disco. I file di log per il processo di caricamento vengono conservati sul disco. In un ambiente del servizio app questi log si trovano in D:\Home\LogFiles. Usare il sito di gestione di Kudu per il servizio app per trovare questi file di log.

  1. Aprire l'applicazione del servizio app nel portale di Azure.
  2. Selezionare Strumenti avanzati o cercare Kudu.
  3. Selezionare Vai.
  4. Nell'elenco a discesa Debug console selezionare CMD.
  5. Selezionare LogFiles.

Verrà visualizzato almeno un file con il nome che inizia con Uploader_ o SnapshotUploader_ e l'estensione .log. Selezionare l'icona appropriata per scaricare i file di log o aprirli in un browser. Il nome del file include un suffisso univoco che identifica l'istanza di Servizio app. Se l'istanza del servizio app è ospitata in più di un computer, è presente un file di log separato per ogni computer. Quando l'utilità di caricamento rileva un nuovo file di minidump, quest'ultimo viene registrato nel file di log. Ecco un esempio di snapshot e caricamento corretti:

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 è dalla versione 1.2.0 del Microsoft.ApplicationInsights.SnapshotCollector pacchetto NuGet. Nelle versioni precedenti il processo di caricamento è denominato MinidumpUploader.exe e il log è meno dettagliato. Nell'esempio precedente la chiave di strumentazione è c12a605e73c44346a984e00000000000. Questo valore deve corrispondere alla chiave di strumentazione dell'applicazione. Il minidump è associato a uno snapshot con l'ID 139e411a23934dc0b9ea08a626db16c5. È possibile usare questo ID in un secondo momento per individuare il record di eccezione associato in Application Insights Analytics.

L'utilità di caricamento cerca i nuovi file PDB ogni 15 minuti circa. Ecco un esempio:

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

Risoluzione dei problemi di servizi cloud

In Servizi cloud la cartella temporanea predefinita potrebbe essere troppo piccola per contenere i file minidump, causando snapshot persi.

Lo spazio necessario dipende dal working set totale dell'applicazione e dal numero di snapshot simultanei.

Il working set di un ruolo Web ASP.NET a 32 bit è in genere compreso tra 200 MB e 500 MB. È necessario consentire almeno due snapshot simultanei.

Ad esempio, se l'applicazione usa 1 GB di set di lavoro totale, è necessario assicurarsi che sia presente almeno 2 GB di spazio su disco per archiviare gli snapshot.

Seguire questi passaggi per configurare il ruolo del servizio cloud con una risorsa locale dedicata per gli snapshot.

  1. Aggiungere una nuova risorsa locale al servizio cloud modificando il file di definizione del servizio cloud (con estensione csdef). L'esempio seguente definisce una risorsa denominata SnapshotStore con una dimensione pari a 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. Per i ruoli di lavoro, il codice deve essere aggiunto al metodo OnStart del ruolo:

    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:

    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 diApplicationInsights.config del ruolo per eseguire l'override del percorso temporaneo della cartella usato da 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>
    

Sostituzione della cartella di copia shadow

Quando Snapshot Collector viene avviato, tenta di trovare una cartella sul disco adatta all'esecuzione dell'utilità di caricamento dello snapshot. La cartella selezionata è nota come cartella di copia shadow.

Snapshot Collector controlla alcuni percorsi noti, verificando di disporre delle autorizzazioni per copiare i file binari dell'utilità di caricamento dello snapshot. Vengono usate le variabili di ambiente seguenti:

  • Fabric_Folder_App_Temp
  • LOCALAPPDATA
  • APPDATA
  • TEMP

Se non è possibile trovare una cartella appropriata, l'agente di raccolta snapshot segnala un errore che indica che "Impossibile trovare una cartella di copia shadow appropriata".

Se la copia ha esito negativo, Snapshot Collector segnala un errore ShadowCopyFailed.

Se non è possibile avviare l'utilità di caricamento, Snapshot Collector segnala un errore UploaderCannotStartFromShadowCopy. Il corpo del messaggio contiene spesso System.UnauthorizedAccessException. Questo errore si verifica in genere perché l'applicazione è in esecuzione con un account con autorizzazioni ridotte. L'account dispone delle autorizzazioni di scrittura nella cartella di copia shadow, ma non è autorizzato a eseguire il codice.

Poiché questi errori si verificano in genere durante l'avvio, in genere verranno seguiti da un ExceptionDuringConnect errore che indica che Uploader non è riuscito ad avviare."

Per risolvere questi errori, è possibile specificare la cartella di copia shadow manualmente tramite l'opzione di configurazione ShadowCopyFolder. Ad esempio, usando ApplicationInsights.config:

<TelemetryProcessors>
 <Add Type="Microsoft.ApplicationInsights.SnapshotCollector.SnapshotCollectorTelemetryProcessor, Microsoft.ApplicationInsights.SnapshotCollector">
   <!-- Override the default shadow copy folder. -->
   <ShadowCopyFolder>D:\SnapshotUploader</ShadowCopyFolder>
   <!-- Other SnapshotCollector configuration options -->
 </Add>
</TelemetryProcessors>

In alternativa, se si usa appsettings.json con un'applicazione .NET Core:

{
  "ApplicationInsights": {
    "InstrumentationKey": "<your instrumentation key>"
  },
  "SnapshotCollectorConfiguration": {
    "ShadowCopyFolder": "D:\\SnapshotUploader"
  }
}

Usare la ricerca di Application Insights per trovare le eccezioni con gli snapshot

Quando viene creato uno snapshot, l'eccezione generata viene contrassegnata con un ID snapshot. L'ID snapshot viene incluso come proprietà personalizzata quando l'eccezione viene segnalata a Application Insights. Usando Ricerca in Application Insights, è possibile trovare tutti i record con la ai.snapshot.id proprietà personalizzata.

  1. Passare alla risorsa di Application Insights nel portale di Azure.
  2. Selezionare Cerca.
  3. Digitare ai.snapshot.id nella casella di testo di ricerca e premere INVIO.

Screenshot che mostra la ricerca di dati di telemetria con un ID snapshot nel portale.

Se questa ricerca non restituisce risultati, non sono stati segnalati snapshot a Application Insights nell'intervallo di tempo selezionato.

Per cercare uno specifico ID snapshot dei log di caricamento, digitare tale ID nella casella di ricerca. Se non è possibile trovare record per uno snapshot che è stato caricato, seguire questa procedura:

  1. Controllare di esaminare la risorsa di Application Insights corretta verificando la chiave di strumentazione.

  2. Usando il timestamp del log di caricamento, modificare il filtro Intervallo di tempo della ricerca per coprire tale intervallo di tempo.

Se non viene ancora visualizzata un'eccezione con tale ID snapshot, il record di eccezione non è stato segnalato a Application Insights. Questa situazione può verificarsi se l'applicazione si è arrestata in modo anomalo dopo aver eseguito lo snapshot, ma prima di segnalare il record di eccezione. 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.

Modificare le regole proxy o firewall di rete

Se l'applicazione si connette a Internet tramite un proxy o un firewall, potrebbe essere necessario aggiornare le regole per comunicare con il servizio Debugger snapshot.

Gli INDIRIZZI IP usati dal debugger snapshot di Application Insights sono inclusi nel tag del servizio Monitoraggio di Azure. Per altre informazioni, vedere Documentazione dei tag di servizio.

Esistono costi di fatturazione quando si usano snapshot?

Non sono previsti addebiti per la sottoscrizione specifici per Snapshot Debugger. I file di snapshot raccolti vengono archiviati separatamente dai dati di telemetria raccolti dagli SDK di Application Insights e non sono previsti addebiti per l'inserimento o l'archiviazione degli snapshot.