Condividi tramite


Risolvere i problemi relativi all'abilitazione di Snapshot Debugger di Application Insights o alla visualizzazione di snapshot

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

La generazione di snapshot non riesce a causa di molti motivi diversi. È possibile iniziare eseguendo il Controllo di integrità dello snapshot per identificare alcune delle possibili cause comuni.

Scenari non supportati

Scenari in cui Snapshot Collector non è supportato:

Sceneggiatura Effetti collaterali Raccomandazione
Quando si utilizza direttamente l'SDK di Snapshot Collector nell'applicazione (.csproj) ed è stata abilitata l'opzione avanzata Interop. L'SDK di Application Insights locale (inclusa la telemetria del raccoglitore di snapshot) è stato perso, quindi non sono disponibili snapshot.
L'applicazione potrebbe arrestarsi in modo anomalo all'avvio con System.ArgumentException: telemetryProcessorTypedoes not implement ITelemetryProcessor.
Per altre informazioni sull'interoperabilità delle funzionalità di Application Insights, vedere la documentazione.
Se si usa l'opzione avanzata Interop, usare l'iniezione del raccoglitore di snapshot senza codice abilitata tramite il portale di Azure.

Assicurati di usare l'endpoint Snapshot Debugger appropriato

Attualmente, le uniche aree che richiedono modifiche agli endpoint sono Azure per enti pubblici e Microsoft Azure gestito da 21Vianet.

Per il Servizio App e le applicazioni che usano l'SDK di Application Insights, è necessario aggiornare la stringa di connessione utilizzando le sovrascritture supportate per Snapshot Debugger.

Proprietà della stringa di connessione Cloud del governo USA Cloud per la Cina
SnapshotEndpoint https://snapshot.monitor.azure.us https://snapshot.monitor.azure.cn

Per altre informazioni su altre sostituzioni di connessione, vedere la documentazione di Application Insights.

Per Funzione App, è necessario aggiornare il host.json usando le opzioni di sovrascrittura supportate.

Proprietà Cloud del governo USA Cloud per la Cina
AgentEndpoint https://snapshot.monitor.azure.us https://snapshot.monitor.azure.cn

Esempio di host.json aggiornato con l'endpoint dell'agente cloud per il governo degli Stati Uniti:

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

Diversi problemi comuni causano la mancata visualizzazione del pulsante Apri snapshot di debug. Ad esempio:

  • Uso di un collettore di snapshot obsoleto
  • Raggiungimento del limite di caricamento giornaliero
  • Lo snapshot richiede molto tempo per il caricamento.

Accedere a Controllo integrità snapshot per risolvere i problemi comuni tramite un collegamento nel riquadro Eccezioni della visualizzazione di traccia end-to-end.

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 interattiva Controllo integrità 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.

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

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

L'endpoint Snapshot Debugger richiede TLS versione 1.2. Il set di protocolli di sicurezza SSL è una delle particolarità abilitate dal valore httpRuntime targetFramework nella sezione system.web di web.config.

Se httpRuntime targetFramework è 4.5.2 o versione precedente, TLS 1.2 non è incluso per impostazione predefinita.

Nota

Il valore httpRuntime targetFramework è indipendente dal framework di destinazione usato durante la compilazione dell'applicazione.

Per controllare l'impostazione, aprire il file web.config e individuare la sezione system.web. Assicurarsi che il valore di targetFramework per httpRuntime sia impostato su 4.6 o superiore.

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

Nota

La modifica del valore httpRuntime targetFramework modifica le eccezioni di runtime applicate 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 Re-targeting delle modifiche.

Nota

targetFramework Se è 4.7 o versione successiva, 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.

Scenari di overhead di Snapshot Debugger

Snapshot Debugger è progettato per l'uso in ambienti di produzione. Le impostazioni predefinite includono limiti di frequenza per ridurre al minimo l'impatto sulle applicazioni.

Tuttavia, è possibile riscontrare un sovraccarico di CPU, memoria e I/O ridotto associato a Snapshot Debugger, come negli scenari seguenti.

Quando viene generata un'eccezione nell'applicazione:

  • La creazione di una firma per il tipo di problema e la decisione se creare uno snapshot comporta un sovraccarico di CPU e memoria ridotto.

  • Se la de-ottimizzazione è abilitata, si verifica un sovraccarico per il re-JITting del metodo che ha generato l'eccezione. Il problema si verifica la prossima volta che il metodo viene eseguito. A seconda delle dimensioni del metodo, il tempo CPU può variare tra 1 ms e 100 ms.

