Contatori delle prestazioni di sistema in Application Insights

Windows offre una vasta gamma di contatori delle prestazioni, ad esempio quelli usati per raccogliere statistiche sull'utilizzo del processore, della memoria e del disco. È anche possibile definire contatori delle prestazioni personalizzati.

La raccolta dei contatori delle prestazioni è supportata se l'applicazione viene eseguita in IIS su un host locale o in una macchina virtuale per i quali si dispone dell'accesso di amministratore. Sebbene le applicazioni in esecuzione come App Web di Azure non dispongano dell'accesso diretto ai contatori delle prestazioni, Application Insights raccoglie un subset di contatori disponibili.

Nota

La documentazione seguente si basa sull'API classica di Application Insights. Il piano a lungo termine per Application Insights prevede la raccolta di dati con OpenTelemetry. Per altre informazioni, vedere Abilitare OpenTelemetry di Monitoraggio di Azure per le applicazioni .NET, Node.js, Python e Java oltre che la Roadmap OpenTelemetry. Le indicazioni sulla migrazione sono disponibili per .NET, Node.js e Python.

Prerequisiti

Concedere all'account del servizio pool di app, l'autorizzazione per monitorare i contatori delle prestazioni aggiungendolo al gruppo Utenti del Monitor prestazioni.

net localgroup "Performance Monitor Users" /add "IIS APPPOOL\NameOfYourPool"

Visualizzare i contatori

Nel riquadro Metrica è riportato un set predefinito di contatori delle prestazioni.

Screenshot che mostra i contatori delle prestazioni segnalati in Application Insights.

Contatori predefiniti correnti per le applicazioni Web ASP.NET:

  • % Processo\Tempo processore
  • % Processo\Tempo normalizzato processore
  • Memoria\Byte disponibili
  • Richieste ASP.NET/sec
  • Eccezioni .NET CLR generate/sec
  • Tempo di esecuzione ApplicationsRequest ASP.NET
  • Processo\Byte privati
  • Processo\Byte dati IO/sec
  • Applicazioni ASP.NET\Richieste in coda applicazione
  • Processor(_Total)\% tempo processore

Contatori predefiniti correnti raccolti per le applicazioni Web di ASP.NET Core:

  • % Processo\Tempo processore
  • % Processo\Tempo normalizzato processore
  • Memoria\Byte disponibili
  • Processo\Byte privati
  • Processo\Byte dati IO/sec
  • Processor(_Total)\% tempo processore

Aggiungere contatori

Se il contatore delle prestazioni desiderato non è incluso nell'elenco delle metriche, è possibile aggiungerlo.

  1. È possibile identificare i contatori disponibili nel server usando questo comando di PowerShell nel server locale:

    Get-Counter -ListSet *
    

    Per ulteriori informazioni, vedere Get-Counter.

  2. ApplicationInsights.config aperti.

    Se Application Insights è stato aggiunto all'app durante lo sviluppo:

    1. Modificare ApplicationInsights.config nel progetto.
    2. Ridistribuirlo nei server.
  3. Modificare la direttiva dell'agente di raccolta delle prestazioni:

    
        <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector">
          <Counters>
            <Add PerformanceCounter="\Objects\Processes"/>
            <Add PerformanceCounter="\Sales(photo)\# Items Sold" ReportAs="Photo sales"/>
          </Counters>
        </Add>
    

Nota

Le applicazioni ASP.NET Core non hanno ApplicationInsights.config, pertanto il metodo precedente non è valido per le applicazioni ASP.NET Core.

È possibile acquisire i contatori standard e quelli implementati autonomamente. \Objects\Processes è un esempio di contatore standard, disponibile in tutti i sistemi Windows. \Sales(photo)\# Items Sold è un esempio di contatore personalizzato che può essere implementato in un servizio Web.

Il formato è \Category(instance)\Counter oppure, per categorie non associate a istanze, solo \Category\Counter.

Il parametro ReportAs è obbligatorio per i nomi dei contatori che non corrispondono a [a-zA-Z()/-_ \.]+. Ovvero, contengono caratteri non inclusi nei set seguenti: lettere, parentesi tonde, barra, trattino, carattere di sottolineatura, spazio e punto.

Se si specifica un'istanza, questa sarà raccolta come dimensione CounterInstanceName della metrica indicata.

Raccogliere i contatori delle prestazioni nel codice per applicazioni Web ASP.NET o applicazioni Console .NET/.NET Core

Per raccogliere i contatori delle prestazioni di sistema e inviarli ad Application Insights, è possibile adattare il frammento di codice seguente:

    var perfCollectorModule = new PerformanceCollectorModule();
    perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
      @"\Process([replace-with-application-process-name])\Page Faults/sec", "PageFaultsPerfSec"));
    perfCollectorModule.Initialize(TelemetryConfiguration.Active);

In alternativa, è possibile eseguire la stessa operazione con le metriche personalizzate create:

    var perfCollectorModule = new PerformanceCollectorModule();
    perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
      @"\Sales(photo)\# Items Sold", "Photo sales"));
    perfCollectorModule.Initialize(TelemetryConfiguration.Active);

Raccogliere i contatori delle prestazioni nel codice per applicazioni Web ASP.NET Core

