Überwachung von .NET-Anwendungen mit Prometheus und OpenTelemetry

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

Überwachung von C#-Anwendungen (.NET): Von Metriken bis zum Alerting



Moderne .NET-Anwendungen erfordern eine ständige Überwachung der Leistung, Verfügbarkeit und des Zustands interner Prozesse. In diesem Artikel betrachten wir die wichtigsten Werkzeuge zur Organisation der Überwachung: Prometheus zum Sammeln von Metriken, OpenTelemetry für Tracing und Serilog für strukturiertes Logging. Sie erfahren, wie Sie Observability (Beobachtbarkeit) in Ihre C#-Anwendung integrieren.



Warum ist die Überwachung von .NET-Anwendungen wichtig?

Fehlende Überwachung macht das Debuggen zum Ratespiel. Ohne Metriken erfahren Sie nichts über steigende Antwortzeiten, ohne Traces finden Sie keinen Engpass in der Aufrufkette, ohne Logs verstehen Sie die Fehlerursache nicht. Eine richtig konfigurierte Überwachung ermöglicht:

  • Das Erkennen von Anomalien, bevor sie sich auf Benutzer auswirken.
  • Die Analyse der Leistung einzelner Komponenten (Datenbanken, API, Cache).
  • Das Sammeln von Geschäftsmetriken (Anzahl der Bestellungen, aktive Sitzungen).
  • Die Automatisierung von Benachrichtigungen bei Vorfällen.


Werkzeuge für die .NET-Überwachung

Wir werden drei Hauptkomponenten verwenden:

  • Prometheus — ein System zum Sammeln und Speichern von Metriken mit der leistungsstarken Abfragesprache PromQL.
  • OpenTelemetry — ein Standard zum Sammeln von Telemetriedaten (Traces, Metriken, Logs).
  • Serilog — eine Bibliothek für strukturiertes Logging in .NET.


Schritt 1: Installation und Konfiguration von Prometheus mit .NET

Für die Integration von Prometheus mit C# verwenden Sie das Paket prometheus-net. Installieren Sie es über NuGet:

dotnet add package prometheus-net

Fügen Sie dann Middleware in Ihre Program.cs ein:

using Prometheus;

var builder = WebApplication.CreateBuilder(args);var app = builder.Build();

// Aktivieren des /metrics-Endpunkts für Prometheusapp.UseHttpMetrics();app.MapMetrics();

app.MapGet("/", () => "Hello World!");app.Run();

Nach dem Start der Anwendung rufen Sie http://localhost:5000/metrics auf. Sie sehen Standardmetriken wie http_requests_total, http_request_duration_seconds und andere.



Schritt 2: Erstellen benutzerdefinierter Metriken

Oft müssen Geschäftskennzahlen verfolgt werden. Zum Beispiel die Anzahl der verarbeiteten Bestellungen:

using Prometheus;

public class OrderMetrics{ private static readonly Counter OrdersCounter = Metrics .CreateCounter("orders_processed_total", "Total number of processed orders");

public static void RecordOrder() { OrdersCounter.Inc(); }}

// Verwendung im Controller[ApiController][Route("api/orders")]public class OrdersController : ControllerBase{ [HttpPost] public IActionResult CreateOrder() { // ... Logik zur Bestellungserstellung OrderMetrics.RecordOrder(); return Ok(); }}

Jetzt erscheint in /metrics die Zeile orders_processed_total 1.



Schritt 3: Tracing mit OpenTelemetry

Tracing hilft zu verstehen, wie viel Zeit jeder Schritt der Anfrageverarbeitung benötigt. Installieren Sie die Pakete:

dotnet add package OpenTelemetry.Extensions.Hostingdotnet add package OpenTelemetry.Instrumentation.AspNetCoredotnet add package OpenTelemetry.Exporter.Console

Konfigurieren Sie OpenTelemetry in Program.cs:

using OpenTelemetry.Trace;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddOpenTelemetry() .WithTracing(tracing => tracing .AddAspNetCoreInstrumentation() .AddConsoleExporter());

var app = builder.Build();app.Run();

Jede HTTP-Anfrage erstellt nun automatisch einen Trace mit Informationen zur Ausführungszeit. Für den Export

Empfehlungen