Share via


Vergleich von Metrik-APIs

Beim Hinzufügen einer neuen Metrikinstrumentierung zu einer .NET-App oder -Bibliothek stehen verschiedene APIs zur Auswahl. Dieser Abschnitt gibt Ihnen Einblicke darüber, was derzeit verfügbar ist und über einige der damit verbundenen Kompromisse.

Es gibt zwei Hauptkategorien von APIs: anbieterneutral und anbieterspezifisch. Anbieterspezifische APIs haben den Vorteil, dass der Anbieter seine Entwürfe schnell iterieren, spezielle Features hinzufügen und eine flüssige Integration der Instrumentierungs-APIs und den Back-End-Systemen erreichen kann. Wenn Sie Ihre App beispielsweise mit Metrik-APIs instrumentiert haben, die von Application Insights bereitgestellt werden, erwarten Sie, dass Sie bei der Arbeit mit ihren Analysetools eine gut integrierte Funktionalität und alle neuesten Funktionen von Application Insight vorfinden. Allerdings wird die Bibliothek oder App jetzt auch an diesen Anbieter gekoppelt und ein Wechsel zu einer anderen Bibliothek oder App würde in Zukunft ein erneutes Schreiben der Instrumentierung erfordern. Bei Bibliotheken kann diese Kopplung besonders problematisch sein, da der Bibliotheksentwickler möglicherweise die API eines Anbieters verwendet und der App-Entwickler, der auf die Bibliothek verweist, mit einem anderen Anbieter zusammenarbeiten möchte. Um dieses Kopplungsproblem zu beheben, bieten anbieterneutrale Optionen eine standardisierte API-Fassade und Erweiterungspunkte, um Daten je nach Konfiguration an verschiedene Back-End-Systeme des Anbieters weiterzuleiten. Anbieterneutrale APIs bieten jedoch möglicherweise weniger Funktionen und Sie sind weiterhin darauf beschränkt, einen Anbieter zu wählen, der in den Erweiterungsmechanismus der Fassade integriert wurde.

.NET-APIs

In der mehr als 20-jährigen Geschichte von .NET haben wir einige Male den Entwurf für Metrik-APIs wiederholt, die alle unterstützt und herstellerneutral sind:

System.Diagnostics.Metrics

System.Diagnostics.Metrics-APIs sind die neuesten plattformübergreifenden APIs, die in enger Zusammenarbeit mit dem OpenTelemetry-Projekt entwickelt wurden. Wenn Sie keinen besonderen Grund haben, eine der unten beschriebenen älteren APIs zu verwenden, ist System.Diagnostics.Metrics eine gute Standardwahl für neue Arbeiten. Sie ist verfügbar, wenn Sie .NET 6+ verwenden, oder in älteren .NET Core- und .NET Framework-Anwendungen, indem Sie einen Verweis auf das .NET System.Diagnostics.DiagnosticsSource 6.0+ NuGet-Paket hinzufügen. Zusätzlich zur umfassenden Kompatibilität bietet diese API Unterstützung für viele Dinge, die in älteren APIs fehlen, wie z. B.:

  • Histogramme und Perzentile
  • Mehrdimensionale Metriken
  • Stark typisierte API für Hochleistungs-Listener
  • Mehrere gleichzeitige Listener
  • Listenerzugriff auf nicht aggregierte Messungen

Obwohl diese API erfolgreich für OpenTelemetry und das wachsende Ökosystem von pluggierbaren Anbieterintegrationsbibliotheken konzipiert wurde, haben Anwendungen auch die Möglichkeit, die integrierten .NET-Listener-APIs direkt zu verwenden. Mit dieser Option können Sie benutzerdefinierte Metriktools erstellen, ohne externe Bibliotheksabhängigkeiten zu verwenden.

PerformanceCounter

System.Diagnostics.PerformanceCounterAPIs sind die ältesten Metrik-APIs. Sie werden nur auf Windows unterstützt und stellen einen verwalteten Wrapper für die Leistungsindikator-Technologie des Windows-Betriebssystems bereit. Sie sind in allen unterstützten Versionen von .NET verfügbar.

Diese APIs werden hauptsächlich aus Kompatibilitätsgründen bereitgestellt. Das .NET-Team sieht dies als einen stabilen Bereich an, der abgesehen von Fehlerbehebungen wahrscheinlich keine weitere Verbesserung erhalten wird. Diese APIs werden nur für neue Entwicklungsprojekte vorgeschlagen, wenn das Projekt Windows ist und Sie Windows-Leistungsindikatortools verwenden möchten.

Weitere Informationen finden Sie unter Leistungsindikatoren in .NET Framework.

EventCounters

Nach PerformanceCounters folgt die EventCounters-API. Diese API soll eine einheitliche plattformübergreifende Funktionalität bieten. Die APIs sind ab .NET Core 3.1 verfügbar, und eine kleine Teilmenge ist ab .NET Framework 4.7.1 verfügbar. Diese APIs werden vollständig unterstützt und werden aktiv von wichtigen .NET-Bibliotheken genutzt, verfügen jedoch über weniger Funktionalität als die neuerenSystem.Diagnostics.Metrics APIs. EventCounters können Änderungs- und Durchschnittsraten melden, unterstützen jedoch keine Histogramme und Perzentile. Mehrdimensionale Metriken werden auch nicht unterstützt. Benutzerdefinierte Tools sind über die EventListener API möglich, obwohl sie nicht stark typisiert sind, nur Zugriff auf die aggregierten Werte bieten und Einschränkungen aufweisen, wenn mehrere Listener gleichzeitig verwendet werden. EventCounter werden direkt von Visual Studio, Application Insights, Dotnet-Countersund Dotnet-Monitor unterstützt. Informationen zur Unterstützung von Drittanbietertools finden Sie in der Dokumentation des Anbieters oder Projekts, wo Sie die Verfügbarkeit feststellen können.

Das .NET-Team erwartet in Zukunft keine erheblichen neuen Investitionen in diese API, aber wie bei PerformanceCounters wird die API weiterhin aktiv für alle aktuellen und zukünftigen Benutzer unterstützt.

APIs von Drittanbietern

Die meisten Anbieter der Anwendungsleistungsüberwachung (Application Performance Monitoring, APM) wie AppDynamics, Application Insights, DataDog, DynaTrace und NewRelic enthalten Metrik-APIs als Teil ihrer Instrumentierungsbibliotheken. Prometheus und AppMetrics sind ebenfalls beliebte .NET-OSS-Projekte. Weitere Informationen zu diesen Projekten finden Sie auf den verschiedenen Projektwebseiten.