Introduzione di EventCounter
EventCounter
è un meccanismo di .NET/.NET Core per pubblicare e utilizzare contatori o statistiche. Il supporto per EventCounter è disponibile in tutte le piattaforme del sistema operativo, ovvero Windows, Linux e macOS. Possono essere considerati un equivalente multipiattaforma per PerformanceCounters che è supportato solo nei sistemi Windows.
Anche se gli utenti possono pubblicare qualsiasi EventCounters
personalizzato per soddisfare le proprie esigenze, .NET pubblica un set di questi contatori per impostazione predefinita. Il documento illustra in modo dettagliato i passaggi necessari per raccogliere e visualizzare EventCounters
(definiti dal sistema o definiti dall'utente, in Azure Application Insights).
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.
Uso di Application Insights per raccogliere EventCounters
Application Insights supporta la raccolta di EventCounters
con EventCounterCollectionModule
, che fa parte del pacchetto NuGet Microsoft.ApplicationInsights.EventCounterCollector rilasciato di recente. EventCounterCollectionModule
viene abilitato automaticamente quando si usa AspNetCore o WorkerService. EventCounterCollectionModule
raccoglie i contatori con una frequenza di raccolta non configurabile pari a 60 secondi. Non sono richieste autorizzazioni speciali per raccogliere EventCounters. Per le applicazioni ASP.NET Core è necessario aggiungere anche il pacchetto Microsoft.ApplicationInsights.AspNetCore.
dotnet add package Microsoft.ApplicationInsights.EventCounterCollector
dotnet add package Microsoft.ApplicationInsights.AspNetCore
Contatori predefiniti raccolti
A partire dalla versione 2.15.0 di AspNetCore SDK o WorkerService SDK, i contatori non vengono raccolti per impostazione predefinita. Il modulo stesso è abilitato, in questo modo gli utenti possono aggiungere i contatori desiderati per raccoglierli.
Per ottenere un elenco di contatori noti pubblicati da Runtime .NET, vedere il documento Contatori disponibili.
Personalizzazione dei contatori da raccogliere
L'esempio seguente illustra come aggiungere/rimuovere contatori. Questa personalizzazione viene eseguita come parte della configurazione del servizio dell'applicazione dopo l'abilitazione della telemetria di Application Insights con AddApplicationInsightsTelemetry()
o AddApplicationInsightsWorkerService()
. Di seguito è disponibile un esempio di codice da un'applicazione ASP.NET Core. Per altri tipi di applicazioni, vedere questo documento.
using Microsoft.ApplicationInsights.Extensibility.EventCounterCollector;
using Microsoft.Extensions.DependencyInjection;
builder.Services.ConfigureTelemetryModule<EventCounterCollectionModule>(
(module, o) =>
{
// Removes all default counters, if any.
module.Counters.Clear();
// Adds a user defined counter "MyCounter" from EventSource named "MyEventSource"
module.Counters.Add(
new EventCounterCollectionRequest("MyEventSource", "MyCounter"));
// Adds the system counter "gen-0-size" from "System.Runtime"
module.Counters.Add(
new EventCounterCollectionRequest("System.Runtime", "gen-0-size"));
}
);
Disabilitazione del modulo di raccolta EventCounter
EventCounterCollectionModule
può essere disabilitato utilizzando ApplicationInsightsServiceOptions
.
Nell'esempio seguente viene utilizzato ASP.NET Core SDK.
using Microsoft.ApplicationInsights.AspNetCore.Extensions;
using Microsoft.Extensions.DependencyInjection;
var applicationInsightsServiceOptions = new ApplicationInsightsServiceOptions();
applicationInsightsServiceOptions.EnableEventCounterCollectionModule = false;
builder.Services.AddApplicationInsightsTelemetry(applicationInsightsServiceOptions);
Un approccio simile può essere usato anche per WorkerService SDK, tuttavia è necessario modificare lo spazio dei nomi come illustrato nell'esempio seguente.
using Microsoft.ApplicationInsights.AspNetCore.Extensions;
using Microsoft.Extensions.DependencyInjection;
var applicationInsightsServiceOptions = new ApplicationInsightsServiceOptions();
applicationInsightsServiceOptions.EnableEventCounterCollectionModule = false;
builder.Services.AddApplicationInsightsTelemetry(applicationInsightsServiceOptions);
Contatori degli eventi nello strumento di esplorazione metriche
Per visualizzare le metriche di EventCounter nello strumento di esplorazione metriche, selezionare la risorsa di Application Insights e scegliere le metriche basate su log come spazio dei nomi per la metrica. Le metriche di EventCounter vengono visualizzate nella categoria Personalizzata.
Contatori degli eventi in Analytics
È anche possibile cercare e visualizzare report sui contatori degli eventi in Analytics nella scheda customMetrics.
Eseguire ad esempio la query seguente per visualizzare i contatori raccolti e disponibili per le query:
customMetrics | summarize avg(value) by name
Per ottenere un grafico di un contatore specifico, ad esempio ThreadPool Completed Work Item Count
, nel periodo recente, eseguire la query seguente.
customMetrics
| where name contains "System.Runtime|ThreadPool Completed Work Item Count"
| where timestamp >= ago(1h)
| summarize avg(value) by cloud_RoleInstance, bin(timestamp, 1m)
| render timechart
Come altri dati di telemetria, customMetrics contiene anche una colonna cloud_RoleInstance
che indica l'identità dell'istanza del server host in cui viene eseguita l'app. La query precedente mostra il valore del contatore per ogni istanza e può essere usata per confrontare le prestazioni di diverse istanze del server.
Avvisi
Come per altre metriche, è possibile impostare un avviso per ricevere una notifica se un contatore degli eventi supera un limite specificato. Aprire il riquadro Avvisi e selezionare Aggiungi avviso.
Domande frequenti
È possibile visualizzare EventCounters in Metriche attive?
A partire dalla data odierna, nelle Metriche live gli EventCounters non vengono mostrati. Usare lo strumento di esplorazione metriche o Analytics per visualizzare i dati di telemetria.
Application Insights è stato abilitato dal portale di App Web di Azure. Perché gli EventCounters non sono visibili?
L'estensione di Application Insights per ASP.NET Core non supporta ancora questa funzionalità.