Surveillance des applications C# : métriques et alertes dans .NET

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

Introduction : pourquoi la surveillance des applications C# est nécessaire

Les applications C# modernes sur la plateforme .NET sont des systèmes distribués complexes fonctionnant sous de fortes charges. Sans une surveillance de qualité, vous risquez de manquer une dégradation des performances, des fuites mémoire ou des pannes critiques. La surveillance permet non seulement de détecter les problèmes, mais aussi de les anticiper, en réagissant rapidement aux anomalies.

Dans cet article, nous allons voir comment configurer la collecte de métriques, la journalisation et le système d'alertes pour les applications C# (.NET) en utilisant des outils modernes : Prometheus, Grafana, Serilog et les Health Checks intégrés. Vous obtiendrez des exemples de code prêts à l'emploi et des recommandations pratiques.



Métriques principales pour les applications C# (.NET)

La surveillance commence par la définition des indicateurs clés. Pour les applications .NET, on peut les diviser en trois catégories :

  • Métriques d'infrastructure — utilisation du CPU, de la mémoire, du disque, du réseau.
  • Métriques applicatives — temps de réponse de l'API, nombre de requêtes, erreurs (4xx/5xx), taille des files d'attente.
  • Métriques spécifiques à .NET — taille du tas GC, nombre de threads, durée du garbage collection, nombre de connexions à la base de données.


Collecte de métriques via Prometheus et .NET

Pour exporter des métriques vers Prometheus, utilisez la bibliothèque prometheus-net. Installez-la via NuGet :

dotnet add package prometheus-net.AspNetCore

Ajoutez le middleware dans Program.cs :

var builder = WebApplication.CreateBuilder(args);var app = builder.Build();

// Activation des métriques Prometheusapp.UseHttpMetrics(); // Métriques HTTPapp.UseMetricServer(); // Endpoint /metrics

app.MapGet("/", () => "Hello World!");app.Run();

Désormais, les métriques standard seront disponibles à l'adresse /metrics : nombre de requêtes, durée, erreurs. Ajoutons une métrique personnalisée — un compteur d'accès à l'endpoint :

using Prometheus;

var requestCounter = Metrics.CreateCounter( "myapp_requests_total", "Total requests to the endpoint");

app.MapGet("/api/data", () => { requestCounter.Inc(); return new { Message = "Data loaded" };});


Health Checks : vérification de base de l'état

Le mécanisme intégré Health Checks dans .NET permet d'évaluer rapidement l'état de fonctionnement de l'application. Ajoutez une vérification de connexion à la base de données :

using Microsoft.Extensions.Diagnostics.HealthChecks;

builder.Services.AddHealthChecks() .AddDbContextCheck<AppDbContext>() .AddUrlGroup(new Uri("https://external-api.com"), "External API");

app.MapHealthChecks("/health");

Les Health Checks renvoient un statut Healthy, Degraded ou Unhealthy — c'est une source idéale pour les alertes.



Journalisation avec Serilog : logs structurés

Les logs sont une source de données essentielle pour le diagnostic. Serilog permet d'envoyer les logs vers Elasticsearch, Seq ou simplement dans un fichier avec un format structuré.

Installation :

dotnet add package Serilog.AspNetCoredotnet add package Serilog.Sinks.Seq

Configuration dans Program.cs :

Log.Logger = new LoggerConfiguration()    .MinimumLevel.Information()    .WriteTo.Console()    .WriteTo.Seq("http://localhost:5341")    .Enrich.WithProperty("Application", "MyApp")    .CreateLogger();

builder.Host.UseSerilog();

Désormais, tous les logs contiendront des informations contextuelles : RequestId, UserId, temps d'exécution. Exemple de journalisation d'erreur :

try {    // code dangereux} catch (Exception ex) {    Log.Error(ex, "Erreur lors du traitement de la commande {OrderId}", orderId);}

Les logs structurés sont faciles à analyser dans Grafana ou Kibana, à construire

Blogs

Book Recommendations