Métriques Prometheus en C# (.NET) — bibliothèque prometheus-net
Dans le développement moderne d'applications web et de microservices sur la plateforme .NET, la surveillance et l'observabilité sont devenues des éléments obligatoires de l'environnement de production. La bibliothèque prometheus-net est la bibliothèque cliente officielle pour .NET, qui permet d'exporter facilement les métriques d'application dans un format compréhensible par le serveur de surveillance Prometheus.
Avec prometheus-net, vous pouvez collecter des données de performance (temps de réponse, nombre de requêtes, erreurs, utilisation de la mémoire) et les transmettre à Prometheus pour une visualisation ultérieure dans Grafana ou d'autres outils. La bibliothèque prend en charge à la fois les anciennes versions de .NET Framework (4.6.1+) et les versions modernes .NET Core / .NET 5/6/7/8.
Installation
Vous pouvez installer la bibliothèque via le gestionnaire de packages NuGet ou avec .NET CLI :
dotnet add package prometheus-netPour les applications ASP.NET Core, le package prometheus-net.AspNetCore est également requis :
dotnet add package prometheus-net.AspNetCoreTypes de métriques principaux
Prometheus prend en charge quatre types de métriques principaux. Dans prometheus-net, ils sont implémentés comme des fabriques statiques dans la classe Metrics :
- Counter — un compteur qui ne peut qu'augmenter (par exemple, le nombre de requêtes traitées).
- Gauge — une métrique qui peut à la fois augmenter et diminuer (par exemple, le nombre de connexions actives ou la température actuelle).
- Histogram — un histogramme qui compte le nombre d'observations dans des intervalles définis (buckets). Utilisé pour mesurer la distribution du temps de réponse ou de la taille des données.
- Summary — une métrique sommaire qui calcule les quantiles (p50, p95, p99) à partir d'un flux d'observations.
Exemple d'utilisation de Counter
Créons un compteur simple pour compter le nombre de requêtes HTTP traitées :
using Prometheus;
// Création d'un compteur avec un nom et une descriptionprivate static readonly Counter RequestCount = Metrics .CreateCounter("myapp_requests_total", "Total number of HTTP requests.");
// Dans le gestionnaire de requête, on incrémente le compteurpublic IActionResult Index(){ RequestCount.Inc(); // incrémenter de 1 // Ou RequestCount.Inc(5); // incrémenter de 5 return View();}Exemple d'utilisation de Gauge
Gauge est pratique pour suivre l'état actuel, par exemple le nombre d'utilisateurs actifs :
private static readonly Gauge ActiveUsers = Metrics .CreateGauge("myapp_active_users", "Number of active users.");
// Lors de la connexion d'un utilisateurActiveUsers.Inc();
// Lors de la déconnexion d'un utilisateurActiveUsers.Dec();Exemple d'utilisation de Histogram
L'histogramme est idéal pour mesurer le temps d'exécution des requêtes :
private static readonly Histogram RequestDuration = Metrics .CreateHistogram("myapp_request_duration_seconds", "Histogram of request duration.", new HistogramConfiguration { // Configuration des limites des buckets Buckets = new[] { 0.1, 0.25, 0.5, 1.0, 2.5 } });
// Dans un middleware ou une action de contrôleurusing (RequestDuration.NewTimer()){ // exécution de la requête await Next(context);}Intégration avec ASP.NET Core
Pour que votre endpoint /metrics commence à fournir des données au format Prometheus, il suffit d'ajouter un middleware dans Program.cs :
using Prometheus;
var builder = WebApplication.CreateBuilder(args);var app = builder.Build();
// Ajout du middleware pour la collecte des Aussi dans la bibliothèque
Event Bus et le pattern Observer en Java : implémentation d'une architecture faiblement couplée
node-cron : Planificateur de tâches pour JavaScript (Node.js)
Internationalisation (i18n) en TypeScript : la bibliothèque i18next
iText 7 pour Java : guide complet avec exemples pratiques
Configuration des applications Go : la bibliothèque viper