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 und unserer OpenTelemetry Roadmap. Migrationsleitfaden sind für .NET, Node.js und Python verfügbar.
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.
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
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
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.