Se il gestore delle eccezioni decide di creare uno snapshot:

  • La creazione dello snapshot del processo richiede circa mezzo secondo (P50 = 0,3 s, P90 = 1,2 s, P95 = 1,9 s) durante il quale il thread che ha generato l'eccezione viene sospeso. Gli altri thread non vengono bloccati.

  • La conversione dello snapshot del processo in un minidump e il caricamento in Application Insights richiede alcuni minuti.

    • Convert: P50 = 63 s, P90 = 187 s, P95 = 275 s.
    • Caricamento: P50 = 31 s, P90 = 75 s, P95 = 98 s.

    Questa operazione viene eseguita in Snapshot Uploader, che viene eseguito in un processo separato. Il processo Snapshot Uploader viene eseguito al di sotto della normale priorità della CPU e usa operazioni di I/O con priorità bassa.

    Il minidump viene prima scritto su disco e la quantità di spazio su disco è approssimativamente uguale al working set del processo originale. La scrittura del minidump può causare errori di pagina durante la lettura della memoria.

    Il minidump viene compresso durante il caricamento, che utilizza CPU e memoria nel processo Snapshot Uploader. L'overhead della CPU, della memoria e del disco è proporzionale alle dimensioni dello snapshot del processo. Snapshot Uploader elabora gli snapshot in modo seriale.

Quando TrackException viene chiamato:

Snapshot Debugger controlla se l'eccezione è nuova o se è stato creato uno snapshot. Ciò comporta un piccolo sovraccarico della CPU.

Versioni di anteprima di .NET Core

Se si usa una versione di anteprima di .NET Core o l'applicazione fa riferimento ad Application Insights SDK, direttamente o indirettamente tramite un assembly dipendente, seguire le istruzioni per Abilitare Snapshot Debugger per altri ambienti.

Controllare la pagina relativa allo stato dell'estensione del sito dei Servizi di diagnostica

Se Snapshot Debugger è stato abilitato tramite il riquadro Application Insights nel portale, è stato attivato dall'estensione del sito dei Servizi di diagnostica.

Nota

L'installazione senza codice di Application Insights Snapshot Debugger 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 dello stato di questa estensione andando al seguente URL: https://{site-name}.scm.azurewebsites.net/DiagnosticServices

Nota

Il dominio del link alla Pagina dello stato varierà a seconda del cloud.

Questo dominio è lo stesso del sito di gestione Kudu per il Servizio app di Azure. La pagina di stato mostra lo stato di installazione degli agenti .NET Profiler e Snapshot Collector. Se si è verificato un errore imprevisto, viene illustrato come risolverlo.

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

  1. Aprire l'applicazione del servizio app nel portale di Azure.
  2. Selezionare Strumenti avanzati o cercare Kudu.
  3. Selezionare Vai.
  4. Quando si è nel sito di gestione Kudu, nell'URL aggiungere il seguente /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 di Snapshot Debugger, vedere le opzioni seguenti:

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

Controllare i log dell'utilità di caricamento

Dopo la creazione di uno snapshot, un file di minidump (.dmp) viene creato sul 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. Dopo che il minidump è stato caricato correttamente, 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 Console di debug 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 uno snapshot riuscito e di un caricamento riuscito:

SnapshotUploader.exe Information: 0 : Received Fork request ID <request-ID> from process <ID> (Low pri)
    DateTime=2018-03-09T01:42:41.8571711Z
SnapshotUploader.exe Information: 0 : Creating minidump from Fork request ID <request-ID> from process 6368 (Low pri)
    DateTime=2018-03-09T01:42:41.8571711Z
SnapshotUploader.exe Information: 0 : Dump placeholder file created: <request-ID>.dm_
    DateTime=2018-03-09T01:42:41.8728496Z
SnapshotUploader.exe Information: 0 : Dump available <request-ID>.dmp
    DateTime=2018-03-09T01:42:45.7525022Z
SnapshotUploader.exe Information: 0 : Successfully wrote minidump to D:\local\Temp\Dumps\<connection-string>\<request-ID>.dmp
    DateTime=2018-03-09T01:42:45.7681360Z
SnapshotUploader.exe Information: 0 : Uploading D:\local\Temp\Dumps\<connection-string>\<request-ID>.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\<connection-string>\<request-ID>.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\<connection-string>\<request-ID>.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 stringa di connessione deve corrispondere alla stringa di connessione per l'applicazione. Il minidump è associato a uno snapshot con l'ID richiesta. Sarà possibile usare questo ID in seguito per individuare il record dell'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\<connection-string>\<process-ID>.pdbscan
    DateTime=2018-03-09T01:47:19.4614027Z

Per le applicazioni non ospitate nel servizio app, i log del caricatore si trovano nella stessa cartella dei minidump: %TEMP%\Dumps\<string> (dove <string> è la stringa di connessione).

Risolvere i problemi relativi ai servizi cloud

In Servizi cloud, la cartella temporanea predefinita potrebbe essere troppo piccola per contenere i file di minidump, con conseguente perdita di snapshot. Lo spazio necessario dipende dal working set totale dell'applicazione e dal numero di snapshot simultanei.