Configurare PerformanceCollectorModule secondo il metodo WebApplication.CreateBuilder() in Program.cs:

using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddApplicationInsightsTelemetry();

// The following configures PerformanceCollectorModule.

builder.Services.ConfigureTelemetryModule<PerformanceCollectorModule>((module, o) =>
    {
        // The application process name could be "dotnet" for ASP.NET Core self-hosted applications.
        module.Counters.Add(new PerformanceCounterCollectionRequest(@"\Process([replace-with-application-process-name])\Page Faults/sec", "DotnetPageFaultsPerfSec"));
    });

var app = builder.Build();

Contatori delle prestazioni in Log Analytics

È possibile cercare e visualizzare i report dei contatori delle prestazioni in Log Analytics.

Lo schema performanceCounters espone category, il nome counter e il nome instance per ogni contatore delle prestazioni. Nei dati di telemetria per ogni applicazione verranno visualizzati solo i contatori per l'applicazione specifica. Ad esempio, per visualizzare quali contatori sono disponibili:

Screenshot relativa ai contatori delle prestazioni nell'analisi di Application Insights.

Qui Instance fa riferimento all'istanza del contatore delle prestazioni e non all'istanza del ruolo o del server. Solitamente, il nome dell'istanza del contatore delle prestazioni segmenta i contatori, ad esempio il tempo del processore, in base al nome del processo o dell'applicazione.

Per ottenere un grafico della memoria disponibile nel periodo recente:

Screenshot che mostra un grafico del tempo della memoria nell'analisi di Application Insights.

Come altri dati di telemetria, performanceCounters contiene anche una colonna cloud_RoleInstance che indica l'identità dell'istanza del server host in cui viene eseguita l'app. Ad esempio, per confrontare le prestazioni dell'applicazione su computer diversi:

Screenshot che mostra le prestazioni segmentate per istanza di ruolo nell'analisi di Application Insights.

Conteggi di ASP.NET e Application Insights

Le sezioni successive illustrano i conteggi di ASP.NET e Application Insights.

Qual è la differenza tra il tasso di eccezione e le metriche delle eccezioni?

  • Exception rate: percentuale di eccezioni è un contatore delle prestazioni del sistema. Il CLR consente di contare tutte le eccezioni gestite e non gestite generate e divide il totale in un intervallo di campionamento per la lunghezza dell'intervallo. SDK di Application Insights raccoglie questo risultato e lo invia al portale.
  • Exceptions: la metrica delle eccezioni è il conteggio dei report TrackException ricevuti dal portale nell'intervallo di campionamento del grafico. Esso include solo le eccezioni gestite in cui sono state scritte chiamate TrackException nel codice. Non include tutte le eccezioni non gestite.

Contatori delle prestazioni per le applicazioni in esecuzione in App Web di Azure e in contenitori Windows in Servizio app di Azure

Le applicazioni ASP.NET e ASP.NET Core distribuite in App Web di Azure vengono eseguite in un ambiente sandbox speciale. Le applicazioni distribuite nel servizio app di Azure possono usare un Contenitore Windows o essere ospitate in un ambiente sandbox. Se l'applicazione viene distribuita in un contenitore Windows, tutti i contatori delle prestazioni standard sono disponibili nell'immagine del contenitore.

L'ambiente sandbox non consente l'accesso diretto ai contatori delle prestazioni di sistema. Tuttavia, un subset limitato di contatori viene esposto come variabile di ambiente, come descritto in Contatori delle prestazioni esposte come variabili di ambiente. In questo ambiente è disponibile solo un subset di contatori. Per l'elenco completo, vedere Contatori delle prestazioni esposti come variabili di ambiente.

Application Insights SDK per ASP.NET e ASP.NET Core rileva se il codice è distribuito in un'app Web o in un contenitore non Windows. Il rilevamento determina se raccoglie i contatori delle prestazioni in un ambiente sandbox o se utilizza il meccanismo di raccolta standard quando è ospitato in un contenitore Windows o in una macchina virtuale.

Contatori delle prestazioni nelle applicazioni ASP.NET Core

Il supporto dei contatori delle prestazioni nelle applicazioni ASP.NET Core è limitato:

  • Le versioni di SDK 2.4.1 e successive raccolgono i contatori delle prestazioni se l'applicazione è in esecuzione in App Web di Azure (Windows).
  • Le versioni di SDK 2.7.1 e successive raccolgono contatori delle prestazioni se l'applicazione è in esecuzione in Windows e ha come destinazione NETSTANDARD2.0 o versioni successive.
  • Per le applicazioni destinate a .NET Framework, tutte le versioni dell'SDK supportano i contatori delle prestazioni.
  • Le versioni SDK 2.8.0 e successive supportano il contatore di CPU/memoria in Linux. Linux non supporta nessun altro contatore. Per ottenere i contatori di sistema in Linux (e in altri ambienti non Windows), usare EventCounters.

Avvisi

Come per altre metriche, è possibile impostare un avviso per ricevere una notifica se un contatore delle prestazioni supera un limite specificato. Per impostare un avviso, aprire il riquadro Avvisi e selezionare Aggiungi avviso.

Passaggi successivi