Ü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-netFü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.ConsoleKonfigurieren 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
Auch in der Bibliothek
Geolokalisierung und Karten in PHP: Überblick über Bibliotheken und Werkzeuge
Aufgabenwarteschlangen für Kotlin: Coroutines und KJobQueue
Internationalisierung (i18n) in PHP: gettext-Bibliothek und moderne Ansätze
Arbeiten mit Markdown in Kotlin: Bibliotheken und Parser
PDF-Generierung in JavaScript (Node.js): Bibliotheken und Werkzeuge