Retourner sur le site

Prometheus + Grafana + node_exporter

Installer Prometheus, node_exporter et Grafana sur un VPS HolyCloud pour surveiller CPU, RAM, disque et réseau avec tableaux de bord.

Prometheus + Grafana + node_exporter

Cette stack open source collecte des métriques (Prometheus), les expose via node_exporter et les visualise dans Grafana. Idéal sur un VPS Performance HolyCloud dédié au monitoring ou sur le VPS surveillé lui-même pour des petits parcs.

Prérequis

  • VPS Linux 2 Go+ RAM (4 Go si Grafana + Prometheus + plusieurs cibles)
  • Ports : 9090 (Prometheus), 3000 (Grafana), 9100 (node_exporter) — restreignez par pare-feu
  • Nom de domaine ou accès VPN recommandé pour l'UI Grafana
  • Sauvegarde des volumes Docker ou répertoires de données

Architecture

[VPS cible] node_exporter:9100
        ↓ scrape
[Prometheus] :9090  →  [Grafana] :3000 (datasource Prometheus)

Installation node_exporter (sur chaque VPS)

NODE_EXPORTER_VERSION=1.8.2
cd /tmp
curl -LO https://github.com/prometheus/node_exporter/releases/download/v${NODE_EXPORTER_VERSION}/node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64.tar.gz
tar xzf node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64.tar.gz
sudo cp node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64/node_exporter /usr/local/bin/

Service systemd :

sudo tee /etc/systemd/system/node_exporter.service << 'EOF'
[Unit]
Description=Prometheus Node Exporter
After=network.target

[Service]
User=nobody
ExecStart=/usr/local/bin/node_exporter --web.listen-address=127.0.0.1:9100
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
curl -s http://127.0.0.1:9100/metrics | head

Écoute sur 127.0.0.1 ; exposez via tunnel SSH ou reverse proxy authentifié.

Prometheus (Docker recommandé)

sudo mkdir -p /opt/prometheus/{data,config}
sudo tee /opt/prometheus/config/prometheus.yml << 'EOF'
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: node
    static_configs:
      - targets:
          - 127.0.0.1:9100
        labels:
          instance: vps-performance-01
EOF
docker run -d --name prometheus --restart unless-stopped \
  -p 127.0.0.1:9090:9090 \
  -v /opt/prometheus/config/prometheus.yml:/etc/prometheus/prometheus.yml:ro \
  -v /opt/prometheus/data:/prometheus \
  prom/prometheus:latest \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.retention.time=15d

Ajoutez d'autres VPS :

      - targets: ['10.0.0.5:9100', '10.0.0.6:9100']

Grafana

docker run -d --name grafana --restart unless-stopped \
  -p 127.0.0.1:3000:3000 \
  -v /opt/grafana:/var/lib/grafana \
  grafana/grafana:latest

Premier login : http://127.0.0.1:3000 → admin / admin (changez le mot de passe).

  1. Connections → Data sources → Prometheus
  2. URL : http://prometheus:9090 si réseau Docker partagé, sinon http://host.docker.internal:9090 ou IP hôte
  3. Dashboards → Import → ID 1860 (Node Exporter Full)

Reliez les conteneurs :

docker network create monitoring
docker network connect monitoring prometheus
docker network connect monitoring grafana

Datasource URL interne : http://prometheus:9090.

Reverse proxy Nginx (HTTPS)

server {
    listen 443 ssl;
    server_name grafana.votredomaine.tld;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Activez l'authentification Grafana (OAuth, LDAP) en production.

Alertes (introduction)

Fichier rules.yml :

groups:
  - name: host
    rules:
      - alert: HostHighCpu
        expr: 100 - (avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90
        for: 10m
        labels:
          severity: warning

Montez le fichier dans Prometheus et référencez rule_files dans prometheus.yml. Connectez Alertmanager pour email/Slack (hors scope minimal).

Sécurité

  • Ne exposez pas 9100 et 9090 sur Internet sans TLS + auth
  • Préférez un VPS monitoring séparé qui scrape via VPN WireGuard
  • Limitez la rétention disque (retention.time, retention.size)

Vérification

docker ps
curl -s http://127.0.0.1:9090/api/v1/targets | jq '.data.activeTargets[].health'

Dans Grafana : graphiques CPU, node_memory_MemAvailable_bytes, node_filesystem_avail_bytes.

Dépannage

| Problème | Piste |

|----------|-------|

| Target DOWN | Pare-feu, mauvaise IP, node_exporter arrêté |

| Grafana no data | URL datasource, réseau Docker |

| Disque plein | Réduire rétention Prometheus |

Besoin d'aide ?

HolyCloud peut confirmer les quotas bande passante si vous centralisez le scrape de nombreux VPS vers un seul nœud Prometheus.