Surveiller ses applications avec Prometheus et Grafana
🎯 Objectifs
- Comprendre les 3 piliers de l'observabilité
- Collecter des métriques avec Prometheus
- Visualiser avec Grafana
- Configurer des alertes
- Centraliser les logs
📖 Prérequis
- Docker niveau intermédiaire
- Kubernetes niveau débutant (recommandé)
- Notions de réseau (HTTP, ports)
🤔 Pourquoi le Monitoring ?
💡 *"If you can't measure it, you can't improve it."* - Peter Drucker
Sans monitoring, vous êtes aveugle en production :
- Détecter les problèmes avant vos utilisateurs
- Comprendre les performances de vos applications
- Planifier la capacité (scaling)
- Diagnostiquer rapidement les incidents
📊 Les 3 Piliers de l'Observabilité
Métriques
Valeurs numériques mesurées dans le temps : CPU, RAM, latence, taux d'erreurs.
Logs
Événements textuels horodatés. Préférez les logs structurés (JSON).
Traces
Suivi d'une requête à travers plusieurs services (distributed tracing).
| Pilier | Exemple | Outil typique |
|---|---|---|
| Métriques | CPU à 85% | Prometheus |
| Logs | {"level":"error","msg":"timeout"} | Loki, ELK |
| Traces | Requête → API → DB → Cache | Jaeger, Zipkin |
🔥 Prometheus
Qu'est-ce que c'est ?
Système open-source de collecte de métriques et d'alerting. Prometheus tire (pull/scrape) les métriques depuis vos applications.
Architecture
Applications → /metrics endpoint
Prometheus → scrape toutes les X secondes
→ stocke en time-series DB
AlertManager → envoie des notificationsTypes de métriques
| Type | Usage | Exemple |
|---|---|---|
| Counter | Valeur croissante | Nombre total de requêtes |
| Gauge | Valeur variable | Température CPU |
| Histogram | Distribution | Latence des requêtes |
| Summary | Percentiles | Temps de réponse p95 |
PromQL - Requêtes essentielles
# Taux de requêtes par seconde (5 min)
rate(http_requests_total[5m])
# Latence moyenne
avg(http_request_duration_seconds)
# Taux d'erreurs (%)
sum(rate(http_requests_total{status=~"5.."}[5m]))
/ sum(rate(http_requests_total[5m])) * 100
# Percentile 95 de latence
histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))Démarrage rapide (Docker Compose)
# docker-compose.yml
services:
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml# prometheus.yml
scrape_configs:
- job_name: "mon-app"
static_configs:
- targets: ["app:8080"]📈 Grafana
Qu'est-ce que c'est ?
Plateforme de visualisation qui se connecte à Prometheus (et d'autres sources).
Fonctionnalités clés
- Panels : graphes, jauges, tableaux, heatmaps
- Variables : dashboards dynamiques (filtrer par environnement, service)
- Alertes : notifications directement depuis Grafana
- Import : dashboards communautaires prêts à l'emploi
Dashboards essentiels
| Dashboard | ID Grafana | Usage |
|---|---|---|
| Node Exporter Full | 1860 | Métriques système (CPU, RAM, disque) |
| Docker Monitoring | 893 | Conteneurs Docker |
| Kubernetes Cluster | 6417 | Cluster K8s |
💡 Importez un dashboard : Grafana → + → Import → entrez l'ID.
🚨 Alerting
AlertManager
Composant Prometheus qui gère les alertes : groupement, silencing, routage.
Exemple de règle d'alerte
groups:
- name: app-alerts
rules:
- alert: HighErrorRate
expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.1
for: 5m
labels:
severity: critical
annotations:
summary: "Taux d'erreurs élevé (> 10%)"Canaux de notification
| Canal | Usage |
|---|---|
| Slack | Alertes équipe |
| Notifications formelles | |
| PagerDuty | Astreintes (on-call) |
| Webhook | Intégrations custom |
⚠️ Évitez le alert fatigue : alertez uniquement sur ce qui nécessite une action humaine.
📝 Logs Centralisés
Pourquoi centraliser ?
Les conteneurs sont éphémères - quand un pod redémarre, les logs disparaissent.
Solutions
| Solution | Composants | Complexité |
|---|---|---|
| ELK Stack | Elasticsearch + Logstash + Kibana | Élevée |
| Loki + Grafana | Loki + Promtail + Grafana | Faible |
💡 Loki est le choix recommandé pour débuter : léger, intégré à Grafana, syntaxe similaire à PromQL.
Bonnes pratiques de logging
{
"timestamp": "2026-04-15T10:30:00Z",
"level": "error",
"service": "api-users",
"message": "Connection DB timeout",
"duration_ms": 5000,
"trace_id": "abc123"
}- ✅ Logs structurés (JSON)
- ✅ Inclure un
trace_idpour corréler - ✅ Niveaux cohérents : DEBUG, INFO, WARN, ERROR
- ❌ Ne loggez jamais de données sensibles (mots de passe, tokens)
✅ Bonnes Pratiques
Méthodes de monitoring
| Méthode | Cible | Métriques |
|---|---|---|
| USE | Infrastructure | Utilization, Saturation, Errors |
| RED | Services | Rate, Errors, Duration |
| 4 Golden Signals | Tout | Latence, Trafic, Erreurs, Saturation |
SLI / SLO / SLA
- SLI (Indicator) : métrique mesurée (ex: latence p99 = 200ms)
- SLO (Objective) : cible interne (ex: 99.9% de requêtes < 200ms)
- SLA (Agreement) : engagement contractuel avec pénalités
💡 Définissez vos SLOs avant de configurer vos alertes.
🔑 Points Clés
| Concept | À retenir |
|---|---|
| 3 Piliers | Métriques + Logs + Traces |
| Prometheus | Collecte de métriques (pull model) |
| Grafana | Visualisation et dashboards |
| AlertManager | Gestion et routage des alertes |
| Loki | Centralisation de logs légère |
| USE/RED | Méthodes de monitoring structurées |
📚 Ressources
🚀 Prochaines étapes
Vos applications sont surveillées. Gérez maintenant votre infrastructure as code :
- Infrastructure as Code : premiers pas avec Terraform - Découvrez l'Infrastructure as Code et créez vos premières ressources