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.
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
- Créez les deux fichiers ci-dessus dans un même dossier.
- Lancez la pile :
docker compose up -d. - Explorez Prometheus :
- Ouvrez
http://localhost:9090dans votre navigateur. - Dans le champ d’expression, tapez
upet cliquez sur “Execute”. Vous devriez voir que la cibleprometheusest bien “up” (valeur 1).
- Ouvrez
- Explorez Grafana :
- Ouvrez
http://localhost:3000. Le login par défaut estadmin/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étriqueupen la sélectionnant dans le “Metrics browser”.
- Ouvrez
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
-
Lancez la pile :
- Suivez les instructions ci-dessus pour lancer Prometheus et Grafana localement.
-
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.
-
Explorez PromQL :
- Dans l’interface de Prometheus, essayez d’autres métriques qui sont disponibles (commençant par
promhttp_ouprometheus_). - Essayez une requête qui calcule un taux, par exemple :
rate(prometheus_http_requests_total[5m]).
- Dans l’interface de Prometheus, essayez d’autres métriques qui sont disponibles (commençant par