Retour au cours

prometheus et grafana : surveillance et visualisation

Objectifs

  • Comprendre le rôle de Prometheus pour la collecte et le stockage des métriques.
  • Comprendre le rôle de Grafana pour la visualisation et la création de dashboards.
  • Découvrir le modèle “pull” de Prometheus.
  • Exécuter une pile de monitoring de base avec Docker Compose.

La pile de monitoring standard

Dans l’écosystème Cloud Native, la combinaison de Prometheus et Grafana est devenue la norme pour la surveillance des métriques.

Pile de Monitoring

Applications et Serveurs

pull (scrape)

pull

query

envoie alertes

App 1

(expose /metrics)

Serveur Linux

avec Node Exporter

Prometheus

(Base de données temporelle)

Grafana

(Visualisation)

Alertmanager

(Gestion des alertes)

Prometheus : Le collecteur de métriques

Prometheus est une base de données de séries temporelles (time-series database) conçue pour être fiable et efficace. Son rôle est de collecter et de stocker des métriques.

  • Modèle “Pull” : Prometheus est proactif. Il contacte périodiquement des “cibles” (vos applications, des serveurs) sur une URL spécifique (un “endpoint”, généralement /metrics) pour “tirer” (pull) les métriques qu’elles exposent.
  • PromQL : Il dispose d’un langage de requêtes très puissant, PromQL, qui permet de sélectionner, filtrer et agréger les données temporelles.
  • Alertmanager : Prometheus ne gère pas les notifications lui-même. Il applique des règles d’alerte, et si une alerte se déclenche, il l’envoie à un composant séparé, Alertmanager, qui gère le dédoublonnage, le groupage et l’envoi vers Slack, PagerDuty, etc.

Grafana : Le créateur de dashboards

Grafana est l’outil de visualisation de référence. Son seul but est de créer des tableaux de bord esthétiques et interactifs.

  • Il se connecte à une ou plusieurs sources de données (Prometheus, mais aussi des bases SQL, des services cloud…).
  • Il utilise le langage de requête de la source de données (PromQL pour Prometheus) pour récupérer les données.
  • Il offre une grande variété de panneaux pour afficher les données : graphiques, jauges, tableaux, cartes…

Mettre en place une pile locale avec Docker Compose

Voici comment lancer une pile Prometheus + Grafana sur votre machine.

Fichier prometheus.yml (configuration de Prometheus) :

# prometheus.yml
global:
  scrape_interval: 15s # Collecter les métriques toutes les 15 secondes

# Liste des jobs de scrape
scrape_configs:
  # Le premier job: scraper Prometheus lui-même
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

Fichier docker-compose.yml :

services:
  prometheus:
    image: prom/prometheus:v2.45.0
    ports:
      - "9090:9090"
    # On monte notre fichier de configuration dans le conteneur
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
  
  grafana:
    image: grafana/grafana:9.5.3
    ports:
      - "3000:3000"

Lancer et explorer

  1. Créez les deux fichiers ci-dessus dans un même dossier.
  2. Lancez la pile : docker compose up -d.
  3. Explorez Prometheus :
    • Ouvrez http://localhost:9090 dans votre navigateur.
    • Dans le champ d’expression, tapez up et cliquez sur “Execute”. Vous devriez voir que la cible prometheus est bien “up” (valeur 1).
  4. Explorez Grafana :
    • Ouvrez http://localhost:3000. Le login par défaut est admin/admin.
    • Allez dans Connections > Data sources > Add data source.
    • Choisissez “Prometheus”.
    • Pour l’URL, entrez http://prometheus:9090 (Grafana peut utiliser le nom du service Docker Compose pour communiquer).
    • Cliquez sur “Save & test”.
    • Allez dans Dashboards > New dashboard, ajoutez un panel, et essayez de visualiser la métrique up en la sélectionnant dans le “Metrics browser”.

Bonnes pratiques

  • Utilisez des “Exportateurs” : Pour les applications qui n’exposent pas nativement de métriques au format Prometheus (comme une base de données PostgreSQL ou un serveur Linux), on utilise des petits programmes appelés “exportateurs” (postgres-exporter, node-exporter) qui font la traduction.
  • Versionnez votre configuration : Vos fichiers prometheus.yml, vos règles d’alerte et la configuration de vos dashboards doivent être stockés dans Git (Infrastructure as Code).
  • Ne réinventez pas la roue : Il existe des milliers de dashboards Grafana partagés par la communauté pour presque toutes les applications populaires.

Exercices

  1. Lancez la pile :

    • Suivez les instructions ci-dessus pour lancer Prometheus et Grafana localement.
  2. Créez un dashboard simple :

    • Connectez-vous à Grafana et ajoutez la source de données Prometheus.
    • Créez un nouveau dashboard.
    • Ajoutez un panneau de type “Stat” ou “Gauge” et utilisez la requête PromQL up{job="prometheus"} pour afficher le statut de la cible Prometheus.
  3. Explorez PromQL :

    • Dans l’interface de Prometheus, essayez d’autres métriques qui sont disponibles (commençant par promhttp_ ou prometheus_).
    • Essayez une requête qui calcule un taux, par exemple : rate(prometheus_http_requests_total[5m]).