Métriques Prometheus en C# (.NET) : guide complet d'intégration
\n\nPrometheus est un système de surveillance open source qui collecte et stocke les métriques sous forme de séries temporelles. Pour les développeurs C# (.NET), l'intégration avec Prometheus offre la possibilité de suivre les performances des applications, les indicateurs métier et l'état du système en temps réel. Dans cet article, nous allons voir comment connecter Prometheus à une application .NET, quelles bibliothèques utiliser et comment configurer correctement les métriques.
\n\nPourquoi des métriques Prometheus dans .NET ?
\nLa surveillance avec Prometheus permet de :
\n- \n
- Suivre le nombre de requêtes, d'erreurs et le temps de réponse. \n
- Collecter des métriques de performance (CPU, mémoire, GC). \n
- Créer des métriques métier personnalisées (utilisateurs actifs, commandes). \n
- S'intégrer avec Grafana pour visualiser des tableaux de bord. \n
- Configurer des alertes basées sur des seuils. \n
Bibliothèque prometheus-net
\nLa bibliothèque principale pour travailler avec Prometheus dans .NET est prometheus-net. Elle prend en charge ASP.NET Core, .NET Core, .NET Framework et gRPC. Installation via NuGet :
\ndotnet add package prometheus-net\nPour ASP.NET Core, installez également :
\ndotnet add package prometheus-net.AspNetCore\n\nTypes de métriques dans Prometheus
\nLa bibliothèque prend en charge tous les types de métriques standard :
\n- \n
- Counter — un compteur qui ne fait qu'augmenter (nombre de requêtes). \n
- Gauge — une valeur qui peut augmenter et diminuer (température actuelle). \n
- Histogram — un histogramme pour mesurer la distribution des valeurs (temps de réponse). \n
- Summary — des quantiles pour l'agrégation des données (p95, p99). \n
Exemple : Counter de base
\nCréons une métrique qui compte le nombre de requêtes vers un endpoint :
\nusing Prometheus;\n\npublic class MetricsService\n{\n private static readonly Counter RequestCount = Metrics\n .CreateCounter("app_requests_total", "Nombre total de requêtes", new CounterConfiguration\n {\n LabelNames = new[] { "method", "endpoint" }\n });\n\n public void RecordRequest(string method, string endpoint)\n {\n RequestCount.WithLabels(method, endpoint).Inc();\n }\n}\nDans un contrôleur ASP.NET Core, l'appel ressemblera à ceci :
\n[ApiController]\n[Route("api/order")]\npublic class OrderController : ControllerBase\n{\n private readonly MetricsService _metrics;\n\n public OrderController(MetricsService metrics) => _metrics = metrics;\n\n [HttpGet]\n public IActionResult GetOrders()\n {\n _metrics.RecordRequest("GET", "/api/order");\n return Ok(new { orders = new[] { "order1", "order2" } });\n }\n}\n\nExemple : Gauge pour les utilisateurs actifs
\nprivate static readonly Gauge ActiveUsers = Metrics\n .CreateGauge("app_active_users", "Nombre d'utilisateurs actifs");\n\npublic void UserLoggedIn() => ActiveUsers.Inc();\npublic void UserLoggedOut() => ActiveUsers.Dec();\n\nExemple : Histogram pour le temps de réponse
\nprivate static readonly Histogram RequestDuration = Metrics\n .CreateHistogram("app_request_duration_seconds", "Durée de la requête en secondes",\n new HistogramConfiguration\n {\n Buckets = Histogram.ExponentialBuckets(0.001, 2, 10) // de 1ms à ~1s\n });\n\npublic void RecordRequestDuration(double seconds)\n{\n RequestDuration.Observe(seconds);\n}\n\nExportation des métriques dans ASP.NET Core
\nPour que Prometheus puisse collecter les métriques, il faut ajouter un endpoint /metrics. Dans Program.cs :
using Prometheus;\n\nvar builder = WebApplication.CreateBuilder(args);\nbuilder.Services.AddCont Aussi dans la bibliothèque
Validation des données en C# (.NET) : bibliothèques et approches
Spring Boot pour Java : guide complet avec exemples
Génération de rapports PDF en JavaScript (Node.js) : Puppeteer, PDFKit, jsPDF
sqlc pour Go : guide complet avec exemples concrets