Intégration d'un UPS dans Proxmox via NUT

Intégration d'un UPS dans Proxmox via NUT

NUT (Network UPS Tools) est une solution open-source de supervision d’onduleur (UPS). Elle récupère les informations de l’UPS (alimentation sur secteur ou batterie, niveau de charge, autonomie estimée, événements…) et peut les exposer sur le réseau. Concrètement, on peut avoir un serveur NUT qui dialogue avec l’onduleur, et des clients NUT (comme Proxmox ou d’autres machines) qui s’y connectent pour déclencher automatiquement un arrêt propre en cas de coupure prolongée.

Network UPS Tools - Welcome
Power Devices support

Configuration du serveur NUT

Dans mon cas, mon onduleur est connecté en USB à mon NAS Synology, qui prendra le rôle de serveur NUT.

On se connecte à DSM et on se rend dans Panneau de configurationMatériel & AlimentationUPS. Si ce n'est pas déjà fait, cochez Activer la prise en charge UPS ainsi que Activer le serveur réseau UPSun peu plus bas. Cliquez sur le bouton Périphériques Synology NAS autorisés et notez les adresses IP des périphériques (serveur Proxmox dans notre cas) qui pourront s'y connecter.


Installation et configuration de NUT sur Proxmox

Maintenant que le serveur UPS est activé et configuré, on passe à la configuration côté client. Rendez-vous dans la console de l'hôte Proxmox et installez NUT avec les commandes suivantes :

apt update
apt install nut-client

Éditez le fichier de configuration principal :

nano /etc/nut/nut.conf

Modifiez la ligne ⁣MODE pour avoir ceci :

MODE=netclient

Éditez le fichier de monitoring :

nano /etc/nut/upsmon.conf

Recherchez la section MONITOR et ajoutez cette ligne en adaptant les informations (adresse IP et identifiants). Sur Synology, les identifiants sont définis par défaut : monuser / secret.

MONITOR ups@192.168.1.100 1 monuser secret slave

Il faut également ajouter les lignes suivantes pour la gestion de l'arrêt de Proxmox. Une partie est déjà présente dans le fichier, vérifiez chaque section et n'ajoutez que les lignes nécessaires.

SHUTDOWNCMD "/sbin/shutdown -h +0"
NOTIFYCMD /usr/sbin/upssched
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG "/etc/killpower"

NOTIFYMSG ONLINE    "UPS %s: Alimentation secteur rétablie"
NOTIFYMSG ONBATT    "UPS %s: Fonctionne sur batterie"
NOTIFYMSG LOWBATT   "UPS %s: Batterie faible"
NOTIFYMSG FSD       "UPS %s: Arrêt forcé en cours"
NOTIFYMSG COMMOK    "UPS %s: Communication établie"
NOTIFYMSG COMMBAD   "UPS %s: Communication perdue"
NOTIFYMSG SHUTDOWN  "UPS %s: Arrêt système imminent"
NOTIFYMSG REPLBATT  "UPS %s: Batterie à remplacer"
NOTIFYMSG NOCOMM    "UPS %s: Communication indisponible"

NOTIFYFLAG ONLINE   SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT   SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT  SYSLOG+WALL+EXEC
NOTIFYFLAG FSD      SYSLOG+WALL+EXEC
NOTIFYFLAG COMMOK   SYSLOG+WALL+EXEC
NOTIFYFLAG COMMBAD  SYSLOG+WALL+EXEC
NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC
NOTIFYFLAG REPLBATT SYSLOG+WALL
NOTIFYFLAG NOCOMM   SYSLOG+WALL

Démarrez le client NUT avec les commandes suivantes, son statut doit être active (running) en vert.

systemctl restart nut-monitor
systemctl enable nut-monitor
systemctl status nut-monitor

Enfin, testez la connexion au serveur NUT et à l'UPS :

upsc ups@192.168.1.100

Vous devriez obtenir une liste des informations de l'UPS :

battery.charge: 100
battery.charge.low: 10
battery.runtime: 3600
device.model: Back-UPS ES 700G
input.voltage: 230.0
output.voltage: 230.0
ups.load: 25
ups.status: OL

Les codes de statut UPS peuvent prendre les valeurs suivantes :

  • OL⁣: Online (sur secteur).
  • OB: On Battery (sur batterie).
  • LB: Low Battery (batterie faible)

Interface Web NUT

