Condividi tramite


Risolvere i problemi di Application Insights Profiler per .NET

Questo articolo presenta i passaggi e le informazioni per la risoluzione dei problemi per consentire l'uso di Application Insights Profiler per .NET.

Stai utilizzando l'endpoint .NET Profiler appropriato?

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

Impostazione app Cloud di enti pubblici USA Cloud per la Cina
ApplicationInsightsProfilerEndpoint https://profiler.monitor.azure.us https://profiler.monitor.azure.cn
ApplicationInsightsEndpoint https://dc.applicationinsights.us https://dc.applicationinsights.azure.cn

È in esecuzione la versione corretta dell'app?

Profiler è supportato nelle versioni di .NET Framework successive alla 4.6.2.

Se l'app Web è un'applicazione ASP.NET Core, deve essere in esecuzione il runtime di ASP.NET Core più recente.

Si usa il piano di servizio di Azure corretto?

Profiler per .NET non è attualmente supportato nei piani di servizio app gratuiti o condivisi. Per garantire il corretto funzionamento di Profiler, eseguire l'aggiornamento a uno dei piani di base.

Nota

Il piano A consumo di Funzioni di Azure non è supportato. Vedere Profilatura dell'app Funzioni di Azure in tempo reale con Application Insights.

Si stanno cercando i dati di Profiler .NET nell'intervallo di tempo corretto?

Se i dati che si sta tentando di visualizzare sono antecedenti a due settimane, limitare il filtro temporale e riprovare. Le tracce vengono eliminate dopo sette giorni.

Si è a conoscenza della frequenza di campionamento e del sovraccarico del profiler .NET?

.NET Profiler esegue in modo casuale due minuti all'ora in ogni macchina virtuale che ospita applicazioni con Profiler abilitato.

Nota

Quando Application Insights Profiler per .NET è in esecuzione e raccoglie attivamente tracce, in genere aggiunge tra il 5% e il 15% del sovraccarico di CPU e memoria al server.

Non sono previsti costi aggiuntivi per l'archiviazione dei dati acquisiti da .NET Profiler. I dati vengono eliminati automaticamente dopo 15 giorni.

È possibile accedere al gateway?

Verificare che un firewall o i proxy non blocchino l'accesso a questa pagina Web.

State riscontrando timeout o avete bisogno di verificare se il profiler .NET è in esecuzione?

I dati di profilatura vengono caricati solo quando possono essere collegati a una richiesta avvenuta durante l'esecuzione di Profiler. .NET Profiler raccoglie i dati per due minuti ogni ora. È anche possibile attivare profiler avviando una sessione di profilatura.

Profiler scrive messaggi di traccia ed eventi personalizzati nella risorsa di Application Insights. È possibile utilizzare tali eventi per vedere in che modo viene eseguito il profiler.

Cercare messaggi di traccia ed eventi personalizzati inviati da .NET Profiler alla risorsa di Application Insights.

  1. Nella risorsa di Application Insights selezionare Cerca nel menu in alto.

    Screenshot che mostra la selezione del pulsante Cerca nella risorsa di Application Insights.

  2. Usare la stringa di ricerca seguente per trovare i dati pertinenti:

    stopprofiler OR startprofiler OR upload OR ServiceProfilerSample
    

    Screenshot che mostra i risultati della ricerca della stringa di ricerca indicata in precedenza.

    I risultati della ricerca precedente includono due esempi di ricerche da due risorse di intelligenza artificiale:

    • Se l'applicazione non riceve richieste durante l'esecuzione di Profiler, il messaggio spiega che il caricamento è stato annullato a causa dell'assenza di attività.

    • Profiler è stato avviato e ha inviato eventi personalizzati quando ha rilevato richieste avvenute durante la sua esecuzione. Se viene visualizzato l'evento personalizzato ServiceProfilerSample, significa che un profilo è stato acquisito ed è disponibile nel riquadro Prestazioni di Application Insights.

    Se non vengono visualizzati record, Profiler non è in esecuzione o ha impiegato troppo tempo per rispondere. Assicurarsi che Profiler sia abilitato nel servizio di Azure.

Il profiler .NET è attivo, ma non sono state acquisite tracce

Anche quando il Profiler è abilitato, potrebbe non acquisire o caricare tracce, in particolare in queste situazioni:

  1. Nessuna richiesta in ingresso all'applicazione:
    È possibile richiamare manualmente l'applicazione o creare un test di disponibilità o un test di carico.

  2. Nessun dato di telemetria in ingresso riconosciuto da Application Insights:

  3. L'impostazione del Profiler per Il campionamento è disattivata:
    Se non sono ancora disponibili tracce del Profiler, controllare l'impostazione di campionamento del Profiler.

    1. Aprire il pannello Application Insights>Prestazioni.
    2. Fare clic su Profiler.
    3. Fare clic sul pulsante Attivatori.
    4. In Impostazioni trigger verificare che il tasto di alternanza Campionamento sia attivato.
  4. Nessuna traccia caricata?
    Creare una richiesta di supporto o chiedere supporto alla community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.

