Surveillance des applications C# (.NET) avec OpenTelemetry et Prometheus

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Surveillance des applications C# (.NET) : Guide complet sur OpenTelemetry et Prometheus



Les applications .NET modernes nécessitent une surveillance constante des performances, des erreurs et de l'état. Sans surveillance, vous risquez de perdre le contrôle de la production. Dans cet article, nous allons voir comment configurer une surveillance efficace des applications C# (.NET) en utilisant la combinaison OpenTelemetry (collecte de télémétrie) et Prometheus + Grafana (visualisation et alerting).



Pourquoi OpenTelemetry ?

OpenTelemetry (OTel) est le standard industriel pour la collecte de métriques, de traces et de journaux. Pour .NET, il fournit des SDK officiels et une instrumentation automatique des bibliothèques populaires (ASP.NET Core, gRPC, Entity Framework).



Installation et configuration d'OpenTelemetry dans un projet C#

Ajoutez les packages NuGet à votre projet :

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


Configuration de base dans Program.cs

Configurez la collecte de métriques et l'export vers 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();

// Point de terminaison pour Prometheus (par défaut /metrics)app.MapPrometheusScrapingEndpoint();

app.Run();


Création de métriques personnalisées

Vous pouvez ajouter vos propres compteurs, histogrammes et jauges :

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: "Nombre de commandes créées"); _orderProcessingTime = meter.CreateHistogram<double>("orders.processing_time", unit: "ms"); }

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


Traçage des requêtes (Distributed Tracing)

Pour suivre les chaînes d'appels, ajoutez le traçage :

using OpenTelemetry.Trace;

builder.Services.AddOpenTelemetry() .WithTracing(tracing => tracing .AddAspNetCoreInstrumentation() .AddHttpClientInstrumentation() .AddEntityFrameworkCoreInstrumentation() .AddConsoleExporter()); // Pour le débogage, en production — Jaeger ou Zipkin


Journalisation via OpenTelemetry

Connectez le journaliseur à OTel :

using OpenTelemetry.Logs;

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


Configuration de Prometheus pour la collecte de métriques

Dans le fichier prometheus.yml, indiquez votre point de terminaison :

scrape_configs:  - job_name: 'dotnet-app'    scrape_interval: 5s    static_configs:      - targets: ['localhost:5000']  # Port de votre application


Visualisation dans Grafana

Après avoir connecté Prometheus à Grafana, créez un tableau de bord avec les métriques clés :

Recommendations