Notre onduleur est maintenant connecté à notre serveur Proxmox et la communication est configurée entre les deux. Mais j'aime bien aussi avoir une interface pour vérifier facilement la bonne communication et visualiser les données. Pour cela, nous allons installer la page web du client NUT avec la commande suivante :

apt install nut-cgi apache2

Modifiez le fichier /etc/nut/hosts.conf et ajoutez la ligne ci-dessous en n'oubliant pas de remplacer l'adresse IP par celle du serveur NUT :

MONITOR ups@192.168.1.100 "Onduleur Principal"

Activez le module CGI puis redémarrez Apache :

a2enmod cgi
systemctl restart apache2

Il ne reste qu' procéder à un test de la page web http://IP_PROXMOX/cgi-bin/nut/upsstats.cgi depuis un navigateur.


Configuration avancée de l'arrêt automatique

L'intérêt d'avoir connecté notre onduleur à Proxmox est de pouvoir réaliser un arrêt propre de l'hôte en cas de coupure de courant. On va passer par la création d'un script :

nano /etc/nut/upssched-cmd

Dans lequel vous pouvez copier le contenu suivant :

#!/bin/bash

case $1 in
    onbatt)
        logger -t upssched-cmd "UPS sur batterie"
        ;;
    online)
        logger -t upssched-cmd "UPS sur secteur"
        ;;
    lowbatt)
        logger -t upssched-cmd "Batterie faible - Arrêt du serveur"
        # Arrêter le serveur
        /sbin/shutdown -h +1
        ;;
    *)
        logger -t upssched-cmd "Commande inconnue: $1"
        ;;
esac
💡
Vérifiez que les outils de virtualisation (QEMU Guest Agent / virtio) sont bien installés dans vos VM, afin qu’elles puissent s’éteindre proprement. Et pour que vos VM et conteneurs redémarrent automatiquement après une coupure, pensez à activer le démarrage automatique dans leurs options et à définir une priorité de boot.

On rend le script exécutable :

chmod +x /etc/nut/upssched-cmd

Pour configurer le planificateur, on modifie le fichier :

nano /etc/nut/upssched.conf

Et on ajoute ou adapte son contenu :

CMDSCRIPT /etc/nut/upssched-cmd
PIPEFN /var/run/nut/upssched.pipe
LOCKFN /var/run/nut/upssched.lock

AT ONBATT * START-TIMER onbatt 30
AT ONLINE * CANCEL-TIMER onbatt online
AT LOWBATT * EXECUTE lowbatt
AT COMMBAD * START-TIMER commbad 30
AT COMMOK * CANCEL-TIMER commbad commok

Explications :

  • On définit le script qui sera appelé.
  • Si l'UPS passe sur batterie, attends 30 secondes avant de notifier.
  • Si le secteur revient, l'alerte est annulée.
  • Si la batterie est faible, l'arrêt est immédiatement demandé.

Enregistrez et redémarrez le service :

systemctl restart nut-monitor

Pour tester que tout fonctionne correctement, vous pouvez utiliser les commandes suivantes depuis la console Proxmox :

# Vérifier l'état de l'UPS
upsc ups@192.168.1.100

# Consulter les logs
tail -f /var/log/syslog | grep -i ups

# Vérifier le service nut
systemctl status nut-monitor
‼️
Attention à la commande suivante, elle vous permet de tester réellement l'arrêt automatique de Proxmox !
Ne lancez cette commande qu'en connaissance de cause.

Vous pouvez pour cela simuler une batterie faible avec :

upsmon -c fsd

Vous pouvez retrouver la documentation complète de NUT sur le lien suivant :

Network UPS Tools User Manual

Conclusion

Voilà, vous disposez maintenant d'une surveillance et gestion complète de votre onduleur dans Proxmox avec :

  • Un monitoring en temps réel de l'onduleur via NUT.
  • Une interface web pour consultation rapide des informations de l'onduleur.
  • L'arrêt automatique et sécurisé de l'hôte Proxmox en cas de coupure prolongée.

Notre infrastructure est désormais protégée des coupures de courant !

N'oubliez pas d'activer le redémarrage automatique de votre serveur dans le BIOS pour que celui-ci redémarre au retour du courant.

Nous sommes toujours disponible pour discuter de vos installations, d'améliorations ou vous aider si besoin sur la communauté Telegram ou bien en laissant un commentaire !