Aller au contenu
Outils medium

Installation de Prometheus

11 min de lecture

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.

PlateformePrérequis
LinuxUbuntu 22.04+ ou Rocky 9+, accès sudo
DockerDocker Engine 24+
KubernetesCluster K8s 1.28+, Helm 3

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.

On utilise les chemins attendus par les ops :

CheminUsage
/usr/local/bin/Binaires prometheus, promtool
/etc/prometheus/Configuration
/var/lib/prometheus/Données TSDB

Prometheus doit tourner avec un utilisateur dédié sans privilèges.

Fenêtre de terminal
sudo useradd --no-create-home --shell /usr/sbin/nologin prometheus
  1. 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 /tmp
    VERSION="3.9.1"
    wget https://github.com/prometheus/prometheus/releases/download/v${VERSION}/prometheus-${VERSION}.linux-amd64.tar.gz
    wget https://github.com/prometheus/prometheus/releases/download/v${VERSION}/sha256sums.txt
  2. 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
  3. Extraire et installer

    Fenêtre de terminal
    tar xvfz prometheus-${VERSION}.linux-amd64.tar.gz
    sudo cp prometheus-${VERSION}.linux-amd64/{prometheus,promtool} /usr/local/bin/
    sudo chown prometheus:prometheus /usr/local/bin/{prometheus,promtool}
  4. Créer les répertoires

    Fenêtre de terminal
    sudo mkdir -p /etc/prometheus /var/lib/prometheus
    sudo cp -r prometheus-${VERSION}.linux-amd64/{consoles,console_libraries} /etc/prometheus/
    sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus

Créez une configuration minimale. Prometheus se scrappe lui-même + node_exporter.

/etc/prometheus/prometheus.yml
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']

Ce fichier de service inclut les directives de sécurité recommandées.

/etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Monitoring
Documentation=https://prometheus.io/docs/
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=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 $MAINPID
Restart=always
RestartSec=10
# Hardening systemd
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/lib/prometheus
[Install]
WantedBy=multi-user.target

Activez et démarrez le service :

Fenêtre de terminal
sudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus

Pour que Prometheus scrappe des métriques système, installez node_exporter :

Fenêtre de terminal
# Télécharger
cd /tmp
NODE_VERSION="1.9.0"
wget https://github.com/prometheus/node_exporter/releases/download/v${NODE_VERSION}/node_exporter-${NODE_VERSION}.linux-amd64.tar.gz
# Installer
tar xvfz node_exporter-${NODE_VERSION}.linux-amd64.tar.gz
sudo cp node_exporter-${NODE_VERSION}.linux-amd64/node_exporter /usr/local/bin/
sudo useradd --no-create-home --shell /usr/sbin/nologin node_exporter
/etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
Restart=always
[Install]
WantedBy=multi-user.target
Fenêtre de terminal
sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter
  1. Vérifier les services

    Fenêtre de terminal
    sudo systemctl status prometheus node_exporter

    Les deux doivent être Active: active (running).

  2. 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 machine
    ssh -L 9090:127.0.0.1:9090 user@server

    Ouvrez http://localhost:9090 dans votre navigateur.

  3. Tester une requête PromQL

    Dans l'interface, tapez up et cliquez Execute. Vous devez voir 2 séries : up{job="prometheus"} 1 et up{job="node"} 1.

  4. Vérifier les targets

    Allez dans StatusTargets. Les deux targets doivent être UP.

FlagDescriptionValeur par défaut
--config.fileChemin du fichier de configprometheus.yml
--storage.tsdb.pathRépertoire de stockagedata/
--web.listen-addressAdresse d'écoute0.0.0.0:9090
--web.enable-lifecycleActive /-/reload et /-/quitfalse
--web.enable-admin-apiActive l'API admin (snapshots, delete)false

Prometheus peut recharger sa configuration sans redémarrage.

Nécessite --web.enable-lifecycle :

Fenêtre de terminal
curl -X POST http://localhost:9090/-/reload
Fenêtre de terminal
sudo kill -HUP $(pgrep prometheus)
Fenêtre de terminal
promtool check config /etc/prometheus/prometheus.yml
SymptômeCause probableSolution
Service ne démarre pasPermissions incorrecteschown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
Port 9090 déjà utiliséAutre service--web.listen-address=:9091
"permission denied" sur data/SELinuxchcon -Rt svirt_sandbox_file_t /var/lib/prometheus
Pas de donnéesConfig invalidepromtool check config prometheus.yml
Target node en DOWNnode_exporter non démarrésystemctl status node_exporter

Logs à consulter :

Fenêtre de terminal
# Linux
journalctl -u prometheus -f
# Docker
docker logs prometheus -f
# Kubernetes
kubectl logs -n monitoring -l app.kubernetes.io/name=prometheus
  • 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.1 ou mettre un reverse proxy
  • Premier target : node_exporter pour voir des métriques réelles
  • Docker : toujours pin la version (v3.9.1, pas latest)
  • K8s : kube-prometheus-stack inclut tout (Prometheus, Grafana, exporters)

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn