Monitoring avec Prometheus et Grafana

Découvrez comment mettre en place une surveillance efficace de vos applications avec Prometheus et Grafana. Visualisez vos métriques en temps réel et anticipez les problèmes avant qu'ils n'impacten...

Olivier Dupuy
25 juillet 2025

12

Vues

0

Commentaires

2

Min de lecture

Dans l'écosystème DevOps moderne, la surveillance et le monitoring des applications sont devenus des aspects critiques pour garantir la fiabilité et la performance des services. Prometheus et Grafana forment un duo puissant pour relever ces défis, offrant une solution complète de collecte de métriques et de visualisation pour les applications .NET. Découvrons comment implémenter efficacement ces outils dans un contexte professionnel.

Fondamentaux du monitoring avec Prometheus et Grafana

Prometheus est un système de monitoring open-source qui excelle dans la collecte et le stockage de métriques temporelles. Grafana complète parfaitement Prometheus en fournissant une interface de visualisation sophistiquée. Ensemble, ils permettent de :

  • Collecter des métriques applicatives en temps réel
  • Stocker l'historique des données de performance
  • Créer des tableaux de bord personnalisés
  • Configurer des alertes basées sur des seuils

Intégration avec ASP.NET Core

Voici comment intégrer Prometheus dans une application ASP.NET Core :


// Program.cs
using Prometheus;

var builder = WebApplication.CreateBuilder(args);

// Ajout du middleware Prometheus builder.Services.AddMetrics();

var app = builder.Build();

// Configuration des endpoints Prometheus app.UseMetricServer(); app.UseHttpMetrics();

Configuration des métriques personnalisées

Exemple de création de métriques personnalisées :


public class OrderMetrics
{
    private readonly Counter _orderCounter;
    private readonly Histogram _orderProcessingDuration;

public OrderMetrics() { _orderCounter = Metrics.CreateCounter("orders_total", "Total number of orders processed"); _orderProcessingDuration = Metrics.CreateHistogram("order_processing_duration_seconds", "Time spent processing orders"); }

public void RecordOrder() { _orderCounter.Inc(); }

public void RecordProcessingTime(double seconds) { _orderProcessingDuration.Observe(seconds); } }

Configuration de Prometheus

Configuration Prometheus dans Docker :


# prometheus.yml
global:
  scrape_interval: 15s

scrape_configs: - job_name: 'netcore-app' static_configs: - targets: ['localhost:80']

Mise en place de Grafana

Configuration de Grafana avec Docker Compose :


version: '3.8'
services:
  prometheus:
    image: prom/prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml

grafana: image: grafana/grafana ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=secret depends_on: - prometheus

Bonnes pratiques de monitoring

  • Définir des métriques significatives pour votre domaine métier
  • Implémenter les Four Golden Signals : Latence, Trafic, Erreurs, Saturation
  • Configurer des alertes pertinentes avec des seuils appropriés
  • Maintenir une documentation claire des métriques

Patterns d'implémentation avancés

Exemple d'implémentation d'un middleware de monitoring :


public class MetricsMiddleware
{
    private readonly RequestDelegate _next;
    private readonly Counter _requestCounter;
    private readonly Histogram _requestDuration;

public MetricsMiddleware(RequestDelegate next) { _next = next; _requestCounter = Metrics.CreateCounter("http_requests_total", "Total number of HTTP requests"); _requestDuration = Metrics.CreateHistogram("http_request_duration_seconds", "HTTP request duration"); }

public async Task InvokeAsync(HttpContext context) { _requestCounter.Inc(); using (var timer = _requestDuration.NewTimer()) { await _next(context); } } }

Gestion des erreurs et performance

Implémentation d'un circuit breaker avec monitoring :


public class MonitoredCircuitBreaker
{
    private readonly Gauge _circuitState;
    private readonly Counter _failureCounter;

public MonitoredCircuitBreaker() { _circuitState = Metrics.CreateGauge("circuit_breaker_state", "Circuit breaker state (0=closed, 1=open)"); _failureCounter = Metrics.CreateCounter("circuit_breaker_failures_total", "Total number of circuit breaker failures"); }

public async Task ExecuteAsync(Func action) { try { _circuitState.Set(0); await action(); } catch (Exception) { _failureCounter.Inc(); _circuitState.Set(1); throw; } } }

Tests et validation

Exemple de tests unitaires pour les métriques :


public class MetricsTests
{
    [Fact]
    public async Task Should_Record_Metrics_When_Processing_Order()
    {
        // Arrange
        var metrics = new OrderMetrics();
        
        // Act
        metrics.RecordOrder();
        metrics.RecordProcessingTime(1.5);

// Assert var metricFamily = await Metrics.DefaultRegistry.GetMetricFamilies(); Assert.Contains(metricFamily, m => m.Name == "orders_total"); } }

Conclusion

L'implémentation de Prometheus et Grafana dans une application .NET moderne est essentielle pour maintenir une visibilité complète sur la santé et les performances du système. En suivant les bonnes pratiques et en utilisant les patterns appropriés, vous pouvez créer un système de monitoring robuste et efficace.

Points clés à retenir :

  • Utilisez des métriques significatives pour votre domaine
  • Automatisez la collecte et la visualisation des données
  • Implementez une stratégie d'alerte pertinente
  • Testez régulièrement votre système de monitoring
Partager cet article
42
12

Commentaires (0)

Rejoignez la discussion

Connectez-vous pour partager votre avis et échanger avec la communauté

Première discussion

Soyez le premier à partager votre avis sur cet article !

À propos de l'auteur
Olivier Dupuy

Développeur passionné et contributeur actif de la communauté technique.

Profil
Articles similaires
Load Balancing et High Availability
02 août 2025 2
DevOps & Cloud
Disaster Recovery et sauvegarde
01 août 2025 3
DevOps & Cloud
ArgoCD : GitOps pour Kubernetes
31 juil. 2025 7
DevOps & Cloud
Navigation rapide
Commentaires (0)