Exercice 03 : Créer des dashboards avec Grafana
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Lancer Grafana avec Docker et accéder à l'interface web
- ✅ Ajouter Prometheus comme datasource
- ✅ Créer un dashboard vide et y ajouter des panels
- ✅ Configurer des panels Time series, Gauge et Stat
- ✅ Créer une variable de template pour filtrer dynamiquement
Durée estimée : 25 minutes
Difficulté : ⭐⭐⭐☆☆ (Intermédiaire)
Prérequis : Exercices 01 et 02 complétés, Prometheus en cours d'exécution
📖 Contexte
Grafana est la solution de visualisation de référence pour Prometheus. Il transforme des requêtes PromQL en graphiques interactifs, tableaux de bord et alertes visuelles. Un bon dashboard Grafana permet de diagnostiquer une anomalie en quelques secondes.
📋 Énoncé
Déployez Grafana, connectez-le à Prometheus, et créez un dashboard de surveillance avec 4 panels couvrant les métriques système essentielles.
🧭 Déroulement de l'exercice
Tâche 1 : Lancer Grafana avec Docker
Lancez Grafana sur le port 3000. Configurez le mot de passe admin via des variables d'environnement.
Indice :
`bashdocker run -d \
--name grafana \
-p 3000:3000 \
-e GF_SECURITY_ADMIN_PASSWORD=admin \
-v grafana-data:/var/lib/grafana \
grafana/grafana-oss
`
Vérification : curl -s http://localhost:3000/api/health | grep ok retourne "database": "ok". Connectez-vous sur http://localhost:3000 avec admin/admin.
Tâche 2 : Ajouter Prometheus comme datasource
Dans Grafana : Connections → Data sources → Add new data source → Prometheus. URL : http://host.docker.internal:9090. Cliquez sur Save & Test.
Indice : Si Prometheus tourne aussi dans Docker sur le même réseau, utilisez le nom du service comme host. Si c'est sur la machine hôte, utilisez
http://host.docker.internal:9090(Linux : ajoutez--add-host=host.docker.internal:host-gatewayaudocker run).
Vérification : Le message "Successfully queried the Prometheus API" s'affiche en vert.
Tâche 3 : Créer un dashboard et un panel Time series
Allez dans Dashboards → New → New Dashboard → Add visualization. Sélectionnez Prometheus comme datasource. Entrez la requête go_goroutines{job="prometheus"}. Nommez le panel "Goroutines Prometheus". Sauvegardez le dashboard sous le nom "Monitoring Prometheus".
Indice : Dans l'éditeur de panel, l'onglet Query permet d'écrire du PromQL. L'onglet Panel options (à droite) permet de modifier le titre, l'unité et le type de visualisation. Choisissez
Time seriespour voir l'évolution.
Vérification : Le panel affiche une courbe avec l'évolution du nombre de goroutines dans le temps.
Tâche 4 : Ajouter des panels Gauge et Stat
Ajoutez 2 nouveaux panels au dashboard :
- Gauge - "Mémoire Prometheus (MB)" :
`
process_resident_memory_bytes{job="prometheus"} / 1024 / 1024
`
Unité : MiB - Min : 0, Max : 500
- Stat - "Targets actives" :
`
count(up == 1)
`
Réduction : Last, Couleur : green si > 0
Indice : Le type de panel se choisit dans la liste déroulante en haut à droite de l'éditeur. Pour le Gauge, configurez les seuils dans Thresholds : vert < 200, orange < 400, rouge sinon.
Vérification : Le Gauge affiche la mémoire avec une jauge colorée. Le Stat affiche le nombre de targets en gros chiffre vert.
Tâche 5 : Créer une variable de template
Dans les Settings du dashboard → Variables → Add variable :
- Type :
Query - Nom :
job - Query :
label_values(up, job) - Label :
Job
Utilisez la variable dans un panel : up{job="$job"}.
Indice : Après avoir créé la variable, un sélecteur apparaît en haut du dashboard. Chaque panel qui utilise
$jobse filtre automatiquement selon la sélection.
Vérification : Le sélecteur job apparaît en haut. Changer la valeur filtre les panels qui utilisent $job.
🗂️ Mini-Projet
Créez un docker-compose.yml qui lance Prometheus + Grafana ensemble et automatise l'ajout de la datasource via le mécanisme de provisioning.
version: "3.8"
services:
prometheus:
image: prom/prometheus
ports: ["9090:9090"]
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
grafana:
image: grafana/grafana-oss
ports: ["3000:3000"]
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
volumes:
- grafana-data:/var/lib/grafana
- ./grafana/provisioning:/etc/grafana/provisioning
volumes:
grafana-data:Créez grafana/provisioning/datasources/prometheus.yml :
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
url: http://prometheus:9090
isDefault: trueCheckpoints :
docker compose up -ddémarre les 2 services- La datasource Prometheus est automatiquement configurée
- Le dashboard est accessible et affiche 3 panels
- La variable de template
$jobfiltre les panels