J’ai choisi Grafana et Prometheus pour surveiller l’état de mes instances sur aws.
Prometheus collecte les données et Grafana a pour rôle d’afficher.
Les métriques sont présentées sous forme de tableaux de bord, cela permet de surveiller l’état des serveurs, conteneurs et applications et de centraliser les données de monitoring.
1. Collecte des métriques sur AWS (Les Agents)
J’utilise 2 agents qui sont installés par ansible via le playbook sur l’instance EC2
- Node Exporter collecte les métriques systèmes, il surveille le CPU, la RAM, le disque et le réseau de l’instance EC2. 9100 est le port standard de Prometheus Node Exporter.
- cAdvisor surveille les conteneurs Kubernetes, c’est-à-dire la consommation des conteneurs et les ressources des pods. J’utilise ici le port 8081 car le port officiel de cAdvisor 8080 est déjà occupé par k3s
- Le serveur Prometheus (mon conteneur Docker sur ma VM) interroge l’instance WordPress via un flux HTTP privé (Port 9100) de VPC à VPC (ou de sous-réseau à sous-réseau).
2. Le Pipeline Réseau et l’Architecture de Transport
Le monitoring repose sur un pipeline sécurisé traversant un tunnel réseau sans exposition de ports sur l’Internet public :
- Il va chercher la source (sur AWS) : Le script se connecte à l’IP privée de mon instance EC2 et écoute ce qui sort des ports 9100 (Node Exporter) et 8081 (cAdvisor).
- Il fait traverser le tunnel : Il fait passer ces données à travers le tunnel SSH pour les ramener chez toi, en toute sécurité, sans les exposer sur Internet. Il utilise le endpoint EICE aws.
- Il les dépose chez toi (Local) : Il redirige et « recopie » ces flux vers l’hôte local de monitoring (ta VM de gestion / ton PC) sur les ports 19100 et 18081.
- Passerelle 4G et IP Fixe : Ma VM Linux de gestion possède une IP privée fixe (192.168.100.10) configurée via un réseau NAT interne sur mon hôte Windows. La connexion internet est assurée par un partage de connexion 4G mobile, ce qui sécurise et facilite les flux sortants vers les API d’AWS.
Procédure de Monitoring au Quotidien
1.1. Démarrer le tunnel de sécurité :Depuis ton PC.
Avant de toucher à Docker, lance ton script pour établir la liaison sécurisée avec AWS :
Bash
./tunnel.sh
Attends de voir s’afficher le message Warning: Permanently added... qui confirme que les ports 19100 et 18081 sont ouverts sur ton PC.
2.2. Lancer la stack de Monitoring Docker :Prometheus / Grafana.
Démarre tes conteneurs locaux. Prometheus va immédiatement s’associer à host.docker.internal et commencer à collecter les métriques système et de conteneurs à travers le tunnel EICE :
Bash
docker compose up -d
3.3. Visualiser les données :Navigateur Web.
Ouvre tes outils locaux pour valider les remontées :
- Prometheus : http://192.168.100.10:9091/targets (pour vérifier le statut
UP). - Grafana : http://192.168.100.10:3000 (pour admirer tes graphiques en temps réel).
- http://192.168.100.10:3000/dashboards
4.4. Nettoyage en fin de session :Fermeture sécurisée.
Une fois que tu as fini de travailler, coupe proprement tes conteneurs et détruis le tunnel d’arrière-plan pour libérer tes ports locaux :
Bash
docker compose down
pkill -f "aws ec2-instance-connect open-tunnel"
💡 Pourquoi préférer le conteneur Docker plutôt qu’une installation locale ?
- Isolation complète : Tu n’as pas besoin d’installer, configurer et surcharger ton système d’exploitation hôte avec les démons Prometheus ou Grafana.
- Portabilité : Si tu changes de machine de dev, il te suffit d’installer Docker et de cloner ton projet pour que tout refonctionne instantanément, sans réinstallation fastidieuse.
- Mises à jour simplifiées : Pour changer de version de Prometheus, tu as juste un numéro de tag à modifier dans ton fichier Docker.