DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesSurveiller ses applications avec Prometheus et Grafana06 - Projet Capstone : Mettre en place un stack de monitoring complet avec Prometheus et Grafana

Détails

  • 1h
  • Avancé

Objectifs

  • Configurer Prometheus pour scraper des métriques applicatives
  • Écrire des requêtes PromQL pour analyser les données
  • Créer un dashboard Grafana avec des panels pertinents
  • Configurer des règles d'alerting et les router vers AlertManager
  • Centraliser les logs avec Loki
Module Surveiller ses applications avec Prometheus et Grafana

Exercice 06 : Projet Capstone - Stack de Monitoring Complet avec Prometheus et Grafana

🎯 Objectifs

À la fin de cet exercice, vous serez capable de :

  • ✅ Déployer Prometheus et Grafana avec Docker Compose
  • ✅ Configurer le scraping de métriques dans prometheus.yml
  • ✅ Écrire des requêtes PromQL de base et avancées
  • ✅ Créer un dashboard Grafana avec des panels de métriques
  • ✅ Configurer des règles d'alerting et AlertManager

Durée estimée : 1h

Difficulté : ⭐⭐⭐⭐☆ (Avancé)

Prérequis :

  • Docker et Docker Compose installés
  • Module Monitoring complété (Prometheus, Grafana, alerting, logs)

📖 Contexte

Votre équipe a déployé plusieurs applications et n'a aucune visibilité sur leur état de santé. Vous allez mettre en place le stack d'observabilité complet : Prometheus pour les métriques, Grafana pour la visualisation, AlertManager pour les alertes, et Node Exporter pour les métriques système.


📋 Énoncé

Déployez une stack de monitoring complète avec Prometheus + Grafana + AlertManager + Node Exporter, créez un dashboard, et configurez des alertes.


🧭 Déroulement de l'exercice

Tâche 1 : Déployer la stack avec Docker Compose

Créez un docker-compose.yml pour déployer les services suivants :

  • Prometheus (port 9090) avec un volume pour les données et la config
  • Grafana (port 3000) avec un volume pour la persistance
  • Node Exporter (port 9100) pour les métriques système de l'hôte
  • AlertManager (port 9093) pour le routage des alertes

Indice : Node Exporter a besoin d'accéder aux métriques de l'hôte via des mounts : /proc, /sys, et / en lecture seule. --path.procfs=/host/proc --path.sysfs=/host/sys --collector.filesystem.mount-points-exclude=...

Vérification : docker compose up -d. curl http://localhost:9090/-/healthy retourne Prometheus Server is Healthy. curl http://localhost:9100/metrics | head -20 affiche des métriques.


Tâche 2 : Configurer prometheus.yml

Créez prometheus.yml avec :

  • global.scrape_interval: 15s
  • Un scrape job prometheus (self-monitoring)
  • Un scrape job node pointant vers node-exporter:9100
  • Un lien vers les règles d'alerting alerting_rules.yml

Indice :

`yaml

global:

scrape_interval: 15s

evaluation_interval: 15s

>

rule_files:

- "alerting_rules.yml"

>

alerting:

alertmanagers:

- static_configs:

- targets: ["alertmanager:9093"]

>

scrape_configs:

- job_name: prometheus

static_configs:

- targets: ["localhost:9090"]

- job_name: node

static_configs:

- targets: ["node-exporter:9100"]

`

