Die Bibliothek AppMetrics zur Überwachung von C# (.NET)-Anwendungen
Bei der Entwicklung moderner .NET-Anwendungen ist es entscheidend, deren Zustand, Leistung zu verfolgen und Engpässe zu identifizieren. Die Bibliothek AppMetrics ist ein leistungsstarkes und flexibles Werkzeug zur Erfassung, Aggregation und zum Export von Metriken in Echtzeit. Sie ermöglicht Entwicklern und Administratoren ein vollständiges Bild des Dienstbetriebs: von der Ausführungszeit von Anfragen bis zur Fehlerhäufigkeit.
AppMetrics unterstützt zahlreiche Backends zur Speicherung von Metriken: Prometheus, InfluxDB, Graphite, Elasticsearch und andere. Dank der integrierten Health Checks können Sie nicht nur Statistiken sammeln, sondern auch die Funktionsfähigkeit von Abhängigkeiten (Datenbanken, externe APIs) überprüfen.
Hauptfunktionen
- Zähler (Counters) – Anzahl der Anfragen, Fehler, Ereignisse.
- Histogramme (Histograms) – Verteilung der Ausführungszeiten von Operationen.
- Timer (Timers) – Messung der Ausführungsdauer von Code.
- Messer (Meters) – Ereignisrate pro Sekunde.
- Health Checks – Überprüfung der Verfügbarkeit externer Dienste.
- Metrik-Export – nach Prometheus (Format /metrics), InfluxDB und andere.
Installation und Einrichtung
Installieren Sie das Paket über NuGet:
dotnet add package AppMetrics.AspNetCore.Mvcdotnet add package AppMetrics.Reporting.Prometheus.ClientFügen Sie dann die Dienste in Program.cs (oder Startup.cs) hinzu:
using App.Metrics;using App.Metrics.AspNetCore;using App.Metrics.Formatters.Prometheus;
var builder = WebApplication.CreateBuilder(args);
// Metrik-Konfigurationvar metrics = AppMetrics.CreateDefaultBuilder() .OutputMetrics.AsPrometheusPlainText() .Build();
builder.Services.AddMetrics(metrics);builder.Services.AddMetricsTrackingMiddleware();builder.Services.AddMetricsEndpoints();
var app = builder.Build();
app.UseMetricsAllMiddleware();app.UseMetricsAllEndpoints();
app.MapGet("/", () => "Hello World!");
app.Run();Nach dem Start der Anwendung sind die Metriken unter der Adresse /metrics im Prometheus-Format verfügbar.
Erstellung benutzerdefinierter Metriken
Definieren Sie eine Klasse zum Speichern von Metriken:
public class MyMetrics{ private readonly IMetrics _metrics;
public MyMetrics(IMetrics metrics) { _metrics = metrics; }
// Anfragenzähler private readonly CounterOptions _requestCounter = new CounterOptions { Name = "myapp_requests_total", MeasurementUnit = Unit.Requests };
// Timer zur Messung der Ausführungszeit private readonly TimerOptions _requestTimer = new TimerOptions { Name = "myapp_request_duration_seconds", MeasurementUnit = Unit.Requests, DurationUnit = TimeUnit.Seconds };
public void TrackRequest() { _metrics.Measure.Counter.Increment(_requestCounter); }
public IDisposable MeasureRequestDuration() { return _metrics.Measure.Timer.Time(_requestTimer); }}Verwenden Sie die Metriken in Controllern:
[ApiController][Route("api/[controller]")]public class SampleController : ControllerBase{ private readonly MyMetrics _myMetrics;
public SampleController(MyMetrics myMetrics) { _myMetrics = myMetrics; }
[HttpGet] public IActionResult Get() { _myMetrics.TrackRequest();
using (_myMetrics.MeasureRequestDuration()) { // Simulation der Arbeit Thread.Sleep(100); }
return Ok("Metrics tracked"); }}Health Checks
Auch in der Bibliothek
FastEndpoints für C# (.NET): Komplettleitfaden mit Beispielen
Clikt: Leistungsstarkes CLI-Framework für Kotlin mit deklarativem Syntax
Konfiguration von TypeScript-Anwendungen: Bibliotheken und Tools
Event Bus und das Observer-Pattern in Swift: Implementierung und Beispiele
OAuth-Client für Swift (iOS/macOS): Vollständige Anleitung