Contatori per .NET in Application Insights
Application Insights di Monitoraggiodi Azure supporta contatori delle prestazioni e contatori degli eventi. Questa guida offre una panoramica di entrambi, inclusi i relativi scopi, configurazione e utilizzo nelle applicazioni .NET.
Attenzione
È consigliabile distribuire OpenTelemetry di Monitoraggio di Azure per le nuove applicazioni o i clienti per attivare Application Insights per Monitoraggio di Azure. La distribuzione OpenTelemetry di Monitoraggio di Azure offre funzionalità ed esperienza simili come Application Insights SDK. È possibile eseguire la migrazione da Application Insights SDK usando le guide alla migrazione per .NET, Node.js e Python, ma stiamo ancora lavorando per aggiungere altre funzionalità per la compatibilità con le versioni precedenti.
Panoramica
- I contatori delle prestazioni sono integrati nel sistema operativo Windows e offrono metriche predefinite, come l'utilizzo della CPU, l'utilizzo della memoria e l'attività del disco. Questi contatori sono ideali per il monitoraggio delle metriche delle prestazioni standard con una configurazione minima. Consentono di tenere traccia dell'utilizzo delle risorse o risolvere i colli di bottiglia a livello di sistema nelle applicazioni basate su Windows, ma non supportano metriche personalizzate specifiche dell'applicazione.
- I contatori degli eventi funzionano su più piattaforme, tra cui Windows, Linux e macOS. Consentono agli sviluppatori di definire e monitorare metriche leggere e personalizzabili specifiche dell'applicazione, offrendo maggiore flessibilità rispetto ai contatori delle prestazioni. I contatori degli eventi sono utili quando le metriche di sistema non sono sufficienti o quando sono necessari dati di telemetria dettagliati nelle applicazioni multipiattaforma. Richiedono implementazione e configurazione esplicite, che rende più impegnativa la configurazione.
Configurazione dei contatori
Windows fornisce vari contatori delle prestazioni, ad esempio quelli usati per raccogliere statistiche di utilizzo del processore, della memoria e del disco. È anche possibile definire contatori delle prestazioni personalizzati.
L'applicazione supporta la raccolta dei contatori delle prestazioni se viene eseguita in Internet Information Server (IIS) in un host locale o in una macchina virtuale con accesso amministrativo. Le applicazioni in esecuzione come Azure App Web non possono accedere direttamente ai contatori delle prestazioni, ma Application Insights raccoglie un subset di contatori disponibili.
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 per le applicazioni Web ASP.NET:
- % Processo\Tempo processore
- % Processo\Tempo normalizzato processore
- Memoria\Byte disponibili
- Richieste ASP.NET/sec
- Eccezioni CLR (Common Language Runtime) .NET 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 per le applicazioni Web di base ASP.NET:
- % 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.
Si acquisiscono sia contatori standard che contatori 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 parametro ReportAs
è obbligatorio per i nomi dei contatori che non corrispondono a [a-zA-Z()/-_ \.]+
.
Se si specifica un'istanza, diventa una dimensione CounterInstanceName
della metrica segnalata.
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();
Conteggi di ASP.NET e Application Insights
Le sezioni successive illustrano i conteggi di ASP.NET e Application Insights.
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 i contatori degli eventi.
Query di 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 vengono visualizzati solo i contatori per tale applicazione. Ad esempio, per visualizzare quali contatori sono disponibili:
performanceCounters | summarize count(), avg(value) by category, instance, counter
In questo caso, Instance
si riferisce all'istanza del contatore delle prestazioni, non al ruolo o all'istanza del computer 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:
performanceCounters | where counter == "Available Bytes" | summarize avg(value), min(value) by bin(timestamp, 1h) | render timechart
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:
performanceCounters | where counter == "% Processor Time" and instance == "SendMetrics" | summarize avg(value) by cloud_RoleInstance, bin(timestamp, 1d)
Avvisi
Analogamente ad altre metriche, è possibile impostare un avviso per avvisare se un contatore supera un limite specificato.
Per impostare un avviso, aprire il riquadro Avvisi e selezionare Aggiungi avviso.
Domande frequenti
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 Eccezioni conta iTrackException
report ricevuti dal portale nell'intervallo di campionamento del grafico. Include solo le eccezioni gestite in cui si scrivonoTrackException
chiamate nel codice. Non include tutte le eccezioni non gestite.