Doppio conteggio in thread paralleli

Quando due o più thread paralleli sono associati a una richiesta, la metrica del tempo totale nel visualizzatore dello stack potrebbe essere superiore alla durata della richiesta. In questo caso, il tempo totale di thread è superiore al tempo trascorso effettivo.

Ad esempio, è possibile che un thread sia in attesa del completamento dell'altro. Il visualizzatore prova a rilevare questa situazione e omette l'attesa non interessante. Ciò facendo, sbaglia visualizzando troppe informazioni anziché omettendo informazioni potenzialmente critiche.

Quando nelle tracce sono presenti thread in parallelo, individuare i thread in attesa in modo da identificare il percorso critico della richiesta. Un thread che passa rapidamente in uno stato di attesa è in genere in attesa di altri thread. Concentrarsi sugli altri thread e ignorare il tempo nei thread in attesa.

Risolvere i problemi di .NET Profiler nel servizio di Azure specifico

Le sezioni seguenti illustrano i passaggi per la risoluzione dei problemi relativi all'uso di Profiler nel servizio app di Azure.

Servizio app di Azure

Per il corretto funzionamento di .NET Profiler, assicurarsi di:

  • La tua app Web ha Application Insights abilitato con le impostazioni corrette.

  • Il processo Web ApplicationInsightsProfiler3 è in esecuzione. Per controllare il processo Web:

    1. Passare a Kudu. Nel portale di Azure:

      1. Nell'istanza del Servizio app di Azure selezionare Strumenti avanzati nel riquadro a sinistra.
      2. Selezionare Vai.
    2. Nel menu in alto selezionare Strumenti>Dashboard di WebJobs. Si apre il riquadro WebJobs.

      Se ApplicationInsightsProfiler3 non viene visualizzato, riavviare l'applicazione App Service.

      Screenshot che mostra il riquadro Processi Web, che mostra il nome, lo stato e l'ultimo runtime dei processi.

    3. Per visualizzare i dettagli del WebJob, compreso il log, selezionare il collegamento ApplicationInsightsProfiler3. Verrà visualizzato il riquadro Continuous WebJob Details.

      Screenshot che mostra il riquadro Dettagli processo Web continuo.

Se il profiler .NET non funziona ancora, scaricare il log e inviare un ticket di supporto tecnico di Azure.

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

Se Profiler .NET è stato abilitato tramite il riquadro Application Insights nel portale, viene gestito dall'estensione del sito dei servizi di diagnostica. È possibile controllare la pagina dello stato di questa estensione passando a https://{site-name}.scm.azurewebsites.net/DiagnosticServices.

Nota

Il dominio del collegamento alla pagina dello stato varia a seconda del cloud. Questo dominio è lo stesso del sito di gestione Kudu per App Service.

La pagina relativa allo stato mostra lo stato di installazione degli agenti .NET Profiler e Snapshot Debugger . Se si è verificato un errore imprevisto, viene visualizzato insieme alla procedura per risolverlo.

È possibile usare il sito di gestione Kudu per il 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.
  3. Selezionare Vai.
  4. Nel sito di gestione Kudu:
    1. Aggiungere /DiagnosticServices all'URL.
    2. Selezionare INVIO.

La parte terminale sarà simile a https://<kudu-url>/DiagnosticServices.

La pagina dello stato è simile all'esempio seguente.

Screenshot che mostra la pagina relativa allo stato dei servizi di diagnostica.

Nota

L'installazione senza codice di Application Insights Profiler per .NET segue i criteri di supporto di .NET Core. Per altre informazioni sui runtime supportati, vedere Criteri di supporto di .NET Core.

Installazione manuale

Quando si configura .NET Profiler, vengono eseguiti aggiornamenti alle impostazioni dell'app Web. Se necessario, è possibile applicare manualmente gli aggiornamenti.

Troppe sessioni di profilatura attive

Nel Servizio app di Azure è previsto un limite di una sola sessione di profilatura alla volta. Questo limite viene applicato a livello della macchina virtuale in tutte le applicazioni e gli slot di distribuzione in esecuzione in un Piano di Servizio App. Questo limite si applica allo stesso modo alle sessioni di profilatura avviate tramite Diagnostica e risoluzione di problemi, Kudu e Application Insights Profiler per .NET.

