Surveillance des applications C# (.NET) : des métriques à l'alerting
Les applications .NET modernes nécessitent une surveillance constante des performances, de la disponibilité et de l'état des processus internes. Dans cet article, nous examinerons les outils clés pour organiser la surveillance : Prometheus pour la collecte de métriques, OpenTelemetry pour le traçage et Serilog pour la journalisation structurée. Vous apprendrez comment intégrer l'observabilité dans votre application C#.
Pourquoi la surveillance des applications .NET est-elle nécessaire ?
L'absence de surveillance transforme le débogage en devinette. Sans métriques, vous ne saurez pas si le temps de réponse augmente ; sans traces, vous ne trouverez pas le goulot d'étranglement dans la chaîne d'appels ; sans logs, vous ne comprendrez pas la cause d'une erreur. Une surveillance correctement configurée permet de :
- Détecter les anomalies avant qu'elles n'affectent les utilisateurs.
- Analyser les performances de composants individuels (bases de données, API, cache).
- Collecter des métriques métier (nombre de commandes, sessions actives).
- Automatiser les alertes en cas d'incidents.
Outils pour la surveillance .NET
Nous utiliserons trois composants principaux :
- Prometheus — système de collecte et de stockage de métriques avec un langage de requête puissant, PromQL.
- OpenTelemetry — standard pour la collecte de télémétrie (traces, métriques, logs).
- Serilog — bibliothèque de journalisation structurée pour .NET.
Étape 1 : Installation et configuration de Prometheus avec .NET
Pour intégrer Prometheus avec C#, utilisez le package prometheus-net. Installez-le via NuGet :
dotnet add package prometheus-netEnsuite, ajoutez le middleware dans votre Program.cs :
using Prometheus;
var builder = WebApplication.CreateBuilder(args);var app = builder.Build();
// Activer le point de terminaison /metrics pour Prometheusapp.UseHttpMetrics();app.MapMetrics();
app.MapGet("/", () => "Hello World!");app.Run();Après avoir lancé l'application, accédez à http://localhost:5000/metrics. Vous verrez les métriques standard : http_requests_total, http_request_duration_seconds et autres.
Étape 2 : Création de métriques personnalisées
Il est souvent nécessaire de suivre des indicateurs métier. Par exemple, le nombre de commandes traitées :
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(); }}
// Utilisation dans un contrôleur[ApiController][Route("api/orders")]public class OrdersController : ControllerBase{ [HttpPost] public IActionResult CreateOrder() { // ... logique de création de commande OrderMetrics.RecordOrder(); return Ok(); }}Maintenant, dans /metrics, la ligne orders_processed_total 1 apparaîtra.
Étape 3 : Traçage avec OpenTelemetry
Le traçage aide à comprendre combien de temps chaque étape du traitement d'une requête prend. Installez les packages :
dotnet add package OpenTelemetry.Extensions.Hostingdotnet add package OpenTelemetry.Instrumentation.AspNetCoredotnet add package OpenTelemetry.Exporter.ConsoleConfigurez OpenTelemetry dans Program.cs :
using OpenTelemetry.Trace;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenTelemetry() .WithTracing(tracing => tracing .AddAspNetCoreInstrumentation() .AddConsoleExporter());
var app = builder.Build();app.Run();Désormais, chaque requête HTTP créera automatiquement une trace avec des informations sur le temps d'exécution. Pour l'exportation
Aussi dans la bibliothèque
Client OAuth pour Kotlin : bibliothèque Ktor OAuth pour l'authentification dans les API
Apprentissage automatique en C++ : aperçu des bibliothèques clés
Travail avec les dates en Kotlin : bibliothèques et outils (Kotlinx-datetime, Joda-Time, java.time)
Travailler avec XML en JavaScript (Node.js) : parsing, création et validation
Génération de PDF en JavaScript (Node.js) : bibliothèques et outils pour créer des PDF