Le problème#
Après avoir passé des mois à exécuter des conteneurs sur mon serveur domestique, j’en ai eu assez de découvrir des problèmes quand les choses étaient déjà cassées. Un conteneur consommant toute la mémoire. Un volume plein sans avertissement. J’avais besoin d’une vraie visibilité sur ce qui se passait dans mon infrastructure.
J’ai décidé de mettre en place une stack de monitoring avec Prometheus et Grafana. Je documente ici exactement comment j’ai procédé.
Architecture choisie#
- Prometheus : collecte les métriques de Docker
- cAdvisor : expose les métriques des conteneurs
- Grafana : visualise tout dans les dashboards
- Alertmanager : notifie quand quelque chose échoue
Étape 1 : Docker Compose avec la stack complète#
J’ai créé un fichier docker-compose.yml qui démarre le tout :
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- ./alertas.yml:/etc/prometheus/alertas.yml
- prometheus_data:/prometheus
ports:
- "9090:9090"
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
networks:
- monitoring
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
container_name: cadvisor
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
ports:
- "8080:8080"
networks:
- monitoring
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
networks:
- monitoring
alertmanager:
image: prom/alertmanager:latest
container_name: alertmanager
volumes:
- ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
- alertmanager_data:/alertmanager
ports:
- "9093:9093"
networks:
- monitoring
volumes:
prometheus_data:
grafana_data:
alertmanager_data:
networks:
monitoring:
driver: bridgeÉtape 2 : Configurer Prometheus#
Fichier prometheus.yml :
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
- alertmanager:9093
rule_files:
- '/etc/prometheus/alertas.yml'
scrape_configs:
- job_name: 'cadvisor'
static_configs:
- targets: ['cadvisor:8080']
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']Étape 3 : Définir les alertes#
Fichier alertas.yml :
groups:
- name: docker_alerts
interval: 10s
rules:
- alert: HighCPUUsage
expr: 'rate(container_cpu_usage_seconds_total[5m]) > 0.8'
for: 2m
annotations:
summary: "CPU alta en contenedor {{ $labels.name }}"
description: "{{ $labels.name }} está usando {{ $value | humanizePercentage }} de CPU"
- alert: HighMemoryUsage
expr: 'container_memory_usage_bytes / container_spec_memory_limit_bytes > 0.85'
for: 2m
annotations:
summary: "Memoria alta en {{ $labels.name }}"
description: "Uso de memoria: {{ $value | humanizePercentage }}"
- alert: DiskSpaceRunningOut
expr: 'node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"} < 0.1'
for: 5m
annotations:
summary: "Espacio en disco por debajo del 10%"Étape 4 : Configurer Alertmanager#
Fichier alertmanager.yml :
global:
resolve_timeout: 5m
route:
receiver: 'console'
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receivers:
- name: 'console'
webhook_configs:
- url: 'http://localhost:5001/'Étape 5 : Démarrer et vérifier#
docker-compose up -dAccès :
- Prometheus :
http://localhost:9090 - Grafana :
http://localhost:3000 - cAdvisor :
http://localhost:8080
Étape 6 : Créer des dashboards dans Grafana#
Dans Grafana j’ai importé le dashboard public 893 (Docker and Host Monitoring) qui fonctionne directement avec cAdvisor.
Résultat#
J’ai maintenant une visibilité complète. Je reçois des alertes quand :
- Un conteneur consomme plus de 80% de CPU pendant 2 minutes
- La mémoire dépasse 85% de la limite
- Le disque tombe en dessous de 10%
La setup complète occupe moins de 500MB de RAM au repos et m’a déjà évité plusieurs frayeurs. Ça en vaut la peine.
Équipement recommandé#
- Raspberry Pi 3 B+ — Serveur léger à faible consommation pour commencer ton homelab
- Raspberry Pi 4 (4GB) — La base parfaite pour homelab, Docker et monitoring
Liens d’affiliation. Aucun coût supplémentaire pour toi.