Prometheus-Metriken in C# (.NET): Integration und Konfiguration

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Prometheus-Metriken in C# (.NET): Vollständige Anleitung zur Integration

\n\n

Prometheus ist ein Open-Source-Überwachungssystem, das Metriken als Zeitreihen sammelt und speichert. Für C# (.NET)-Entwickler eröffnet die Integration mit Prometheus die Möglichkeit, die Anwendungsleistung, Geschäftskennzahlen und den Systemstatus in Echtzeit zu verfolgen. In diesem Artikel werden wir behandeln, wie man Prometheus mit einer .NET-Anwendung verbindet, welche Bibliotheken verwendet werden sollten und wie Metriken richtig konfiguriert werden.

\n\n

Warum werden Prometheus-Metriken in .NET benötigt?

\n

Die Überwachung mit Prometheus ermöglicht:

\n
    \n
  • Verfolgung der Anzahl von Anfragen, Fehlern und Antwortzeiten.
  • \n
  • Sammlung von Leistungsmetriken (CPU, Arbeitsspeicher, GC).
  • \n
  • Erstellung benutzerdefinierter Geschäftsmetriken (aktive Benutzer, Bestellungen).
  • \n
  • Integration mit Grafana zur Visualisierung von Dashboards.
  • \n
  • Einrichtung von Alarmen basierend auf Schwellenwerten.
  • \n
\n\n

Die Bibliothek prometheus-net

\n

Die wichtigste Bibliothek für die Arbeit mit Prometheus in .NET ist prometheus-net. Sie unterstützt ASP.NET Core, .NET Core, .NET Framework und gRPC. Installation über NuGet:

\n
dotnet add package prometheus-net
\n

Für ASP.NET Core installieren Sie zusätzlich:

\n
dotnet add package prometheus-net.AspNetCore
\n\n

Metriktypen in Prometheus

\n

Die Bibliothek unterstützt alle Standard-Metriktypen:

\n
    \n
  • Counter — ein Zähler, der nur erhöht wird (Anzahl der Anfragen).
  • \n
  • Gauge — ein Wert, der steigen und fallen kann (aktuelle Temperatur).
  • \n
  • Histogram — ein Histogramm zur Messung der Werteverteilung (Antwortzeit).
  • \n
  • Summary — Quantile zur Aggregation von Daten (p95, p99).
  • \n
\n\n

Beispiel: Einfacher Counter

\n

Erstellen wir eine Metrik, die die Anzahl der Anfragen an einen Endpunkt zählt:

\n
using Prometheus;\n\npublic class MetricsService\n{\n    private static readonly Counter RequestCount = Metrics\n        .CreateCounter("app_requests_total", "Total number of requests", new CounterConfiguration\n        {\n            LabelNames = new[] { "method", "endpoint" }\n        });\n\n    public void RecordRequest(string method, string endpoint)\n    {\n        RequestCount.WithLabels(method, endpoint).Inc();\n    }\n}
\n

Im ASP.NET Core-Controller sieht der Aufruf wie folgt aus:

\n
[ApiController]\n[Route("api/order")]\npublic class OrderController : ControllerBase\n{\n    private readonly MetricsService _metrics;\n\n    public OrderController(MetricsService metrics) => _metrics = metrics;\n\n    [HttpGet]\n    public IActionResult GetOrders()\n    {\n        _metrics.RecordRequest("GET", "/api/order");\n        return Ok(new { orders = new[] { "order1", "order2" } });\n    }\n}
\n\n

Beispiel: Gauge für aktive Benutzer

\n
private static readonly Gauge ActiveUsers = Metrics\n    .CreateGauge("app_active_users", "Number of active users");\n\npublic void UserLoggedIn() => ActiveUsers.Inc();\npublic void UserLoggedOut() => ActiveUsers.Dec();
\n\n

Beispiel: Histogram für Antwortzeit

\n
private static readonly Histogram RequestDuration = Metrics\n    .CreateHistogram("app_request_duration_seconds", "Request duration in seconds",\n        new HistogramConfiguration\n        {\n            Buckets = Histogram.ExponentialBuckets(0.001, 2, 10) // von 1ms bis ~1s\n        });\n\npublic void RecordRequestDuration(double seconds)\n{\n    RequestDuration.Observe(seconds);\n}
\n\n

Export von Metriken in ASP.NET Core

\n

Damit Prometheus Metriken sammeln kann, muss ein Endpunkt /metrics hinzugefügt werden. In Program.cs:

\n
using Prometheus;\n\nvar builder = WebApplication.CreateBuilder(args);\nbuilder.Services.AddCont                    

Empfehlungen