Vérification : Dans Prometheus UI (http://localhost:9090) → Status → Targets, les 2 targets sont UP.


Tâche 3 : Écrire des requêtes PromQL

Dans l'interface Prometheus (http://localhost:9090), écrivez et exécutez les 5 requêtes suivantes :

  1. CPU usage (%) : 100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
  2. RAM utilisée (GB) : (node_memory_MemTotal_bytes - node_memory_MemFree_bytes - node_memory_Cached_bytes) / 1024^3
  3. Disque utilisé (%) : 100 - ((node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100)
  4. Uptime système (heures) : node_time_seconds - node_boot_time_seconds) / 3600
  5. Nombre de goroutines Prometheus : go_goroutines{job="prometheus"}

Indice : irate() calcule le taux instantané. avg() agrège sur toutes les instances. Les accolades {} filtrent par label. [5m] est la fenêtre de temps.

Vérification : Les 5 requêtes retournent des valeurs numériques sans erreur dans Prometheus.


Tâche 4 : Créer un dashboard Grafana

Connectez-vous à Grafana (http://localhost:3000, admin/admin). Créez un nouveau dashboard Monitoring Système avec 4 panels :

  1. Gauge : Utilisation CPU en % (query de la tâche 3)
  2. Gauge : Utilisation RAM en %
  3. Time series : Évolution CPU sur 1 heure
  4. Stat : Uptime du système

Indice : Dashboard → New → Add panel. Sélectionnez la source Prometheus. Collez la requête PromQL. Le type de visualisation se choisit dans la colonne de droite. Sauvegardez le dashboard avec Ctrl+S.

Vérification : Le dashboard Monitoring Système affiche 4 panels avec des données en temps réel.


Tâche 5 : Créer des règles d'alerting

Créez le fichier alerting_rules.yml avec 2 règles :

  1. HighCPU : alerte si CPU > 80% pendant 5 minutes
  2. LowDiskSpace : alerte si espace disque disponible < 10%

Indice :

`yaml

groups:

- name: system_alerts

rules:

- alert: HighCPU

expr: 100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80

for: 5m

labels:

severity: warning

annotations:

summary: "CPU élevé sur {{ $labels.instance }}"

description: "CPU à {{ $value | printf \"%.1f\" }}%"

`

for: 5m attend 5 minutes de condition vraie avant de déclencher l'alerte.

Vérification : Dans Prometheus → Alerts, les 2 règles apparaissent en état Inactive (conditions non atteintes).


Tâche 6 : Configurer AlertManager

Créez alertmanager.yml avec une route de base qui envoie toutes les alertes vers un receiver default. Le receiver simule une notification (pas besoin d'un vrai Slack/email pour cet exercice).

Indice :

`yaml

route:

receiver: default

group_by: [alertname]

group_wait: 10s

group_interval: 5m

repeat_interval: 1h

>

receivers:

- name: default

webhook_configs:

- url: 'http://localhost:5001/webhook'

send_resolved: true

`

Sans webhook réel, AlertManager logge les notifications. docker compose logs alertmanager montre les alertes déclenchées.

Vérification : curl http://localhost:9093/api/v1/status retourne les informations d'AlertManager. Dans Prometheus → Alerts, les alertes sont bien connectées à AlertManager.


🗂️ Mini-Projet : Stack monitoring complète

Arborescence du projet :

monitoring-stack/
├── docker-compose.yml
├── prometheus.yml
├── alerting_rules.yml
└── alertmanager.yml

Tests de validation :

bash
# Démarrer la stack
docker compose up -d

# Attendre le démarrage
sleep 10

# Vérifier les health checks
curl -s http://localhost:9090/-/healthy
curl -s http://localhost:9093/-/healthy
curl -s http://localhost:9100/metrics | grep "node_cpu_seconds_total" | head -3

# Vérifier les targets Prometheus
curl -s http://localhost:9090/api/v1/targets | python3 -m json.tool | grep '"health"'

# Tester une requête PromQL via l'API
curl -s "http://localhost:9090/api/v1/query?query=up" | python3 -m json.tool

# Voir les alertes configurées
curl -s http://localhost:9090/api/v1/rules | python3 -m json.tool

# Grafana accessible
curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/login

Checkpoints de validation :

  • Tous les services sont running (docker compose ps)
  • Prometheus Targets : node et prometheus sont UP
  • Les 5 requêtes PromQL retournent des valeurs
  • Le dashboard Grafana affiche 4 panels avec des données
  • Les 2 règles d'alerting sont visibles dans Prometheus → Alerts
  • AlertManager répond sur http://localhost:9093

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🧭 Déroulement de l'exercice
  • Tâche 1 : Déployer la stack avec Docker Compose
  • Tâche 2 : Configurer prometheus.yml
  • Tâche 3 : Écrire des requêtes PromQL
  • Tâche 4 : Créer un dashboard Grafana
  • Tâche 5 : Créer des règles d'alerting
  • Tâche 6 : Configurer AlertManager
  • 🗂️ Mini-Projet : Stack monitoring complète