Indikatoren und Zähler für .NET in Application Insights
Azure MonitorApplication Insights unterstützt Leistungsindikatoren und Ereigniszähler. Dieses Handbuch bietet eine Übersicht über beides, einschließlich Zweck, Konfiguration und Verwendung in .NET-Anwendungen.
Achtung
Wir empfehlen die OpenTelemetry-Distribution von Azure Monitor für neue Anwendungen oder Kunden, um Azure Monitor Application Insights zu betreiben. Die OpenTelemetry-Distribution von Azure Monitor bietet eine ähnliche Funktionalität und Benutzererfahrung wie das Application Insights SDK. Es ist möglich, mithilfe der Migrationsleitfäden für .NET, Node.js und Python vom Application Insights SDK zu migrieren, wir arbeiten jedoch an der Integration zusätzlicher Funktionen für die Abwärtskompatibilität.
Übersicht
- Leistungsindikatoren sind in das Windows-Betriebssystem integriert und bieten vordefinierte Metriken wie CPU-Auslastung, Arbeitsspeicherverbrauch und Datenträgeraktivität. Diese Leistungsindikatoren eignen sich ideal für die Überwachung von Standardleistungsmetriken mit minimalem Setup. Sie erleichtern das Nachverfolgen der Ressourcenauslastung oder die Problembehandlung von Engpässen auf Systemebene in Windows-basierten Anwendungen, unterstützen jedoch keine benutzerdefinierten anwendungsspezifischen Metriken.
- Ereigniszähler funktionieren auf mehreren Plattformen, einschließlich Windows, Linux und macOS. Sie ermöglichen es Fachkräften in der Entwicklung, einfache, anpassbare anwendungsspezifische Metriken, die mehr Flexibilität als Leistungsindikatoren bieten, zu definieren und zu überwachen. Ereignisindikatoren sind nützlich, wenn Systemmetriken unzureichend sind oder detaillierte Telemetriedaten in plattformübergreifenden Anwendungen benötigt werden. Sie erfordern eine explizite Implementierung und Konfiguration, wodurch das Setup auswändiger ist.
Konfigurieren von Indikatoren und Zählern
Windows bietet eine Vielzahl von Leistungsindikatoren, wie z. B. diejenigen zum Erfassen von Statistiken zur Prozessor-, Arbeitsspeicher- und Datenträgerauslastung. Sie können auch eigene Leistungsindikatoren definieren.
Ihre Anwendung unterstützt die Leistungsindikatorsammlung, wenn sie unter Internetinformationsserver (IIS) auf einem lokalen Host oder einem virtuellen Computer mit Administratorzugriff ausgeführt wird. Anwendungen, die als Azure Web Apps ausgeführt werden, können nicht direkt auf Leistungsindikatoren zugreifen, aber ein Teil der verfügbaren Leistungsindikatoren wird von Application Insights erfasst.
Voraussetzungen
Erteilen Sie dem App-Pooldienstkonto die Berechtigung zum Überwachen von Leistungsindikatoren, indem Sie es der Gruppe Leistungsmonitorbenutzer hinzufügen.
net localgroup "Performance Monitor Users" /add "IIS APPPOOL\NameOfYourPool"
Anzeigen von Indikatoren
Im Bereich Metriken wird die Standardmenge von Leistungsindikatoren angezeigt.
Standardleistungsindikatoren für ASP.NET-Webanwendungen:
- % Process\Processor Time
- % Process\Processor Time Normalized
- Memory\Available Bytes
- ASP.NET Requests/Sec
- .NET Common Language Runtime (CLR) Ausnahmen ausgelöst/ Sek.
- ASP.NET ApplicationsRequest Execution Time
- Prozess\Private Bytes
- Process\IO Data Bytes/sec
- ASP.NET Applications\Requests In Application Queue
- Processor(_Total)\% Processor Time
Aktuelle Standardleistungsindikatoren für ASP.NET Core-Webanwendungen:
- % Process\Processor Time
- % Process\Processor Time Normalized
- Memory\Available Bytes
- Prozess\Private Bytes
- Process\IO Data Bytes/sec
- Processor(_Total)\% Processor Time
Hinzufügen von Leistungsindikatoren
Wenn der gewünschte Leistungsindikator nicht in der Liste der Metriken enthalten ist, können Sie ihn hinzufügen.
Welche Leistungsindikatoren in Ihrem Server verfügbar sind, können Sie ermitteln, indem Sie diesen PowerShell-Befehl auf dem lokalen Server verwenden:
Get-Counter -ListSet *
Weitere Informationen finden Sie unter
Get-Counter
.Öffnen Sie
ApplicationInsights.config
.Wenn Sie Application Insights während der Entwicklung Ihrer App hinzugefügt haben, gehen Sie folgendermaßen vor:
- Bearbeiten Sie
ApplicationInsights.config
in Ihrem Projekt. - Stellen Sie es erneut auf Ihren Servern bereit.
- Bearbeiten Sie
Bearbeiten Sie Leistungserfassungsanweisung:
<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>
Hinweis
ASP.NET Core-Anwendungen verfügen nicht über ApplicationInsights.config
, sodass die vorherige Methode für ASP.NET-Core Anwendungen nicht gültig ist.
Sie erfassen sowohl Standardindikatoren und -zähler als auch Indikatoren, die Sie selbst implementieren.
\Objects\Processes
ist ein Beispiel für einen Standardindikator, der auf allen Windows-Systemen verfügbar ist.
\Sales(photo)\# Items Sold
ist ein Beispiel für einen benutzerdefinierten Indikator, der in einem Webdienst implementiert sein kann.
Das Format lautet \Category(instance)\Counter
bzw. für Kategorien, die keine Instanzen besitzen, einfach \Category\Counter
.
Der Parameter ReportAs
ist für Leistungsindikatornamen erforderlich, die nicht mit [a-zA-Z()/-_ \.]+
übereinstimmen,
Wenn Sie eine Instanz angeben, wird sie zu einer Dimension CounterInstanceName
der gemeldeten Metrik.
Erfassen von Leistungsindikatoren im Code für ASP.NET-Webanwendungen oder .NET/.NET Core-Konsolenanwendungen
Um Systemleistungsindikatoren zu erfassen und an Application Insights zu senden, können Sie den folgenden Codeschnipsel anpassen:
var perfCollectorModule = new PerformanceCollectorModule();
perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
@"\Process([replace-with-application-process-name])\Page Faults/sec", "PageFaultsPerfSec"));
perfCollectorModule.Initialize(TelemetryConfiguration.Active);
Alternativ können Sie dieselben Schritte mit von Ihnen erstellten benutzerdefinierten Metriken ausführen:
var perfCollectorModule = new PerformanceCollectorModule();
perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
@"\Sales(photo)\# Items Sold", "Photo sales"));
perfCollectorModule.Initialize(TelemetryConfiguration.Active);
Erfassen von Leistungsindikatoren im Code für ASP.NET Core-Webanwendungen
Konfigurieren Sie PerformanceCollectorModule
nach der Methode 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();
ASP.NET- und Application Insights-Zahlen
In den nächsten Abschnitten werden ASP.NET- und Application Insights-Leistungsindikatoren erläutert.
Leistungsindikatoren für Anwendungen, die in Azure-Web-Apps ausgeführt werden sowie für Windows-Container in Azure App Service
Sowohl ASP.NET- als auch ASP.NET Core-Anwendungen, die in Azure-Web-Apps bereitgestellt werden, werden in einer speziellen Sandkastenumgebung ausgeführt. Anwendungen, die in Azure App Service bereitgestellt werden, können einen Windows-Container verwenden oder in einer Sandboxumgebung gehostet werden. Wenn die Anwendung in einem Windows-Container bereitgestellt wird, sind alle Standardleistungsindikatoren im Containerimage verfügbar.
In der Sandboxumgebung ist der direkte Zugriff auf Systemleistungsindikatoren nicht möglich. Eine begrenzte Teilmenge von Indikatoren wird jedoch, wie unter Perf Counters exposed as environment variables beschrieben, als Umgebungsvariablen verfügbar gemacht. In dieser Umgebung ist nur eine Teilmenge der Indikatoren verfügbar. Die vollständige Liste finden Sie unter Perf Counters exposed as environment variables.
Das Application Insights SDK für ASP.NET und ASP.NET Core erkennt, ob Code in einer Web-App oder einem Nicht-Windows-Container bereitgestellt wurde. Während dieser Erkennung bestimmt das SDK, ob Leistungsindikatoren in einer Sandboxumgebung erfasst werden sollen oder ob der Standarderfassungsmechanismus beim Hosten in einem Windows-Container oder auf einer Windows-VM genutzt werden soll.
Leistungsindikatoren in ASP.NET Core-Anwendungen
Für die Unterstützung von Leistungsindikatoren in ASP.NET Core gelten die folgenden Einschränkungen:
- Die SDK-Versionen 2.4.1 und höher erfassen Leistungsindikatoren, wenn die Anwendung in Azure-Web-Apps (Windows) ausgeführt wird.
- Die SDK-Versionen 2.7.1 und höher erfassen Leistungsindikatoren, wenn die Anwendung unter Windows läuft und
NETSTANDARD2.0
oder höher als Zielframework verwendet wird. - Für Anwendungen, die für .NET Framework bestimmt sind, werden Leistungsindikatoren in allen Versionen des SDK unterstützt.
- SDK-Versionen ab 2.8.0 unterstützen Leistungsindikatoren für CPU und Arbeitsspeicher unter Linux. Es werden kein weiteren Leistungsindikatoren unter Linux unterstützt. Zum Abrufen von Systemleistungsindikatoren unter Linux (und in anderen Nicht-Windows-Umgebungen) verwenden Sie Ereigniszähler.
Log Analytics-Abfragen
In Log Analytics können Sie nach Leistungsindikatorberichten suchen und diese anzeigen.
Das Schema performanceCounters zeigt die category
, den counter
-Namen und instance
-Namen der einzelnen Leistungsindikatoren. In den Telemetriedaten jeder Anwendung werden nur die Indikatoren für die betreffende Anwendung angezeigt. Beispielsweise, um verfügbare Leistungsindikatoren anzuzeigen:
performanceCounters | summarize count(), avg(value) by category, instance, counter
Hier bezieht sich Instance
auf die Instanz des Leistungsindikators, nicht auf die Rolle oder die Servercomputerinstanz. Leistungsindikatoren wie z. B. Prozessorzeit werden vom Namen der Leistungsindikatorinstanz in der Regel nach dem Namen des Prozesses oder der Anwendung segmentiert.
So erhalten Sie ein Diagramm des verfügbaren Arbeitsspeichers im aktuellen Zeitraum:
performanceCounters | where counter == "Available Bytes" | summarize avg(value), min(value) by bin(timestamp, 1h) | render timechart
Wie andere Telemetriedaten umfasst auch performanceCounters eine Spalte cloud_RoleInstance
, die die Identität der Hostserverinstanz angibt, auf dem Ihre Anwendung ausgeführt wird. Geben Sie beispielsweise Folgendes ein, um die Leistung Ihrer App auf verschiedenen Computern vergleichen:
performanceCounters | where counter == "% Processor Time" and instance == "SendMetrics" | summarize avg(value) by cloud_RoleInstance, bin(timestamp, 1d)
Alerts
Wie andere Metriken können Sie eine Warnung festlegen, um zu warnen, wenn ein Zähler außerhalb eines angegebenen Grenzwerts liegt.
Um eine Warnung festzulegen, öffnen Sie den Bereich Warnungen und wählen Warnung hinzufügen aus.
Häufig gestellte Fragen
Worin besteht der Unterschied zwischen der Ausnahmerate und der Ausnahmenmetrik?
-
Exception rate
: Die Ausnahmerate ist ein Systemleistungsindikator. Die CLR zählt alle behandelten und nicht behandelten Ausnahmen, die ausgelöst werden, und dividiert das Ergebnis innerhalb eines Samplingintervalls durch die Länge dieses Intervalls. Das Application Insights SDK sammelt dieses Ergebnis und sendet es an das Portal. -
Exceptions
: Die Metrik „Ausnahmen“ zählt dieTrackException
-Meldungen, die das Portal innerhalb des Samplingintervalls des Diagramms empfangen hat. Sie enthält nur die behandelten Ausnahmen, bei denen SieTrackException
-Aufrufe in Ihren Code geschrieben haben. Sie enthält nicht alle nicht behandelten Ausnahmen.