L'insieme di lavoro 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 working set totale, è necessario assicurarsi che ci siano almeno 2 GB di spazio su disco per archiviare gli snapshot.

Configurare il ruolo 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 Worker, il codice deve essere aggiunto al metodo OnStart del tuo 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 ApplicationInsights.config del ruolo per sostituire il percorso della cartella temporanea 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, Snapshot Collector segnala un errore che indica che non è stato possibile trovare una cartella di copia shadow appropriata.

Se la copia non riesce, il raccoglitore di snapshot segnala un ShadowCopyFailed errore.

Se il caricatore non può essere avviato, l'agente di raccolta snapshot segnala un UploaderCannotStartFromShadowCopy errore. 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, vengono spesso 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. Per 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, usando appsettings.json con un'applicazione .NET Core:

{
    "ApplicationInsights": {
        "ConnectionString": "<your connection string>"
    },
    "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 dello snapshot viene incluso come proprietà personalizzata quando l'eccezione viene segnalata ad Application Insights. Usando Cerca in Application Insights, è possibile trovare tutti i record con la proprietà personalizzata ai.snapshot.id.

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

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

Se questa ricerca non restituisce risultati, non sono stati segnalati snapshot ad 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 sicuramente caricato, seguire questa procedura:

  1. Controllare di esaminare la risorsa di Application Insights corretta verificando la stringa di connessione.

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

Se ancora non vengono visualizzate eccezioni con tale ID snapshot, significa che il record dell'eccezione non è stato segnalato ad 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 il record dell'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, può essere necessario aggiornare le regole per comunicare con il servizio Snapshot Debugger.

Gli indirizzi IP usati da Application Insights Snapshot Debugger sono inclusi nel tag del servizio Monitoraggio di Azure. Per altre informazioni, vedere la documentazione relativa ai tag del servizio.

Ci sono costi di fatturazione quando si usano gli snapshot?

Non ci sono addebiti relativi a Snapshot Debugger per la tua sottoscrizione. 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.

Risolvere i problemi relativi a "Bring Your Own Storage" (BYOS)

Risolvere i problemi comuni relativi alla configurazione di BYOS.

Scenario: Template schema '{schema_uri}' isn't supported

È stato visualizzato un errore simile all'esempio seguente:

New-AzResourceGroupDeployment : 11:53:49 AM - Error: Code=InvalidTemplate; Message=Deployment template validation failed: 'Template schema
'https://schema.management.azure.com/schemas/2020-01-01/deploymentTemplate.json#' is not supported. Supported versions are
'2014-04-01-preview,2015-01-01,2018-05-01,2019-04-01,2019-08-01'. Please see https://aka.ms/arm-template for usage details.'.

Soluzioni

  • Assicurarsi che la proprietà $schema del modello sia valida. Deve seguire questo modello:

    https://schema.management.azure.com/schemas/{schema_version}/deploymentTemplate.json#
    
  • Assicurarsi che il schema_version del template sia all'interno di valori validi: 2014-04-01-preview, 2015-01-01, 2018-05-01, 2019-04-01, 2019-08-01.

Scenario: No registered resource provider found for location '{location}'

È stato visualizzato un errore simile all'esempio seguente:

New-AzResourceGroupDeployment : 6:18:03 PM - Resource microsoft.insights/components 'byos-test-westus2-ai' failed with message '{
  "error": {
    "code": "NoRegisteredProviderFound",
    "message": "No registered resource provider found for location 'westus2' and API version '2020-03-01-preview' for type 'components'. The supported api-versions are '2014-04-01,
2014-08-01, 2014-12-01-preview, 2015-05-01, 2018-05-01-preview'. The supported locations are ', eastus, southcentralus, northeurope, westeurope, southeastasia, westus2, uksouth,
canadacentral, centralindia, japaneast, australiaeast, koreacentral, francecentral, centralus, eastus2, eastasia, westus, southafricanorth, northcentralus, brazilsouth, switzerlandnorth,
australiasoutheast'."
  }
}'

Soluzioni

  • Assicurarsi che apiVersion della risorsa microsoft.insights/components sia 2015-05-01.
  • Assicurarsi che apiVersion della risorsa linkedStorageAccount sia 2020-03-01-preview.

Scenario: Storage account location should match Application Insights component location

È stato visualizzato un errore simile all'esempio seguente:

New-AzResourceGroupDeployment : 1:01:12 PM - Resource microsoft.insights/components/linkedStorageAccounts 'byos-test-centralus-ai/serviceprofiler' failed with message '{
  "error": {
    "code": "BadRequest",
    "message": "Storage account location should match AI component location",
    "innererror": {
      "trace": [
        "System.ArgumentException"
      ]
    }
  }
}'

Soluzione

Assicurarsi che la posizione della risorsa di Application Insights corrisponda all'account di archiviazione.