Proxmox et supervision 12 min de lecture

Surveiller le S.M.A.R.T. des disques Proxmox avec Scrutiny

Installer le tableau de bord Scrutiny dans un conteneur LXC, puis collecter et historiser les données S.M.A.R.T. des disques physiques de Proxmox.

Proxmox VE sait lire les informations S.M.A.R.T. d’un disque, mais il ne trace pas leur évolution. Impossible, depuis son interface native, de comparer la température actuelle avec celle de la veille ou de repérer facilement une dégradation progressive. Scrutiny complète ce manque avec un tableau de bord Web, des seuils fondés sur des données réelles de défaillance et un historique conservé dans InfluxDB.

Pourquoi utiliser Scrutiny

Le relevé fourni par Proxmox reste utile pour un contrôle ponctuel : état général, température, volume de données lues ou écrites, heures de fonctionnement et erreurs enregistrées. Il ne permet toutefois pas de visualiser la dynamique de ces valeurs sur plusieurs heures, plusieurs mois ou une année.

Fenêtre Proxmox affichant les données S.M.A.R.T. brutes d’un disque NVMe
Proxmox sait afficher un relevé S.M.A.R.T. instantané, mais ne conserve pas son évolution dans le temps.

Scrutiny est un projet open source consacré au suivi S.M.A.R.T. des HDD, SSD et NVMe. Dans une installation dite hub and spoke, l’interface Web et la base de données forment le hub, tandis qu’un ou plusieurs collecteurs interrogent les disques des hôtes à superviser. Cette séparation convient bien à Proxmox : le tableau de bord reste isolé dans un LXC, mais le collecteur s’exécute sur l’hyperviseur, là où les disques sont réellement visibles.

Créer le conteneur LXC

L’installation d’origine utilise Ubuntu 22.04 LTS. Cette version reste adaptée au scénario reproduit ici. Ubuntu 24.04 fonctionne également avec Docker Compose v2 ; la difficulté rencontrée dans l’article initial provenait surtout de l’ancien paquet docker-compose, et non d’une incompatibilité fondamentale de Scrutiny.

Dans le stockage de votre nœud Proxmox, sélectionnez Modèles de conteneurs → Modèles, recherchez ubuntu-22.04-standard et lancez le téléchargement.

Téléchargement du modèle Ubuntu 22.04 dans l’interface Proxmox traduite en français
Dans le stockage Proxmox, ouvrez Modèles de conteneurs, puis téléchargez Ubuntu 22.04 Jammy.

Créez ensuite un conteneur avec les paramètres suivants :

  • 1 vCPU et 512 Mo de mémoire suffisent pour un essai léger ; 1 Go apporte davantage de marge à InfluxDB.
  • 8 Gio de disque constituent le minimum de l’installation originale. Prévoyez 16 Gio ou davantage si vous conservez longtemps les mesures de nombreux disques.
  • Activez l’option Imbrication afin de permettre l’exécution de Docker dans le LXC.
  • Attribuez une adresse IP fixe ou une réservation DHCP. Dans les captures, Scrutiny répond sur 192.168.68.144.
  • Ajoutez de préférence votre clé publique SSH pendant la création du conteneur.
Étapes de création du conteneur LXC Scrutiny dans Proxmox avec disque de 8 Gio et adresse IP fixe
Le conteneur de l’exemple utilise l’ID 110, le nom scrutiny, Ubuntu 22.04, un disque de 8 Gio et l’adresse fixe 192.168.68.144/24.

Depuis la console du conteneur, mettez le système à jour et installez Docker avec le module Compose actuel :

apt update
apt full-upgrade -y
apt install -y ca-certificates curl docker.io docker-compose-v2
systemctl enable --now docker
reboot

Installer Scrutiny et InfluxDB dans le LXC

Reconnectez-vous au conteneur après son redémarrage, puis préparez les répertoires persistants :

mkdir -p /opt/scrutiny/config /opt/scrutiny/influxdb
cd /opt/scrutiny
nano compose.yaml

Le fichier suivant reprend l’architecture de l’article d’origine, avec InfluxDB 2.8 et Scrutiny 0.9.3. La version est épinglée pour éviter qu’une mise à jour imprévue ne modifie le service. Le port InfluxDB n’est pas publié sur le réseau : seul Scrutiny y accède à l’intérieur de Docker.

services:
  influxdb:
    image: influxdb:2.8
    container_name: scrutiny-influxdb
    restart: unless-stopped
    volumes:
      - ./influxdb:/var/lib/influxdb2
    environment:
      TZ: Europe/Brussels
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8086/health"]
      interval: 5s
      timeout: 10s
      retries: 20

  scrutiny-web:
    image: ghcr.io/analogj/scrutiny:v0.9.3-web
    container_name: scrutiny-web
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - ./config:/opt/scrutiny/config
    environment:
      SCRUTINY_WEB_INFLUXDB_HOST: scrutiny-influxdb
      TZ: Europe/Brussels
    depends_on:
      influxdb:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/api/health"]
      interval: 5s
      timeout: 10s
      retries: 20
      start_period: 10s

Lancez les deux services et contrôlez leur état :

docker compose up -d
docker compose ps
docker compose logs --tail=50

Ouvrez ensuite http://192.168.68.144:8080, en remplaçant l’adresse par celle de votre LXC. L’interface doit apparaître, mais elle reste vide avant le premier envoi du collecteur.

Tableau de bord Scrutiny vide avant la première collecte S.M.A.R.T.
Le tableau de bord reste vide tant qu’aucun collecteur ne lui a envoyé de mesures.

