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.
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.
È possibile identificare i contatori disponibili nel server usando questo comando di PowerShell nel server locale:
Get-Counter -ListSet *
Per ulteriori informazioni, vedere
Get-Counter
.ApplicationInsights.config
aperti.Se Application Insights è stato aggiunto all'app durante lo sviluppo:
- Modificare
ApplicationInsights.config
nel progetto. - Ridistribuirlo nei server.
- Modificare
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:
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:
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:
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 reportTrackException
ricevuti dal portale nell'intervallo di campionamento del grafico. Esso include solo le eccezioni gestite in cui sono state scritte chiamateTrackException
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.