Le duo Prometheus + Grafana

Grafana ne stocke pas de données : il interroge des sources externes. La plus courante en MLOps est Prometheus, qui collecte et stocke les métriques de tes services. Grafana se branche dessus pour les afficher. Si tu n'as pas encore lu la fiche Prometheus, commence par là — Grafana sans source de données, c'est juste une UI vide.

À quoi ça sert

Tu as des métriques quelque part (Prometheus, une base SQL, des logs…). Tu veux les voir : courbes dans le temps, jauges, alertes quand un seuil est dépassé, le tout dans un tableau de bord partageable avec ton équipe.

Grafana fait exactement ça :

  • Dashboards — des pages web composées de panels (graphiques, jauges, tableaux). Chaque panel exécute une requête sur une source de données.
  • Sources de données — Prometheus, PostgreSQL, MySQL, Loki (logs), Tempo (traces), CSV, Google Sheets… plus de 150 connecteurs.
  • Alertes — règles déclenchées quand une métrique sort d'un seuil, avec notifications par e-mail, Slack, webhook, etc.
  • Variables — pour rendre un dashboard générique : un menu déroulant change le service ou l'environnement affiché.
En une phrase

Grafana = la fenêtre par laquelle tu regardes ce qui se passe dans tes systèmes, en temps réel et avec de jolis graphiques.

Un exemple d'usage

Reprenons l'API FastAPI de la fiche Prometheus, qui expose predictions_total et prediction_latency_seconds. Une fois Prometheus branché comme source de données dans Grafana, tu crées un dashboard avec trois panels :

  • Prédictions par seconde (graphique en courbe) : rate(predictions_total[1m])
  • Latence p95 (graphique en courbe) : histogram_quantile(0.95, rate(prediction_latency_seconds_bucket[5m]))
  • Total prédictions sur 1h (jauge / stat) : increase(predictions_total[1h])

Tu obtiens en quelques minutes une vue temps réel de ton service. Tu peux ensuite ajouter une alerte : « si la latence p95 dépasse 500 ms pendant 2 minutes, envoie un message Slack ».

How-to : installer et utiliser Grafana

  1. Lancer Grafana avec Docker

    Image officielle, un seul conteneur :

    bash
    docker run -d --name grafana \
      -p 3000:3000 \
      -v grafana-data:/var/lib/grafana \
      grafana/grafana

    Le volume grafana-data persiste tes dashboards et tes réglages : sans ça, tout disparaît au prochain docker rm.

    Ouvre http://localhost:3000. Login par défaut : admin / admin. Grafana te demande un nouveau mot de passe à la première connexion.

  2. Lancer Prometheus + Grafana ensemble

    En pratique tu lances toujours les deux. Voici un docker-compose.yml minimal qui les met sur le même réseau :

    yaml
    # docker-compose.yml
    services:
      prometheus:
        image: prom/prometheus
        ports: ["9090:9090"]
        volumes:
          - ./prometheus.yml:/etc/prometheus/prometheus.yml
    
      grafana:
        image: grafana/grafana
        ports: ["3000:3000"]
        volumes:
          - grafana-data:/var/lib/grafana
        depends_on: [prometheus]
    
    volumes:
      grafana-data:

    Lance avec docker compose up -d. Les deux conteneurs peuvent maintenant se parler par leur nom de service : http://prometheus:9090 depuis Grafana.

  3. Ajouter Prometheus comme source de données

    Dans l'UI Grafana, menu Connections → Data sources → Add data source. Choisis Prometheus, puis renseigne l'URL :

    • Si Grafana et Prometheus sont dans le même docker compose : http://prometheus:9090
    • Si Prometheus tourne sur l'hôte et Grafana en conteneur : http://host.docker.internal:9090
    • Tout en local sans Docker : http://localhost:9090

    Clique sur Save & test : tu dois voir « Successfully queried ».

  4. Créer ton premier dashboard

    Menu Dashboards → New → New dashboard → Add visualization. Choisis ta source Prometheus, puis tape une requête PromQL dans le champ Query, par exemple :

    promql
    rate(predictions_total[1m])

    Le graphique se met à jour en direct. Sur la droite, choisis le type de visualisation (Time series, Stat, Gauge, Bar chart…), donne un titre au panel, puis Apply. Répète pour chaque métrique que tu veux afficher, puis Save dashboard.

    Importer un dashboard existant

    grafana.com/dashboards contient des milliers de dashboards prêts à l'emploi. Repère un ID (par ex. 1860 pour Node Exporter Full) puis Dashboards → New → Import.

  5. Utiliser des variables

    Pour qu'un même dashboard serve plusieurs services ou environnements, ajoute des variables (icône Settings du dashboard → Variables). Exemple : une variable $service qui liste tous les job de Prometheus, puis dans tes requêtes :

    promql
    rate(http_requests_total{job="$service"}[5m])

    Un menu déroulant apparaît en haut du dashboard ; changer la valeur recharge tous les panels avec le nouveau filtre.

  6. Configurer une alerte

    Sur un panel, onglet AlertCreate alert rule. Tu définis une condition (« WHEN last() OF query A IS ABOVE 0.5 »), une durée (FOR 2m), et un contact point (e-mail, Slack, webhook). Grafana évalue la règle en boucle et déclenche la notif quand la condition tient.

  7. Versionner ses dashboards

    Les dashboards sont du JSON. Tu peux les exporter (Share → Export → Save to file) et les commiter dans ton repo. Mieux : Grafana sait charger des dashboards et data sources depuis des fichiers au démarrage (provisioning) — au lieu de cliquer dans l'UI, tu décris tout dans des YAML montés en volume. C'est l'approche infrastructure as code.

Aide-mémoire

bash (Docker)
docker run -d -p 3000:3000 -v grafana-data:/var/lib/grafana grafana/grafana

# Réinitialiser le mot de passe admin
docker exec -it grafana grafana-cli admin reset-admin-password nouveauMdp
yaml (provisioning d'une datasource)
# conf/provisioning/datasources/prometheus.yml
apiVersion: 1
datasources:
  - name: Prometheus
    type: prometheus
    access: proxy
    url: http://prometheus:9090
    isDefault: true
raccourcis UI
d s   # Save dashboard
d r   # Refresh
d k   # Kiosk mode (plein écran)
e     # Edit panel survolé
v     # Voir un panel en grand
?     # Liste de tous les raccourcis

Grafana et le reste de l'écosystème

  • Prometheus — la source de données la plus utilisée avec Grafana. Voir l'encart en haut de page.
  • Docker — Grafana se déploie en un conteneur, et se branche aux autres conteneurs via le réseau Docker.
  • Kubernetes — le chart Helm kube-prometheus-stack installe Prometheus + Grafana avec des dashboards K8s pré-configurés (CPU/RAM par pod, etc.).
  • SQLAlchemy — Grafana sait aussi parler directement à PostgreSQL ou MySQL. Pratique pour visualiser des données métier (commandes par jour, conversions…) sans passer par Prometheus.
  • MLflow — Grafana ne remplace pas l'UI MLflow (qui sert à comparer des entraînements), mais il peut afficher des métriques de production de ton modèle déployé : volume de prédictions, latence, taux d'erreur.
Cloud vs self-hosted

Grafana existe aussi en SaaS (Grafana Cloud, free tier généreux) si tu ne veux pas héberger toi-même. Pour le projet de fin de formation, une instance Docker locale ou dans le cluster Kubernetes suffit largement et fait plus pédagogique.

Pour aller plus loin