Systemleistungsindikatoren in Application Insights
Windows bietet eine Vielzahl von Leistungsindikatoren, wie z. B. diejenigen zum Erfassen von Statistiken zur Prozessor-, Arbeitsspeicher- und Datenträgerverwendung. Sie können auch eigene Leistungsindikatoren definieren.
Die Erfassung von Leistungsindikatoren wird unterstützt, sofern Ihre Anwendung unter IIS auf einem lokalen Host oder auf einem virtuellen Computer ausgeführt wird, auf den Sie Administratorzugriff haben. Anwendungen, die als Azure-Web-Apps ausgeführt werden, haben zwar keinen direkten Zugriff auf Leistungsindikatoren, aber eine Teilmenge der verfügbaren Indikatoren wird von Application Insights erfasst.
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.
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.
Aktuelle Standardleistungsindikatoren für ASP.NET-Webanwendungen:
- % Process\Processor Time
- % Process\Processor Time Normalized
- Memory\Available Bytes
- ASP.NET Requests/Sec
- .NET CLR Exceptions Thrown / sec
- 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, die für ASP.NET-Webanwendungen erfasst werden:
- % 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 können sowohl Standardindikatoren als auch Indikatoren erfassen, die Sie selbst implementiert haben. \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, also Zeichen enthalten, die nicht zu folgenden Gruppen zählen: Buchstaben, runde Klammern, Schrägstrich, Bindestrich, Unterstrich, Leerzeichen und Punkt.
Wenn Sie eine Instanz angeben, wird sie als Dimension CounterInstanceName
der gemeldeten Metrik erfasst.
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();
Leistungsindikatoren in Log Analytics
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 diese Anwendung angezeigt. Beispielsweise, um verfügbare Leistungsindikatoren anzuzeigen:
Instance
bezieht sich hier auf die Instanz des Leistungsindikators, nicht auf die der Rolle oder des Servercomputers. 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:
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:
ASP.NET- und Application Insights-Zahlen
In den nächsten Abschnitten werden ASP.NET- und Application Insights-Leistungsindikatoren erläutert.
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“ ist die Anzahl derTrackException
-Meldungen, die das Portal innerhalb des Samplingintervalls des Diagramms empfangen hat. Sie enthält nur die behandelten Ausnahmen, bei denen Sie Aufrufe vonTrackException
in Ihren Code geschrieben haben. Sie enthält nicht alle nicht behandelten Ausnahmen.
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) dient EventCounters.
Alerts
Wie bei anderen Metriken können Sie eine Warnung festlegen, damit Sie gewarnt werden, wenn ein Leistungsindikator einen von Ihnen festgelegten Grenzwert überschreitet. Um eine Warnung festzulegen, öffnen Sie den Bereich Warnungen und wählen Warnung hinzufügen aus.