N’exposez pas directement le port 8080 sur Internet. Limitez-le au réseau d’administration ou placez Scrutiny derrière votre reverse proxy avec HTTPS et une authentification adaptée.

Installer le collecteur sur l’hôte Proxmox

Les commandes de cette section doivent être exécutées dans le shell de l’hôte Proxmox, et non dans le conteneur LXC. Installez d’abord smartmontools et vérifiez que les disques sont détectés :

apt update
apt install -y ca-certificates curl smartmontools
smartctl --scan

Téléchargez le collecteur correspondant à la version du serveur :

install -d -m 0755 /opt/scrutiny/bin /opt/scrutiny/config
curl -fL \
  https://github.com/AnalogJ/scrutiny/releases/download/v0.9.3/scrutiny-collector-metrics-linux-amd64 \
  -o /opt/scrutiny/bin/scrutiny-collector-metrics-linux-amd64
chmod 0755 /opt/scrutiny/bin/scrutiny-collector-metrics-linux-amd64

Pour identifier clairement les disques de cet hôte, créez /opt/scrutiny/config/collector.yaml :

version: 1
host:
  id: "pve20"

Remplacez pve20 par le nom réel du nœud. Lancez ensuite une première collecte manuelle :

/opt/scrutiny/bin/scrutiny-collector-metrics-linux-amd64 run \
  --api-endpoint "http://192.168.68.144:8080"

La commande doit lister les disques détectés, lire leurs attributs avec smartctl, puis confirmer l’envoi au serveur. En cas de disque absent, comparez le résultat avec smartctl --scan. Un contrôleur RAID peut demander un type de périphérique explicite dans collector.yaml.

Automatiser la collecte avec systemd

Créez le service /etc/systemd/system/scrutiny-collector.service :

[Unit]
Description=Collecteur S.M.A.R.T. Scrutiny
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
ExecStart=/opt/scrutiny/bin/scrutiny-collector-metrics-linux-amd64 run --api-endpoint http://192.168.68.144:8080

Créez ensuite /etc/systemd/system/scrutiny-collector.timer :

[Unit]
Description=Collecte S.M.A.R.T. périodique pour Scrutiny

[Timer]
OnBootSec=5min
OnUnitActiveSec=60min
Persistent=true
Unit=scrutiny-collector.service

[Install]
WantedBy=timers.target

Rechargez systemd, activez le minuteur et déclenchez immédiatement un relevé de contrôle :

systemctl daemon-reload
systemctl enable --now scrutiny-collector.timer
systemctl start scrutiny-collector.service
systemctl status scrutiny-collector.timer
systemctl list-timers scrutiny-collector.timer

OnUnitActiveSec=60min reprend la fréquence utilisée dans l’article d’origine. Un intervalle de 15 minutes dessine plus finement la courbe de température ; une collecte quotidienne suffit si seules les tendances lentes vous intéressent.

Vérifier les données dans Scrutiny

Quelques minutes après la première exécution du collecteur, les disques doivent apparaître dans l’interface Web. Ouvrez un appareil pour retrouver ses attributs détaillés, puis revenez au tableau de bord pour afficher l’évolution des températures.

Fiche détaillée d’un SSD NVMe Kingston dans Scrutiny
Scrutiny regroupe le modèle, le numéro de série, la capacité, la température et les attributs importants du disque.
Liste complète des attributs S.M.A.R.T. NVMe dans Scrutiny
La vue détaillée permet de parcourir les attributs NVMe et leur historique individuel.
Tableau de bord Scrutiny avec deux SSD NVMe et leur courbe de température
Après la collecte, les disques apparaissent avec leur état, leur température, leur capacité et une courbe historique.

Si l’interface reste vide, contrôlez les deux côtés :

  • journalctl -u scrutiny-collector.service -n 100 --no-pager sur Proxmox ;
  • docker compose logs --tail=100 scrutiny-web influxdb dans le LXC ;
  • l’accès TCP au port 8080 entre l’hôte et le conteneur ;
  • les périphériques retournés par smartctl --scan ;
  • l’heure et le fuseau des deux machines.

Plusieurs nœuds Proxmox et notifications

Dans un cluster, installez le collecteur sur chaque nœud qui possède des disques physiques. Donnez à chaque fichier collector.yaml un identifiant host.id distinct — par exemple pve20, pve21 et pve22. Cette étiquette évite de mélanger des disques provenant de plusieurs serveurs dans un tableau de bord illisible.

Scrutiny peut également envoyer des alertes à l’aide de Shoutrrr. Les destinations se configurent dans /opt/scrutiny/config/scrutiny.yaml ou avec la variable SCRUTINY_NOTIFY_URLS. Conservez les jetons de notification hors du fichier publié et testez chaque canal avant de dépendre de ces alertes.

Conclusion

Cette installation conserve la logique simple du guide d’origine : l’interface et InfluxDB vivent dans un petit conteneur LXC, tandis que le collecteur reste au plus près des disques sur Proxmox. On obtient ainsi ce qui manque à l’écran S.M.A.R.T. natif : une vue centralisée, des températures historisées et des tendances suffisamment longues pour repérer un changement avant la panne.

Références

À propos de l’auteur

Jeremy Kraft administre les infrastructures et les services auto-hébergés de l’IBCSC. Ces guides reprennent des configurations réellement déployées, revérifiées avant publication.

Discussion

Commentaires

0

Aucun commentaire pour le moment. Vous pouvez ouvrir la discussion avec une question ou un retour d’expérience.