Métriques Prometheus en C# (.NET) : intégration et configuration

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

Métriques Prometheus en C# (.NET) : guide complet d'intégration

\n\n

Prometheus 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\n

Pourquoi des métriques Prometheus dans .NET ?

\n

La 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
\n\n

Bibliothèque prometheus-net

\n

La 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 :

\n
dotnet add package prometheus-net
\n

Pour ASP.NET Core, installez également :

\n
dotnet add package prometheus-net.AspNetCore
\n\n

Types de métriques dans Prometheus

\n

La 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
\n\n

Exemple : Counter de base

\n

Créons une métrique qui compte le nombre de requêtes vers un endpoint :

\n
using 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}
\n

Dans 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\n

Exemple : Gauge pour les utilisateurs actifs

\n
private 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\n

Exemple : Histogram pour le temps de réponse

\n
private 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\n

Exportation des métriques dans ASP.NET Core

\n

Pour que Prometheus puisse collecter les métriques, il faut ajouter un endpoint /metrics. Dans Program.cs :

\n
using Prometheus;\n\nvar builder = WebApplication.CreateBuilder(args);\nbuilder.Services.AddCont                    

Recommendations