Überwachung von C# (.NET)-Anwendungen mit OpenTelemetry und Prometheus

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# (.NET)-Anwendungen: Vollständiger Leitfaden zu OpenTelemetry und Prometheus



Moderne .NET-Anwendungen erfordern eine ständige Überwachung von Leistung, Fehlern und Zustand. Ohne Überwachung riskieren Sie, die Kontrolle über die Produktion zu verlieren. In diesem Artikel werden wir erläutern, wie Sie eine effektive Überwachung von C# (.NET)-Anwendungen mit der Kombination aus OpenTelemetry (Telemetrieerfassung) und Prometheus + Grafana (Visualisierung und Alerting) einrichten.



Warum gerade OpenTelemetry?

OpenTelemetry (OTel) ist der Industriestandard für die Erfassung von Metriken, Traces (Ablaufverfolgungen) und Logs. Für .NET bietet es offizielle SDKs und automatische Instrumentierung für gängige Bibliotheken (ASP.NET Core, gRPC, Entity Framework).



Installation und Konfiguration von OpenTelemetry in einem C#-Projekt

Fügen Sie Ihrem Projekt die NuGet-Pakete hinzu:

dotnet add package OpenTelemetrydotnet add package OpenTelemetry.Extensions.Hostingdotnet add package OpenTelemetry.Instrumentation.AspNetCoredotnet add package OpenTelemetry.Exporter.Prometheus.AspNetCore


Basiskonfiguration in Program.cs

Konfigurieren Sie die Metrikenerfassung und den Export nach Prometheus:

using OpenTelemetry.Metrics;using OpenTelemetry.Resources;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddOpenTelemetry() .ConfigureResource(resource => resource .AddService("MyApp", serviceVersion: "1.0.0")) .WithMetrics(metrics => metrics .AddAspNetCoreInstrumentation() .AddHttpClientInstrumentation() .AddMeter("Microsoft.AspNetCore.Hosting") .AddMeter("Microsoft.AspNetCore.Server.Kestrel") .AddPrometheusExporter());

var app = builder.Build();

// Endpunkt für Prometheus (standardmäßig /metrics)app.MapPrometheusScrapingEndpoint();

app.Run();


Erstellung benutzerdefinierter Metriken

Sie können eigene Zähler, Histogramme und Messgeräte hinzufügen:

using System.Diagnostics.Metrics;

public class OrderMetrics{ private readonly Counter<int> _ordersCreated; private readonly Histogram<double> _orderProcessingTime;

public OrderMetrics(IMeterFactory meterFactory) { var meter = meterFactory.Create("MyApp.Orders"); _ordersCreated = meter.CreateCounter<int>("orders.created", description: "Anzahl der erstellten Bestellungen"); _orderProcessingTime = meter.CreateHistogram<double>("orders.processing_time", unit: "ms"); }

public void RecordOrderCreated() => _ordersCreated.Add(1); public void RecordProcessingTime(double ms) => _orderProcessingTime.Record(ms);}


Ablaufverfolgung von Anfragen (Distributed Tracing)

Fügen Sie Tracing hinzu, um Aufrufketten zu verfolgen:

using OpenTelemetry.Trace;

builder.Services.AddOpenTelemetry() .WithTracing(tracing => tracing .AddAspNetCoreInstrumentation() .AddHttpClientInstrumentation() .AddEntityFrameworkCoreInstrumentation() .AddConsoleExporter()); // Für Debugging, in Produktion: Jaeger oder Zipkin


Logging über OpenTelemetry

Binden Sie den Logger an OTel an:

using OpenTelemetry.Logs;

builder.Logging.AddOpenTelemetry(logging => logging .AddConsoleExporter() .AddOtlpExporter(options => options.Endpoint = new Uri("http://localhost:4317")));


Konfiguration von Prometheus zur Metrikenerfassung

Geben Sie in der Datei prometheus.yml Ihren Endpunkt an:

scrape_configs:  - job_name: 'dotnet-app'    scrape_interval: 5s    static_configs:      - targets: ['localhost:5000']  # Port Ihrer Anwendung


Visualisierung in Grafana

Erstellen Sie nach dem Verbinden von Prometheus mit Grafana ein Dashboard mit den wichtigsten Metriken:

Empfehlungen