Ce guide vous accompagne pour installer Prometheus sur différentes plateformes. À la fin, vous aurez un serveur Prometheus fonctionnel qui scrappe ses propres métriques et celles d’un node_exporter — votre premier “vrai” target.
Prérequis
Section intitulée « Prérequis »| Plateforme | Prérequis |
|---|---|
| Linux | Ubuntu 22.04+ ou Rocky 9+, accès sudo |
| Docker | Docker Engine 24+ |
| Kubernetes | Cluster K8s 1.28+, Helm 3 |
Méthode d’installation
Section intitulée « Méthode d’installation »L’installation par binaire vous donne un contrôle total sur la configuration. C’est la méthode recommandée pour comprendre Prometheus en profondeur.
Arborescence standard
Section intitulée « Arborescence standard »On utilise les chemins attendus par les ops :
| Chemin | Usage |
|---|---|
/usr/local/bin/ | Binaires prometheus, promtool |
/etc/prometheus/ | Configuration |
/var/lib/prometheus/ | Données TSDB |
Créer l’utilisateur système
Section intitulée « Créer l’utilisateur système »Prometheus doit tourner avec un utilisateur dédié sans privilèges.
sudo useradd --no-create-home --shell /usr/sbin/nologin prometheusTélécharger et installer
Section intitulée « Télécharger et installer »-
Télécharger la dernière version
Récupérez le binaire depuis prometheus.io/download. Exemple avec la version 3.9.1 :
Fenêtre de terminal cd /tmpVERSION="3.9.1"wget https://github.com/prometheus/prometheus/releases/download/v${VERSION}/prometheus-${VERSION}.linux-amd64.tar.gzwget https://github.com/prometheus/prometheus/releases/download/v${VERSION}/sha256sums.txt -
Vérifier l’intégrité (obligatoire en prod)
Fenêtre de terminal grep "prometheus-${VERSION}.linux-amd64.tar.gz" sha256sums.txt | sha256sum -c -# Attendu : prometheus-3.9.1.linux-amd64.tar.gz: OK -
Extraire et installer
Fenêtre de terminal tar xvfz prometheus-${VERSION}.linux-amd64.tar.gzsudo cp prometheus-${VERSION}.linux-amd64/{prometheus,promtool} /usr/local/bin/sudo chown prometheus:prometheus /usr/local/bin/{prometheus,promtool} -
Créer les répertoires
Fenêtre de terminal sudo mkdir -p /etc/prometheus /var/lib/prometheussudo cp -r prometheus-${VERSION}.linux-amd64/{consoles,console_libraries} /etc/prometheus/sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
Configuration initiale
Section intitulée « Configuration initiale »Créez une configuration minimale. Prometheus se scrappe lui-même + node_exporter.
global: scrape_interval: 15s evaluation_interval: 15s
scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090']
- job_name: 'node' static_configs: - targets: ['localhost:9100']Service systemd (hardened)
Section intitulée « Service systemd (hardened) »Ce fichier de service inclut les directives de sécurité recommandées.
[Unit]Description=Prometheus MonitoringDocumentation=https://prometheus.io/docs/Wants=network-online.targetAfter=network-online.target
[Service]User=prometheusGroup=prometheusType=simple
# Sécurité : bind local si lifecycle activé (pas d'accès externe non authentifié)ExecStart=/usr/local/bin/prometheus \ --config.file=/etc/prometheus/prometheus.yml \ --storage.tsdb.path=/var/lib/prometheus \ --web.console.templates=/etc/prometheus/consoles \ --web.console.libraries=/etc/prometheus/console_libraries \ --web.listen-address=127.0.0.1:9090 \ --web.enable-lifecycle
ExecReload=/bin/kill -HUP $MAINPIDRestart=alwaysRestartSec=10
# Hardening systemdNoNewPrivileges=truePrivateTmp=trueProtectSystem=strictProtectHome=trueReadWritePaths=/var/lib/prometheus
[Install]WantedBy=multi-user.targetActivez et démarrez le service :
sudo systemctl daemon-reloadsudo systemctl enable prometheussudo systemctl start prometheusInstaller node_exporter (premier vrai target)
Section intitulée « Installer node_exporter (premier vrai target) »Pour que Prometheus scrappe des métriques système, installez node_exporter :
# Téléchargercd /tmpNODE_VERSION="1.9.0"wget https://github.com/prometheus/node_exporter/releases/download/v${NODE_VERSION}/node_exporter-${NODE_VERSION}.linux-amd64.tar.gz
# Installertar xvfz node_exporter-${NODE_VERSION}.linux-amd64.tar.gzsudo cp node_exporter-${NODE_VERSION}.linux-amd64/node_exporter /usr/local/bin/sudo useradd --no-create-home --shell /usr/sbin/nologin node_exporter[Unit]Description=Node ExporterWants=network-online.targetAfter=network-online.target
[Service]User=node_exporterGroup=node_exporterType=simpleExecStart=/usr/local/bin/node_exporterRestart=always
[Install]WantedBy=multi-user.targetsudo systemctl daemon-reloadsudo systemctl enable node_exportersudo systemctl start node_exporterVérification
Section intitulée « Vérification »-
Vérifier les services
Fenêtre de terminal sudo systemctl status prometheus node_exporterLes deux doivent être
Active: active (running). -
Accéder à l’interface web
Comme on bind sur
127.0.0.1, accédez localement ou via SSH tunnel :Fenêtre de terminal # Depuis une autre machinessh -L 9090:127.0.0.1:9090 user@serverOuvrez
http://localhost:9090dans votre navigateur. -
Tester une requête PromQL
Dans l’interface, tapez
upet cliquez Execute. Vous devez voir 2 séries :up{job="prometheus"} 1etup{job="node"} 1. -
Vérifier les targets
Allez dans Status → Targets. Les deux targets doivent être
UP.
Docker est idéal pour tester rapidement ou pour un environnement de développement.
Démarrage rapide (lab)
Section intitulée « Démarrage rapide (lab) »docker run -d \ --name prometheus \ -p 9090:9090 \ prom/prometheus:v3.9.1Stack complète avec node_exporter
Section intitulée « Stack complète avec node_exporter »Pour un setup réaliste avec un vrai target et le reload activé :
-
Créer la configuration
prometheus.yml global:scrape_interval: 15sscrape_configs:- job_name: 'prometheus'static_configs:- targets: ['prometheus:9090']- job_name: 'node'static_configs:- targets: ['node-exporter:9100'] -
Créer le docker-compose.yml
docker-compose.yml services:prometheus:image: prom/prometheus:v3.9.1container_name: prometheusports:- "9090:9090"volumes:- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro- prometheus-data:/prometheuscommand:- '--config.file=/etc/prometheus/prometheus.yml'- '--storage.tsdb.path=/prometheus'- '--web.enable-lifecycle'restart: unless-stoppednetworks:- monitoringnode-exporter:image: prom/node-exporter:v1.9.0container_name: node-exporterports:- "9100:9100"volumes:- /proc:/host/proc:ro- /sys:/host/sys:ro- /:/rootfs:rocommand:- '--path.procfs=/host/proc'- '--path.sysfs=/host/sys'- '--path.rootfs=/rootfs'- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'restart: unless-stoppednetworks:- monitoringvolumes:prometheus-data:networks:monitoring:driver: bridge -
Lancer la stack
Fenêtre de terminal docker compose up -d -
Vérifier
- Prometheus : http://localhost:9090
- Targets : http://localhost:9090/targets (2 targets UP)
- Requête :
node_cpu_seconds_totalpour voir les métriques CPU
Reload de configuration (Docker)
Section intitulée « Reload de configuration (Docker) »Avec --web.enable-lifecycle activé :
curl -X POST http://localhost:9090/-/reloadSur Kubernetes, utilisez le chart Helm kube-prometheus-stack qui installe Prometheus, Alertmanager, Grafana et les exporters en une seule commande.
-
Ajouter le repo Helm
Fenêtre de terminal helm repo add prometheus-community https://prometheus-community.github.io/helm-chartshelm repo update -
Installer la stack
Fenêtre de terminal helm install prometheus prometheus-community/kube-prometheus-stack \--namespace monitoring \--create-namespace \--version 81.5.0 -
Vérifier les pods
Fenêtre de terminal kubectl get pods -n monitoringAttendez que tous les pods soient
Running(peut prendre 2-3 minutes). -
Trouver le Service Prometheus (robuste)
Le nom du Service dépend du release name. Retrouvez-le dynamiquement :
Fenêtre de terminal kubectl get svc -n monitoring -l app.kubernetes.io/name=prometheus -
Accéder à Prometheus
Fenêtre de terminal # Récupérer le nom exact du ServiceSVC=$(kubectl get svc -n monitoring -l app.kubernetes.io/name=prometheus -o jsonpath='{.items[0].metadata.name}')# Port-forwardkubectl port-forward -n monitoring svc/$SVC 9090:9090Ouvrez
http://localhost:9090.
Vérification
Section intitulée « Vérification »Une fois connecté à l’interface Prometheus :
- Requête
up: vous devez voir de nombreuses séries (nodes, pods, services) - Targets : Status → Targets montre tous les ServiceMonitors actifs
- Métriques node :
node_cpu_seconds_totalfonctionne (node-exporter inclus)
Personnaliser l’installation
Section intitulée « Personnaliser l’installation »Créez un fichier values.yaml pour personnaliser :
prometheus: prometheusSpec: retention: 30d storageSpec: volumeClaimTemplate: spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 50Gi
alertmanager: alertmanagerSpec: storage: volumeClaimTemplate: spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 10Gi
grafana: adminPassword: "VotreMotDePasseSecurise"helm upgrade prometheus prometheus-community/kube-prometheus-stack \ -n monitoring \ -f values.yamlOptions de démarrage importantes
Section intitulée « Options de démarrage importantes »| Flag | Description | Valeur par défaut |
|---|---|---|
--config.file | Chemin du fichier de config | prometheus.yml |
--storage.tsdb.path | Répertoire de stockage | data/ |
--web.listen-address | Adresse d’écoute | 0.0.0.0:9090 |
--web.enable-lifecycle | Active /-/reload et /-/quit | false |
--web.enable-admin-api | Active l’API admin (snapshots, delete) | false |
Reload de configuration
Section intitulée « Reload de configuration »Prometheus peut recharger sa configuration sans redémarrage.
Via API (recommandé)
Section intitulée « Via API (recommandé) »Nécessite --web.enable-lifecycle :
curl -X POST http://localhost:9090/-/reloadVia signal
Section intitulée « Via signal »sudo kill -HUP $(pgrep prometheus)Vérifier la configuration avant reload
Section intitulée « Vérifier la configuration avant reload »promtool check config /etc/prometheus/prometheus.ymlDépannage installation
Section intitulée « Dépannage installation »| Symptôme | Cause probable | Solution |
|---|---|---|
| Service ne démarre pas | Permissions incorrectes | chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus |
| Port 9090 déjà utilisé | Autre service | --web.listen-address=:9091 |
| ”permission denied” sur data/ | SELinux | chcon -Rt svirt_sandbox_file_t /var/lib/prometheus |
| Pas de données | Config invalide | promtool check config prometheus.yml |
| Target node en DOWN | node_exporter non démarré | systemctl status node_exporter |
Logs à consulter :
# Linuxjournalctl -u prometheus -f
# Dockerdocker logs prometheus -f
# Kuberneteskubectl logs -n monitoring -l app.kubernetes.io/name=prometheusÀ retenir
Section intitulée « À retenir »- Versions : choisissez Latest (3.x) ou LTS selon votre stratégie
- Vérifier l’intégrité : SHA256 obligatoire en production
- Layout standard :
/etc/prometheus/(config),/var/lib/prometheus/(data) - Hardening systemd :
NoNewPrivileges,ProtectSystem=strict - Sécurité lifecycle : bind sur
127.0.0.1ou mettre un reverse proxy - Premier target : node_exporter pour voir des métriques réelles
- Docker : toujours pin la version (
v3.9.1, paslatest) - K8s : kube-prometheus-stack inclut tout (Prometheus, Grafana, exporters)