Contatori delle prestazioni di sistema in Application Insights

Windows offre un'ampia 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 è in esecuzione in IIS in un host locale o è una macchina virtuale a cui si ha accesso amministrativo. Anche se le applicazioni in esecuzione come Azure App Web non hanno accesso diretto ai contatori delle prestazioni, un subset di contatori disponibili viene raccolto da Application Insights.

Nota

La documentazione seguente si basa sull'API classica di Application Insights. Il piano a lungo termine per Application Insights consiste nel raccogliere dati usando OpenTelemetry. Per altre informazioni, vedere Abilitare OpenTelemetry di Monitoraggio di Azure per le applicazioni .NET, Node.js, Python e Java.

Prerequisiti

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

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

Visualizzare i contatori

Il riquadro Metriche mostra il set predefinito di contatori delle prestazioni.

Screenshot that shows performance counters reported in Application Insights.

Contatori predefiniti correnti per le applicazioni Web ASP.NET:

  • % Processo\Tempo processore
  • % Processo\Tempo processore normalizzato
  • Memoria\Byte disponibili
  • Richieste ASP.NET/sec
  • Eccezioni .NET CLR generate/sec
  • Tempo di esecuzione ApplicationsRequest ASP.NET
  • Process\Private Bytes
  • Elaborazione\Byte dati I/sec
  • ASP.NET applicazioni\Richieste nella coda delle applicazioni
  • Processore (_Total)\% Tempo processore

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

  • % Processo\Tempo processore
  • % Processo\Tempo processore normalizzato
  • Memoria\Byte disponibili
  • Process\Private Bytes
  • Elaborazione\Byte dati I/sec
  • Processore (_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

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

È possibile acquisire contatori e contatori standard implementati manualmente. \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 ReportAs parametro è obbligatorio per i nomi dei contatori che non corrispondono a [a-zA-Z()/-_ \.]+. Ovvero contengono caratteri non inclusi nei set seguenti: lettere, parentesi quadre rotonde, barra, trattino, carattere di sottolineatura, spazio e punto.

Se si specifica un'istanza, verrà raccolta come dimensione CounterInstanceName della metrica segnalata.

Raccogliere 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 le applicazioni Web di base di ASP.NET

Configurare PerformanceCollectorModule dopo il WebApplication.CreateBuilder() metodo 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 that shows performance counters in Application Insights analytics.

In questo caso, Instance si riferisce all'istanza del contatore delle prestazioni, non all'istanza del computer del ruolo o del server. Il nome dell'istanza del contatore delle prestazioni in genere 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 that shows a memory time chart in Application Insights analytics.

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 that shows performance segmented by role instance in Application Insights analytics.

Conteggi di ASP.NET e Application Insights

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

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

  • Exception rate: la frequenza delle eccezioni è un contatore delle prestazioni di sistema. CLR conta 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 Eccezioni è un conteggio dei TrackException report ricevuti dal portale nell'intervallo di campionamento del grafico. Include solo le eccezioni gestite in cui sono state scritte TrackException chiamate 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 in app Azure Servizio 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 del sistema. Tuttavia, un subset limitato di contatori viene esposto come variabili 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 viene 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 usa 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 CPU/memoria in Linux. Linux non supporta nessun altro contatore. Per ottenere i contatori di sistema in Linux (e 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