Se il profiler .NET tenta di avviare una sessione quando un'altra è già in esecuzione, viene registrato un errore nel registro dell'applicazione e anche nel registro continuo del WebJob per ApplicationInsightsProfiler3.

Nei log potrebbe essere visualizzato uno dei messaggi seguenti:

  • Microsoft.ServiceProfiler.Exceptions.TooManyETWSessionException
  • Error: StartProfiler failed. Details: System.Runtime.InteropServices.COMException (0xE111005E): Exception from HRESULT: 0xE111005E

Il codice 0xE111005E di errore indica che non è stato possibile avviare una sessione di profilatura perché è già in esecuzione un'altra sessione.

Per evitare l'errore, spostare alcune app Web in un piano di servizio app diverso o disabilitare profiler in alcune applicazioni. Se si usano gli slot di distribuzione, assicurarsi di arrestare eventuali slot inutilizzati.

Errore di distribuzione: Directory non vuota 'D:\home\site\wwwroot\App_Data\jobs'

Se si ridistribuisce l'app Web in una risorsa App Web con .NET Profiler abilitato, è possibile che venga visualizzato il messaggio seguente:

La directory non è vuota: 'D:\home\site\wwwroot\App_Data\jobs'

L'errore si verifica se si esegue Web Deploy tramite script o Azure Pipelines. Risolvere il problema aggiungendo i parametri di distribuzione seguenti all'attività di Distribuzione Web:

-skip:Directory='.*\\App_Data\\jobs\\continuous\\ApplicationInsightsProfiler.*' -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data\\jobs\\continuous$' -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data\\jobs$'  -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data$'

Questi parametri eliminano la cartella usata da Application Insights Profiler per .NET e sbloccano il processo di ridistribuzione. Non influiscono sull'istanza di Profiler attualmente in esecuzione.

Application Insights Profiler è in esecuzione per .NET?

Profiler viene eseguito come processo WebJob continuo nell'app Web. È possibile aprire la risorsa dell'app Web nel portale di Azure. Nel riquadro WebJobs controllare lo stato di ApplicationInsightsProfiler. Se non è in esecuzione, aprire Log per altre informazioni.

Macchine virtuali

Per verificare se il profiler .NET è configurato correttamente da Diagnostica di Azure:

  1. Verificare che il contenuto della configurazione di Diagnostica di Azure sia quello previsto.

  2. Assicurarsi che Azure Diagnostics passi il corretto iKey nella riga di comando del Profiler.

  3. Controllare il file di log del Profiler per verificare se il profiler .NET è stato eseguito ma ha restituito un errore.

Per controllare le impostazioni usate per configurare Diagnostica di Azure:

  1. Accedere alla macchina virtuale.

  2. Aprire il file di log in questo percorso. La versione del plug-in potrebbe essere più recente nel computer.

    c:\WindowsAzure\logs\Plugins\Microsoft.Azure.Diagnostics.PaaSDiagnostics\1.11.3.12\DiagnosticsPlugin.log
    
  3. Cercare nel file la stringa WadCfg per trovare le impostazioni passate alla macchina virtuale per configurare Diagnostica di Azure.

  4. Verificare se la iKEY è utilizzata dal sink di Profiler .NET è corretta.

  5. Controllare la riga di comando che avvia Profiler. Gli argomenti della riga di comando si trovano nel file seguente (l'unità potrebbe essere c: o d: e la directory potrebbe essere nascosta):

    C:\ProgramData\ApplicationInsightsProfiler\config.json
    
  6. Assicurarsi che iKey nella riga di comando di Profiler sia corretta.

  7. Usando il percorso disponibile nel file config.json precedente, controllare il file di log di Profiler, denominato BootstrapN.log. Vengono visualizzati questi dati:

    • Informazioni di debug che indicano le impostazioni usate da Profiler.
    • Messaggi di stato e di errore da Profiler.

    È possibile trovare il file:

    C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics\1.17.0.6\ApplicationInsightsProfiler
    
  8. Se il profiler .NET è in esecuzione mentre l'applicazione riceve le richieste, viene visualizzato il messaggio seguente: "Attività rilevata da iKey".

  9. Durante il caricamento dell'analisi viene visualizzato il messaggio seguente: "Avviare il caricamento dell'analisi".

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 .NET Profiler.

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

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.

Supporto tecnico

Se è ancora necessaria assistenza, inviare un ticket di supporto facendo clic sull'icona del punto interrogativo nel portale di Azure. Includere l'ID di correlazione disponibile nel messaggio di errore.