Prometheus-Metriken in C# (.NET) — Bibliothek prometheus-net
In der modernen Entwicklung von Webanwendungen und Microservices auf der .NET-Plattform sind Monitoring und Observability (Beobachtbarkeit) zu obligatorischen Elementen der Produktionsumgebung geworden. Die Bibliothek prometheus-net ist die offizielle Client-Bibliothek für .NET, die es ermöglicht, Anwendungsmetriken einfach in einem Format zu exportieren, das der Monitoring-Server Prometheus versteht.
Mit prometheus-net können Sie Daten zur Leistung (Antwortzeit, Anzahl der Anfragen, Fehler, Speichernutzung) sammeln und an Prometheus zur späteren Visualisierung in Grafana oder anderen Tools übermitteln. Die Bibliothek unterstützt sowohl ältere Versionen von .NET Framework (4.6.1+) als auch moderne .NET Core / .NET 5/6/7/8.
Installation
Die Bibliothek kann über den NuGet Package Manager oder mit der .NET CLI installiert werden:
dotnet add package prometheus-netFür ASP.NET Core-Anwendungen wird zusätzlich das Paket prometheus-net.AspNetCore benötigt:
dotnet add package prometheus-net.AspNetCoreWichtige Metriktypen
Prometheus unterstützt vier Hauptmetriktypen. In prometheus-net sind sie als statische Fabriken in der Klasse Metrics implementiert:
- Counter — ein Zähler, der nur erhöht werden kann (z. B. Anzahl der verarbeiteten Anfragen).
- Gauge — eine Metrik, die sowohl erhöht als auch verringert werden kann (z. B. Anzahl der aktiven Verbindungen oder aktuelle Temperatur).
- Histogram — ein Histogramm, das die Anzahl der Beobachtungen in bestimmten Intervallen (Buckets) zählt. Es wird zur Messung der Verteilung von Antwortzeiten oder Datengrößen verwendet.
- Summary — eine zusammenfassende Metrik, die Quantile (p50, p95, p99) basierend auf einem Beobachtungsstrom berechnet.
Beispiel zur Verwendung von Counter
Erstellen wir einen einfachen Zähler für die Anzahl der verarbeiteten HTTP-Anfragen:
using Prometheus;
// Erstellen eines Zählers mit Name und Beschreibungprivate static readonly Counter RequestCount = Metrics .CreateCounter("myapp_requests_total", "Total number of HTTP requests.");
// Im Anfragen-Handler den Zähler erhöhenpublic IActionResult Index(){ RequestCount.Inc(); // um 1 erhöhen // Oder RequestCount.Inc(5); // um 5 erhöhen return View();}Beispiel zur Verwendung von Gauge
Gauge eignet sich zur Verfolgung des aktuellen Zustands, z. B. der Anzahl aktiver Benutzer:
private static readonly Gauge ActiveUsers = Metrics .CreateGauge("myapp_active_users", "Number of active users.");
// Bei BenutzeranmeldungActiveUsers.Inc();
// Bei BenutzerabmeldungActiveUsers.Dec();Beispiel zur Verwendung von Histogram
Ein Histogramm ist ideal zur Messung der Ausführungszeit von Anfragen:
private static readonly Histogram RequestDuration = Metrics .CreateHistogram("myapp_request_duration_seconds", "Histogram of request duration.", new HistogramConfiguration { // Bucket-Grenzen konfigurieren Buckets = new[] { 0.1, 0.25, 0.5, 1.0, 2.5 } });
// In Middleware oder Controller-Aktionusing (RequestDuration.NewTimer()){ // Anfrage ausführen await Next(context);}Integration mit ASP.NET Core
Damit Ihr Endpunkt /metrics Daten im Prometheus-Format ausgibt, reicht es, Middleware in Program.cs hinzuzufügen:
using Prometheus;
var builder = WebApplication.CreateBuilder(args);var app = builder.Build();
// Middleware zur Erfassung von Metriken hinzufügen Auch in der Bibliothek
Arbeiten mit Excel in Java: Apache POI und Alternativen
Maschinelles Lernen mit Rust: Überblick über Bibliotheken für Data Science
Rate Limiting in TypeScript: Bibliotheken, Strategien und Beispiele