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.

Screenshot mit in Application Insights gemeldeten Leistungsindikatoren

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.

  1. 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.

  2. Öffnen Sie ApplicationInsights.config.

    Wenn Sie Application Insights während der Entwicklung Ihrer App hinzugefügt haben, gehen Sie folgendermaßen vor:

    1. Bearbeiten Sie ApplicationInsights.config in Ihrem Projekt.
    2. Stellen Sie es erneut auf Ihren Servern bereit.
  3. 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:

Screenshot mit Leistungsindikatoren in Application Insights-Analysen.

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:

Screenshot: Diagramm zur Arbeitsspeicherzeit in Application Insights-Analysen.

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:

Screenshot mit der nach Rolleninstanz in der Application Insights-Analyse segmentierten Leistung.

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 der TrackException-Meldungen, die das Portal innerhalb des Samplingintervalls des Diagramms empfangen hat. Sie enthält nur die behandelten Ausnahmen, bei denen Sie Aufrufe von TrackException 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.

Nächste Schritte