Einführung in EventCounters

EventCounter ist ein .NET/.NET Core-Mechanismus zum Veröffentlichen und Verwenden von Indikatoren oder Statistiken. EventCounters werden auf allen Betriebssystemplattformen unterstützt: Windows, Linux und macOS. Sie können als plattformübergreifende Entsprechung für PerformanceCounters angesehen werden, die nur auf Windows-Systemen unterstützt werden.

Während Benutzer beliebige benutzerdefinierte EventCounters veröffentlichen können, um ihre Anforderungen zu erfüllen, veröffentlicht .NET standardmäßig einen Satz dieser Indikatoren. Dieses Dokument führt Sie durch die erforderlichen Schritte zum Erfassen und Anzeigen von EventCounters (systemdefiniert oder benutzerdefiniert) in Azure Application Insights.

Hinweis

Die folgende Dokumentation basiert auf der klassischen Application Insights-API. Der langfristige Plan für Application Insights besteht darin, Daten mithilfe von OpenTelemetry zu sammeln. Weitere Informationen finden Sie unter Aktivieren von Azure Monitor OpenTelemetry für .NET-, Node.js-, Python- und Java-Anwendungen.

Verwenden von Application Insights für das Erfassen von EventCounters

Application Insights unterstützt das Erfassen von EventCounters mit EventCounterCollectionModule, einem Bestandteil des neu veröffentlichten NuGet-Pakets Microsoft.ApplicationInsights.EventCounterCollector. EventCounterCollectionModule wird bei Verwendung von AspNetCore oder WorkerService automatisch aktiviert. EventCounterCollectionModule erfasst Indikatoren mit einer nicht konfigurierbaren Erfassungshäufigkeit von 60 Sekunden. Zum Erfassen von EventCounters sind keine speziellen Berechtigungen erforderlich. Für ASP.NET Core-Anwendungen möchten Sie auch das Paket Microsoft.ApplicationInsights.AspNetCore hinzufügen.

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

Erfasste Standardindikatoren

Ab Version 2.15.0 von entweder AspNetCore SDK oder WorkerService SDK werden standardmäßig keine Indikatoren erfasst. Das Modul selbst wird aktiviert, damit Benutzer die gewünschten Zähler hinzufügen können, um sie zu erfassen.

Eine Liste bekannter Indikatoren, die von der .NET-Runtime veröffentlicht werden, finden Sie im Dokument Verfügbare Leistungsindikatoren.

Anpassen zu erfassender Indikatoren

Das folgende Beispiel veranschaulicht das Hinzufügen und Entfernen von Indikatoren. Diese Anpassung erfolgt als Teil Ihrer Anwendungsdienstkonfiguration, nachdem die Erfassung von Telemetriedaten durch Application Insights entweder mit AddApplicationInsightsTelemetry() oder AddApplicationInsightsWorkerService() aktiviert wurde. Nachfolgend sehen Sie einen Beispielcode aus einer ASP.NET Core-Anwendung. Informationen zu anderen Anwendungstypen finden Sie in diesem Dokument.

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

Deaktivieren des Sammlungsmoduls EventCounter

EventCounterCollectionModule kann mithilfe von ApplicationInsightsServiceOptions deaktiviert werden.

Im folgenden Beispiel wird das ASP.NET Core SDK verwendet.

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

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

Ein ähnlicher Ansatz kann auch für das WorkerService SDK befolgt werden, wobei jedoch der Namespace wie im folgenden Beispiel gezeigt geändert werden muss.

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

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

EventCounters im Metrik-Explorer

Zum Anzeigen von EventCounter-Metriken im Metrik-Explorer wählen Sie die Application Insights-Ressource aus, und wählen Sie dann protokollbasierte Metriken als Metriknamespace aus. EventCounter-Metriken werden dann unter der Kategorie „Benutzerdefiniert“ angezeigt.

Event counters reported in Application Insights Metric Explorer

EventCounters in Analytics

Sie können Berichte zu EventCounters auch in Analytics in der Tabelle customMetrics suchen und anzeigen.

Führen Sie z.B. die folgende Abfrage aus, um zu sehen, welche Indikatoren erfasst werden und für die Abfrage verfügbar sind:

customMetrics | summarize avg(value) by name

Event counters reported in Application Insights Analytics

Um ein Diagramm eines bestimmten Indikators (z.B. ThreadPool Completed Work Item Count) im aktuellen Zeitraum zu erhalten, führen Sie die folgende Abfrage aus.

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

Wie für andere Telemetriedaten ist auch in der Tabelle customMetrics eine cloud_RoleInstance-Spalte enthalten, die die Identität der Hostserverinstanz angibt, auf dem Ihre Anwendung ausgeführt wird. Die obige Abfrage zeigt den Indikatorwert pro Instanz und kann zum Vergleichen der Leistung verschiedener Serverinstanzen verwendet werden.

Alerts

Wie bei anderen Metriken können Sie eine Warnung einrichten, damit Sie gewarnt werden, wenn ein EventCounter einen von Ihnen festgelegten Grenzwert überschreitet. Öffnen Sie den Warnungsbereich, und wählen Sie „Warnung hinzufügen“ aus.

Häufig gestellte Fragen

Werden EventCounters in Livemetriken angezeigt?

Livemetriken zeigen derzeit keine EventCounters an. Verwenden Sie den Metrik-Explorer oder Analytics, um die Telemetrie anzuzeigen.

Ich habe Application Insights über das Azure-Web-App-Portal aktiviert. Warum werden keine EventCounters angezeigt?

Die Application Insights-Erweiterung für ASP.NET Core unterstützt dieses Feature noch nicht.

Nächste Schritte