Introduktion till EventCounters

EventCounter är .NET/.NET Core-mekanismen för att publicera och använda räknare eller statistik. EventCounters stöds på alla operativsystemplattformar – Windows, Linux och macOS. Det kan ses som en plattformsoberoende motsvarighet för PerformanceCounters som endast stöds i Windows-system.

Medan användare kan publicera alla anpassade EventCounters för att uppfylla sina behov publicerar .NET en uppsättning av dessa räknare som standard. Det här dokumentet går igenom de steg som krävs för att samla in och visa EventCounters (systemdefinierad eller användardefinierad) i Azure Application Insights.

Kommentar

Följande dokumentation förlitar sig på det klassiska API:et Application Insights. Den långsiktiga planen för Application Insights är att samla in data med OpenTelemetry. Mer information finns i Aktivera Azure Monitor OpenTelemetry för .NET-, Node.js-, Python- och Java-program.

Använda Application Insights för att samla in EventCounters

Application Insights stöder insamling EventCounters med dess EventCounterCollectionModule, som är en del av det nyligen släppta NuGet-paketet Microsoft.ApplicationInsights.EventCounterCollector. EventCounterCollectionModule aktiveras automatiskt när du använder Antingen AspNetCore eller WorkerService. EventCounterCollectionModule samlar in räknare med en icke-konfigurerbar samlingsfrekvens på 60 sekunder. Det krävs inga särskilda behörigheter för att samla in EventCounters. För ASP.NET Core-program vill du också lägga till paketet Microsoft.ApplicationInsights.AspNetCore .

dotnet add package Microsoft.ApplicationInsights.EventCounterCollector
dotnet add package Microsoft.ApplicationInsights.AspNetCore

Insamlade standardräknare

Från och med 2.15.0-versionen av antingen AspNetCore SDK eller WorkerService SDK samlas inga räknare in som standard. Själva modulen är aktiverad så att användarna kan lägga till önskade räknare för att samla in dem.

En lista över välkända räknare som publicerats av .NET Runtime finns i dokumentet Tillgängliga räknare .

Anpassa räknare som ska samlas in

I följande exempel visas hur du lägger till/tar bort räknare. Den här anpassningen görs som en del av programtjänstkonfigurationen när Application Insights-telemetrisamlingen har aktiverats med antingen AddApplicationInsightsTelemetry() eller AddApplicationInsightsWorkerService(). Följande är en exempelkod från ett ASP.NET Core-program. Andra typer av program finns i det här dokumentet.

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"));
        }
    );

Inaktivera eventcounter-samlingsmodul

EventCounterCollectionModule kan inaktiveras med hjälp ApplicationInsightsServiceOptionsav .

I följande exempel används ASP.NET Core SDK.

using Microsoft.ApplicationInsights.AspNetCore.Extensions;
using Microsoft.Extensions.DependencyInjection;

var applicationInsightsServiceOptions = new ApplicationInsightsServiceOptions();
applicationInsightsServiceOptions.EnableEventCounterCollectionModule = false;
builder.Services.AddApplicationInsightsTelemetry(applicationInsightsServiceOptions);

En liknande metod kan också användas för WorkerService SDK, men namnområdet måste ändras enligt följande exempel.

using Microsoft.ApplicationInsights.AspNetCore.Extensions;
using Microsoft.Extensions.DependencyInjection;

var applicationInsightsServiceOptions = new ApplicationInsightsServiceOptions();
applicationInsightsServiceOptions.EnableEventCounterCollectionModule = false;
builder.Services.AddApplicationInsightsTelemetry(applicationInsightsServiceOptions);

Händelseräknare i Metric Explorer

Om du vill visa EventCounter-mått i Metric Explorer väljer du Application Insights-resurs och väljer Loggbaserade mått som måttnamnområde. Sedan visas EventCounter-mått under Anpassad kategori.

Event counters reported in Application Insights Metric Explorer

Händelseräknare i Analytics

Du kan också söka efter och visa händelseräknarerapporter i Analytics i tabellen customMetrics .

Kör till exempel följande fråga för att se vilka räknare som samlas in och är tillgängliga för frågor:

customMetrics | summarize avg(value) by name

Event counters reported in Application Insights Analytics

Om du vill hämta ett diagram över en specifik räknare (till exempel: ThreadPool Completed Work Item Count) under den senaste perioden kör du följande fråga.

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

Chat of a single counter in Application Insights

Precis som andra telemetrier har customMetrics också en kolumn cloud_RoleInstance som anger identiteten för den värdserverinstans som appen körs på. Ovanstående fråga visar räknarvärdet per instans och kan användas för att jämföra prestanda för olika serverinstanser.

Aviseringar

Precis som andra mått kan du ange en avisering som varnar dig om en händelseräknare går utanför en gräns som du anger. Öppna fönstret Aviseringar och välj Lägg till avisering.

Vanliga frågor och svar

Kan jag se EventCounters i Live Metrics?

Livemått visar inte EventCounters från och med idag. Använd Metric Explorer eller Analytics för att se telemetrin.

Jag har aktiverat Application Insights från Azure Web App Portal. Varför kan jag inte se EventCounters?

Application Insights-tillägget för ASP.NET Core har ännu inte stöd för den här funktionen.

Nästa steg