Monitoring WordPress self-hosted – Prometheus, Grafana, Loki, scanner de vulnérabilités


Gérer plus d’une dizaine de sites WordPress dockerisés en production, c’est bien. Savoir ce qui se passe sur le serveur sans avoir à SSH dedans toutes les cinq minutes, c’est mieux. J’avais un angle mort : aucune visibilité en temps réel sur l’état de mes conteneurs, de mon infra, et de la sécurité des plugins installés chez mes clients.

J’ai soumis le problème à Claude Code. Ce qui suit est le résultat – et je vais être honnête sur qui a fait quoi.

Ce qui a été construit

Claude Code a conçu et implémenté l’ensemble de la solution en autonomie. J’ai suivi les instructions, poussé les commits, lancé les commandes suggérées. L’architecture, le code, les arbitrages techniques : tout vient de l’IA. Mon rôle : chef de projet et opérateur.

Deux composants principaux :

1. Le stack monitoring

Un Docker Compose complet avec :

  • Prometheus – collecte des métriques
  • cAdvisor – métriques des conteneurs Docker (CPU, mémoire, réseau)
  • Node Exporter – métriques système du serveur host
  • Loki + Promtail – agrégation et indexation des logs Docker
  • Grafana – dashboards et visualisation
  • Alertmanager – alerting vers Slack par sévérité
  • Pushgateway – point d’entrée pour les métriques poussées par des scripts externes

Déployé via Ansible, comme le reste de l’infra.

2. Le scanner de vulnérabilités WordPress

Un script Bash (scan.sh) qui tourne via cron à 3h du matin et qui :

  • Découvre automatiquement tous les conteneurs WordPress actifs via docker ps
  • Interroge WPVulnerability.net (gratuit) pour les plugins et thèmes publics
  • Interroge l’API WPScan (25 requêtes/jour en free tier) pour les plugins premium listés dans premium-slugs.txt
  • Ignore les thèmes et plugins custom via ignore-slugs.txt – pas question d’envoyer les noms de mes thèmes sur mesure à une API externe
  • Cache les réponses 12h pour préserver le quota WPScan
  • Pousse les métriques vers Pushgateway → Grafana
  • Envoie les alertes vers Alertmanager → Slack

Les bugs trouvés en prod

Trois bugs concrets découverts lors des premiers tests – tous corrigés par Claude Code en live.

Alerte ContainerHighMemory sur tous les conteneurs sans limite mémoire. Les conteneurs sans memory_limit défini retournent une limite à 0 – division par zéro dans le calcul du pourcentage, résultat +Inf%, alerte déclenchée sur tout le monde. Correction : ajout d’un filtre > 0 dans la règle Prometheus.

Port Pushgateway non exposé vers le host. Le script scan.sh tourne sur le host, pas dans un conteneur. Il ne pouvait pas atteindre le Pushgateway dont le port n’était pas mappé vers l’extérieur du réseau Docker. Une ligne dans le Docker Compose, le problème était réglé.

Bug de priorité cache/quota WPScan. Le quota WPScan était vérifié avant la lecture du cache – résultat : à quota épuisé, le cache était ignoré et aucune vulnérabilité n’était remontée, même pour les plugins déjà scannés. Correction de l’ordre des opérations : cache d’abord, quota ensuite.

Ce que ça change vraiment

Avant : je ne savais pas ce qui se passait sur le serveur sauf si quelque chose cassait ou si j’allais regarder manuellement. Maintenant : un dashboard Grafana ouvert sur mon téléphone, des alertes Slack si un conteneur sature sa mémoire ou si un plugin a une CVE connue.

Sur le rôle de Claude Code : honnêtement, je n’aurais pas monté ce stack en une session de travail sans lui. Pas parce que c’est techniquement inaccessible – Prometheus et Grafana, je connais – mais parce que l’assembler proprement, déboguer les règles d’alerting, écrire le script Bash avec la gestion du cache et du quota, déployer via Ansible : ça représente plusieurs jours de travail en solo. Claude Code l’a fait en quelques heures, en autonomie, avec des choix techniques cohérents.

Ce que ça change dans le workflow d’un freelance solo : la capacité à monter des outils internes complexes sans y passer une semaine. Pas « l’IA remplace le dev » – mais « l’IA permet au dev solo de se doter d’une infra qu’il n’aurait jamais eu le temps de construire autrement ».


Stack : Prometheus · Grafana · Loki · Promtail · cAdvisor · Node Exporter · Alertmanager · Pushgateway · Bash · Docker · Ansible · WPScan API · WPVulnerability.net