🔁 DevOps

prometheus-grafana-setup

Configuration de Prometheus et Grafana pour le monitoring d'applications et d'infrastructure — métriques, alertes, dashboards.

⚡ Installation & lancement en 1 commande

Copiez-collez dans votre terminal : le skill s'installe dans ~/.claude/skills et Claude Code se lance directement dessus.

macOS / Linux
curl -fsSL https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.sh | sh -s -- prometheus-grafana-setup --launch
Windows (PowerShell)
iex "& { $(iwr -useb https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.ps1) } prometheus-grafana-setup -Launch"

🚀 Déjà installé ?

claude "/prometheus-grafana-setup"

Ou tapez /prometheus-grafana-setup dans une session Claude Code, ou décrivez simplement votre besoin — le skill se déclenche automatiquement via le skill-router.

🔑 Déclencheurs automatiques

Le skill s'active automatiquement quand votre demande contient :

PrometheusGrafanamonitoringmétriquesalertingdashboard GrafanaPromQLscraping

📦 Installation manuelle

git clone https://github.com/khalilbenaz/claude-skills-collection.git cp -r claude-skills-collection/devops-skills/prometheus-grafana-setup ~/.claude/skills/

Source : devops-skills/prometheus-grafana-setup

📖 Manuel

Setup Prometheus & Grafana

Workflow

  1. Instrumenter : ajouter des métriques dans l'application.
  2. Collecter : configurer Prometheus pour scraper les métriques.
  3. Visualiser : créer des dashboards Grafana.
  4. Alerter : définir des règles d'alerte et des notifications.

Types de métriques Prometheus

TypeUsageExemple
CounterValeur qui ne fait qu'augmenterNombre de requêtes, erreurs
GaugeValeur qui monte et descendTempérature, connexions actives
HistogramDistribution de valeursLatence des requêtes
SummaryPercentiles calculés côté clientLatence (p50, p90, p99)

Instrumentation .NET

// dotnet add package prometheus-net.AspNetCore

// Program.cs
app.UseHttpMetrics(); // Métriques HTTP automatiques
app.MapMetrics();      // Endpoint /metrics

// Métriques custom
public class PaymentMetrics
{
    private static readonly Counter PaymentsProcessed = Metrics
        .CreateCounter("payments_processed_total",
            "Nombre total de paiements traités",
            new CounterConfiguration
            {
                LabelNames = new[] { "status", "currency" }
            });

    private static readonly Histogram PaymentDuration = Metrics
        .CreateHistogram("payment_duration_seconds",
            "Durée de traitement d'un paiement",
            new HistogramConfiguration
            {
                Buckets = Histogram.ExponentialBuckets(0.01, 2, 10)
            });

    private static readonly Gauge ActiveTransactions = Metrics
        .CreateGauge("active_transactions",
            "Nombre de transactions en cours");

    public void RecordPayment(string status, string currency, double duration)
    {
        PaymentsProcessed.WithLabels(status, currency).Inc();
        PaymentDuration.Observe(duration);
    }
}

Configuration Prometheus

# prometheus.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s

rule_files:
  - "alerts/*.yml"

scrape_configs:
  - job_name: 'payment-api'
    metrics_path: /metrics
    static_configs:
      - targets: ['payment-api:8080']
        labels:
          environment: 'production'

  - job_name: 'kubernetes-pods'
    kubernetes_sd_configs:
      - role: pod
    relabel_configs:
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
        action: keep
        regex: true

Requêtes PromQL utiles

# Taux de requêtes par seconde (dernières 5 minutes)
rate(http_requests_total[5m])

# Latence p99
histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))

# Taux d'erreur (%)
sum(rate(http_requests_total{status=~"5.."}[5m]))
/ sum(rate(http_requests_total[5m])) * 100

# Utilisation mémoire
process_resident_memory_bytes / 1024 / 1024

Règles d'alertes

# alerts/payment-alerts.yml
groups:
  - name: payment-alerts
    rules:
      - alert: HighErrorRate
        expr: |
          sum(rate(http_requests_total{status=~"5..", job="payment-api"}[5m]))
          / sum(rate(http_requests_total{job="payment-api"}[5m])) > 0.05
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Taux d'erreur élevé sur Payment API"
          description: "Le taux d'erreur 5xx est supérieur à 5% depuis 5 minutes."

      - alert: HighLatency
        expr: |
          histogram_quantile(0.95, rate(http_request_duration_seconds_bucket{job="payment-api"}[5m])) > 2
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Latence élevée sur Payment API"

Règles