Überwachung von C#-Anwendungen: Metriken und Alarme von A bis Z

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

Einleitung: Warum Überwachung für C#-Anwendungen entscheidend ist

\n\n

In der modernen Softwareentwicklung ist das Schreiben von Code nur die halbe Miete. Damit eine Anwendung stabil, schnell und vorhersagbar läuft, ist eine kontinuierliche Überwachung erforderlich. Für C# (.NET)-Anwendungen, die häufig in hochbelasteten Unternehmenssystemen, im Bankensektor, im E-Commerce und in Cloud-Diensten eingesetzt werden, ist die Überwachung nicht nur eine Option, sondern eine zwingende Anforderung.

\n\n

Ohne Überwachung arbeiten Sie im Blindflug: Speicherlecks bleiben unbemerkt, bis der Server abstürzt, langsame Anfragen häufen sich und Benutzer wechseln zur Konkurrenz. In diesem Artikel behandeln wir den gesamten Zyklus der Einrichtung von Observability für C#-Anwendungen: von der Erfassung grundlegender Metriken bis zur Konfiguration intelligenter Alarme in Echtzeit.

\n\n

1. Grundlagen der Überwachung: Welche Metriken in .NET erfassen

\n\n

Bevor Sie Tools konfigurieren, ist es wichtig zu verstehen, welche Metriken für C#-Anwendungen wirklich wichtig sind. Wir unterteilen sie in drei Gruppen:

\n\n

1.1. Systemmetriken (Infrastrukturebene)

\n
    \n
  • CPU und Arbeitsspeicher — Prozessorauslastung und RAM-Verbrauch des dotnet-Prozesses.
  • \n
  • GC (Garbage Collection) — Häufigkeit und Dauer der Speicherbereinigung, Heap-Größen (Gen0, Gen1, Gen2, LOH).
  • \n
  • Thread-Pool — Anzahl aktiver, freier und wartender Threads.
  • \n
  • Datenträger-I/O und Netzwerk — Lese-/Schreibzugriffe auf die Festplatte, Netzwerkverbindungen.
  • \n
\n\n

1.2. Geschäftsmetriken (Anwendungsebene)

\n
    \n
  • Request Rate — Anzahl der Anfragen pro Sekunde (RPS).
  • \n
  • Latenz — Antwortzeit (p50, p95, p99 Perzentile).
  • \n
  • Fehlerrate — Prozentsatz der 4xx- und 5xx-Fehler.
  • \n
  • Aktive Benutzer — Anzahl gleichzeitig arbeitender Benutzer.
  • \n
\n\n

1.3. .NET-Runtime-Metriken

\n
    \n
  • JIT-Kompilierung — Kompilierungszeit von Methoden.
  • \n
  • Assembly-Laden — Anzahl geladener Assemblys.
  • \n
  • Ausnahmen — Anzahl ausgelöster Ausnahmen pro Sekunde.
  • \n
\n\n

Zur Erfassung dieser Metriken wird in .NET ein leistungsstarkes Tool verwendet — System.Diagnostics.Metrics (integrierte API ab .NET 6+) und die Bibliothek OpenTelemetry.

\n\n

2. Einrichtung der Metriksammlung mit OpenTelemetry und Prometheus

\n\n

Der beste Weg, die Überwachung einer C#-Anwendung zu organisieren, ist die Kombination von OpenTelemetry (Metriksammlung) + Prometheus (Speicherung) + Grafana (Visualisierung). Betrachten wir die schrittweise Einrichtung.

\n\n

2.1. Installation der NuGet-Pakete

\n

Fügen Sie dem Projekt die folgenden Pakete hinzu:

\n
dotnet add package OpenTelemetry.Extensions.Hosting\ndotnet add package OpenTelemetry.Exporter.Prometheus.AspNetCore\ndotnet add package OpenTelemetry.Instrumentation.AspNetCore\ndotnet add package OpenTelemetry.Instrumentation.Runtime
\n\n

2.2. Konfiguration in Program.cs

\n

Konfigurieren Sie OpenTelemetry für die automatische Erfassung von Metriken aus ASP.NET Core und der .NET-Runtime:

\n
using OpenTelemetry.Metrics;\n\nvar builder = WebApplication.CreateBuilder(args);\n\nbuilder.Services.AddOpenTelemetry()\n    .WithMetrics(metrics => metrics\n        .AddAspNetCoreInstrumentation() // Metriken für HTTP-Anfragen\n        .AddRuntimeInstrumentation()    // Metriken für GC, JIT, ThreadPool\n        .AddPrometheusExporter());      // Export nach Prometheus\n\nvar app = builder.Build();\n\napp.UseOpenTelemetryPrometheusScrapingEndpoint(); // Endpunkt /metrics\n\napp.Run();
\n\n

Jetzt ist unter http://localhost:5000/metrics ein Endpunkt mit Metriken im Prometheus-Format verfügbar.

\n\n

2.3. Erstellung benutzerdefinierter Metriken

\n

Fügen wir eine Geschäftsmetrik hinzu — einen Zähler für verarbeitete Bestellungen:

\n
public class OrderMetrics\                

Blogs

Buchempfehlungen