Prometheus
Prometheus est un système de supervision open source : il interroge vos services à intervalle régulier et stocke les métriques récupérées dans sa propre base de données de séries temporelles, interrogeable avec PromQL. Il ne fournit qu’un navigateur de requêtes minimal, pas de vrais tableaux de bord, ce qui explique pourquoi presque tous les déploiements auto-hébergés font tourner Grafana à côté plutôt qu’à sa place.
Licence : Licence Apache 2.0, confirmée directement depuis le fichier LICENSE du dépôt GitHub prometheus/prometheus, pas déduite d’un badge. Elle tient bon depuis le début : Prometheus n’a jamais changé de licence, et c’est un projet de la Cloud Native Computing Foundation plutôt qu’un logiciel détenu par une entreprise qui pourrait en décider autrement plus tard, contrairement à Grafana, passé à l’AGPLv3 en 2021.
En bref : Site officiel prometheus.io · GitHub prometheus/prometheus, plus de 64 000 étoiles · Image Docker prom/prometheus sur Docker Hub, plus d’1,9 milliard de pulls (aussi disponible sur Quay.io) · port par défaut 9090 · rétention par défaut 15 jours.
Ce que fait vraiment Prometheus
Prometheus est né comme outil interne chez SoundCloud en 2012, avant de devenir en 2016 le deuxième projet hébergé par la Cloud Native Computing Foundation, juste après Kubernetes. Le mécanisme central n’a pas changé depuis : à intervalle fixe, le serveur contacte en HTTP chaque cible définie dans sa configuration, récupère ses métriques, les étiquette avec des labels, puis les ajoute à une base de séries temporelles locale, sans base externe à faire tourner. Ce modèle par interrogation rend une cible morte évidente : si Prometheus ne la joint pas, elle apparaît down au lieu de simplement se taire.
Un déploiement complet, c’est en réalité plusieurs petits binaires : le serveur, des exporters comme node_exporter et cAdvisor qui traduisent les statistiques d’un hôte ou d’un conteneur en quelque chose de scrapable, et Alertmanager qui route les alertes. Rien n’est obligatoire au départ, un seul conteneur qui se scrape lui-même est un déploiement valide, mais la plupart des stacks homelab font tourner node_exporter et Alertmanager à côté quand même.
Installer Prometheus avec Docker
L’image officielle est prom/prometheus sur Docker Hub, celle que pointe la documentation d’installation de Prometheus, avec un miroir sur Quay.io. Un docker-compose avec un volume nommé pour le répertoire de données est le point de départ le plus pratique, le conteneur n’ayant rien qui vaille la peine d’être conservé sans lui.
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
volumes:
prometheus_data:
- Créez d’abord un fichier prometheus.yml dans le même répertoire (voir la configuration ci-dessous), puisqu’il est monté au démarrage, pas généré après coup.
- Enregistrez le fichier compose ci-dessus sous docker-compose.yml et lancez docker compose up -d.
- Ouvrez http://ip-de-votre-serveur:9090 et allez dans Status → Targets pour confirmer que Prometheus se scrape lui-même.
- Ajoutez de vraies cibles, node_exporter pour les métriques hôte ou cAdvisor pour les métriques de conteneurs, dans scrape_configs, puis redémarrez le conteneur pour appliquer le changement.
docker compose up -d
Notes de sécurité : Prometheus n’a aucune authentification, aucun compte utilisateur et aucun TLS activé par défaut, confirmé depuis la documentation de sécurité officielle de Prometheus, qui déconseille explicitement d’exposer ses endpoints HTTP sur l’internet public. N’importe qui capable d’atteindre le port 9090 peut lire toutes les métriques stockées. Placez-le derrière un reverse proxy comme Caddy s’il doit être joignable depuis l’extérieur de votre réseau, ou gardez-le totalement hors d’internet avec un outil comme Tailscale.
Configuration de base : scrape configs et PromQL
Tout ce que Prometheus scrape est défini dans un unique fichier YAML passé via –config.file. Une version minimale, qui scrape Prometheus lui-même plus un conteneur node_exporter, ressemble à ceci :
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
static_configs:
- targets: ['node-exporter:9100']
Chaque job_name regroupe un type de cible sous static_configs, ou un bloc de service discovery pour tout ce qui dépasse une simple liste d’hôtes fixe. Une fois les données collectées, PromQL transforme les compteurs bruts en quelque chose de lisible : rate(node_cpu_seconds_total{mode="idle"}[5m]) suit l’usage CPU en moyenne mobile sur cinq minutes. C’est un vrai langage de requête, avec sa propre syntaxe, plus proche d’un petit langage fonctionnel que de SQL, et c’est la partie qui prend le plus de temps à devenir naturelle.
Associer Prometheus à Grafana
Prometheus et Grafana sont si souvent packagés ensemble qu’on croit parfois, à tort, que choisir l’un revient à écarter l’autre. Ils ne se disputent pourtant pas le même rôle : Prometheus collecte, stocke et interroge les métriques ; Grafana s’y connecte comme source de données et transforme ces requêtes en tableaux de bord, avec sa propre couche d’alerting par-dessus. Notre fiche Grafana couvre le volet visualisation ; côté Prometheus, la seule configuration nécessaire consiste à ajouter http://prometheus:9090 comme source de données une fois les deux conteneurs sur le même réseau Docker.
Le navigateur d’expressions intégré à Prometheus suffit pour tester une requête pendant qu’on écrit une configuration de scraping, mais il n’a ni tableaux de bord sauvegardés ni interface d’alerting, ce qui est la vraie réponse à toute question « Prometheus ou Grafana » : ce n’est pas un choix entre les deux, seulement une question de savoir si on s’arrête au navigateur d’expressions ou si on ajoute Grafana par-dessus. cAdvisor est généralement la troisième pièce d’un homelab qui surveille des conteneurs Docker, exposant CPU, mémoire et réseau par conteneur de la même façon que node_exporter expose les statistiques de l’hôte, même si ces conteneurs tournent via Portainer.
Prometheus et ses alternatives
Prometheus n’est pas la seule option auto-hébergée pour collecter des métriques, et ce n’est pas toujours la bonne. Chacune mériterait sa propre fiche plutôt que quelques cellules de tableau, donc on reste bref ici :
| Prometheus | InfluxDB | VictoriaMetrics | Netdata | |
|---|---|---|---|---|
| Modèle de collecte | Pull, scrape les cibles | Push, données envoyées | Pull, ou remote-write depuis Prometheus | Push, agent, configuration quasi nulle |
| Langage de requête | PromQL | InfluxQL / Flux | Compatible PromQL | Graphiques intégrés, requêtes limitées |
| Tableaux de bord | Aucun intégré, s’associe à Grafana | Interface basique incluse | Aucun intégré, s’associe à Grafana | Temps réel, prêts à l’emploi, aucune configuration |
| Idéal pour | Métriques de service, alerting | Journalisation d’événements, séries IoT | Stockage longue durée, coût réduit | Supervision mono-hôte sans configuration |
Prometheus : avantages et inconvénients
- Gratuit et intégralement open source sous Apache-2.0, sans qu’une seule entreprise puisse en changer la licence plus tard
- Le scraping par interrogation rend une cible morte évidente, et en ajouter une nouvelle ne demande qu’un bloc YAML de plus
- PromQL est assez puissant pour de la vraie logique d’alerting, pas seulement des seuils statiques
- Livré comme un simple binaire statique ou un conteneur unique, sans base de données externe à installer d’abord
- Aucun tableau de bord ni interface d’alerting propre au-delà du navigateur d’expressions minimal, Grafana devient de fait indispensable
- Aucune authentification ni TLS par défaut, un reverse proxy ou un réseau privé s’impose pour l’exposer sans risque
- Le stockage local n’est pas clusterisé, monter en charge au-delà d’un seul nœud demande du sharding manuel ou un backend remote-write
- PromQL a une vraie courbe d’apprentissage avant que les scrape configs et les règles d’alerte deviennent naturelles
Matériel : l’usage de ressources de Prometheus dépend du nombre de séries temporelles stockées et de la fréquence de scraping, pas du trafic réseau brut ; sa propre documentation évalue le stockage local à environ 1 à 2 octets par échantillon. Un homelab qui scrape une poignée d’exporters toutes les 15 secondes tourne sans problème sur une petite VM avec 1 à 2 cœurs CPU et quelques gigas de RAM, même si ça grimpe vite avec des dizaines de cibles ou des intervalles beaucoup plus courts. Notre guide auto-hébergement pour monter votre premier homelab couvre le choix du matériel pour l’ensemble de la stack.
FAQ
Prometheus est-il gratuit ?
Oui, Apache-2.0, gratuit pour tout usage y compris commercial, sans palier payant puisqu’aucune entreprise unique ne possède le projet. Certains éditeurs vendent des services hébergés compatibles Prometheus, mais le projet central n’a rien à vendre.
Faut-il Grafana pour utiliser Prometheus ?
Non, mais presque tout le monde fait tourner les deux. Prometheus inclut un navigateur d’expressions minimal pour tester des requêtes PromQL, sans tableaux de bord persistants ni interface d’alerting. Grafana est le choix quasi universel pour la couche de visualisation que Prometheus ne fournit pas.
Combien de temps Prometheus conserve-t-il les données par défaut ?
15 jours, défini par le flag –storage.tsdb.retention.time, confirmé depuis la documentation de stockage officielle de Prometheus. Facile à étendre pour un homelab avec de la place sur disque, ou à plafonner par taille avec –storage.tsdb.retention.size à la place.
Prometheus peut-il superviser des conteneurs Docker directement ?
Pas tout seul, il a besoin d’un exporter entre les deux. cAdvisor expose les métriques CPU, mémoire et réseau par conteneur que Prometheus peut scraper, et node_exporter fait de même pour l’hôte. Les deux tournent comme leurs propres conteneurs à côté de Prometheus.
Prometheus est-il difficile à mettre en place ?
Faire tourner le conteneur est presque trivial, un fichier YAML et docker compose up. Ce qui prend plus de temps, c’est d’écrire des scrape configs pour plus de deux ou trois cibles, d’apprendre assez de PromQL pour une alerte utile, puis d’ajouter Alertmanager tôt ou tard, ce qui explique notre note Medium plutôt qu’Easy, comme pour Grafana.
Prometheus est le moteur de collecte sur lequel reposent discrètement la plupart des stacks de supervision auto-hébergées, même quand c’est Grafana qui récolte les mérites du tableau de bord que tout le monde regarde. Notre guide auto-hébergement pour monter votre premier homelab couvre les bases Docker sur lesquelles il tourne, et Uptime Kuma mérite de tourner à côté pour la question plus simple que Prometheus n’est pas conçu pour trancher : est-ce que ça tourne, là, maintenant. La catégorie Monitoring complète le reste de l’outillage présenté ici.