J’ai déjà écrit un premier article sur la configuration de NUT pour éteindre proprement ses serveur en 2015. Il a été revu plusieurs fois mais cela restait concentré autour de La configuration de NUT en lui-même. Tout reste encore valable dans l’article originel sur NUT pour parler à son UPS.

J’y avais introduit un script simple de notification mail et SMS avec la commande NOTIFYCMD. A l’époque, je n’hébergeais pas encore sur github mes projets. J’avais mis le script en 2018 sur github, à l’occasion de la prise en charge de pushbullet et plus uniquement les mails et SMS.

Récemment j’ai revu le script, car il n’était pas très flexible. J’en ai profité pour y intégrer un PR de pushover de longue date, mais surtout Telegram qui est absolument recommandé pour des échanges chiffrés correctes, même si je n’avais pas d’infos sensibles sur des notifications UPS 😉

Fin d’année passée, ma volonté était de passer toutes mes notifications en Telegram, que ce soit pour octoprint, mes vps, mes serveurs à la maison, Jeedom. J’ai notamment fait un script générique qui peut être utilisé pour envoyer des notifications Telegram à la fin d’une commande, avec un pipe, dans un script, etc en décembre.

La partie boot a été revue afin de ne plus avoir de dépendance avec un script de notification. Ce sont les mêmes fonctions, mais internalisées. J’ai partagé le logrotate également.

Installation manuelle du script de notification depuis github

Une fois la configuration de NUT suivis sur l’article précédent, voici la marche à suivre pour installer le script avec un copier coller. Vous aurez besoin de git :

  • Copier le projet git nutNotify
  • Copier le fichier nutNotify.conf.txt vers /usr/local/etc/nutNotify.conf afin de l’éditer avec vos besoins. Pour Telegram les deux variables telegramAccessToken et telegramChatID suffisent. Pour obtenir vos identifiants il faut créer un bot Telegram.
  • Copier nutNotifyFct.sh nutNotifyBoot.sh nutNotify.sh nutShutdown.sh vers /usr/local/bin
  • Copier systemd-notify vers /lib/systemd/system/nut-notify-boot.service
  • systemctl reload daemon et enable nut-notify-boot
  • Créer le répertoire de log /var/log/nutNotify avec les droits de l’utilisateur nut
  • Copier le fichier de logrotate dans /etc/logrotate.d
git clone https://github.com/belgotux/nutNotify.git
cd nutNotify
cp nutNotify.conf.txt /usr/local/etc/nutNotify.conf
vim /usr/local/etc/nutNotify.conf
cp nutNotifyFct.sh nutNotifyBoot.sh nutNotify.sh nutShutdown.sh /usr/local/bin
cp systemd-notify /lib/systemd/system/nut-notify-boot.service
systemctl daemon-reload
systemctl enable nut-notify-boot.service
mkdir /var/log/nutNotify
chown nut:nut /var/log/nutNotify
cp nutNotify.logrotate /etc/logrotate.d

Configuration de NUT et du script de notification push depuis Ansible Galaxy

J’ai également créé un repo github pour le projet Ansible nut client qui a 2 fonctions :

  • Configurer le service nut facilement : autant sur le nut server relié à l’UPS, que les clients réseaux nut
  • Configurer le script de notification Push pour Telegram, Pushbullet, Pushover, mal ou sms

Vous pouvez définir différents types de notifications en fonction de l’évènement. J’enverrai une notification Telegram pour un problème secteur et lorsque les serveurs s’éteindront en fin de batterie par exemple. Mais je ne voudrais peut-être pas que tous mes serveurs me disent qu’ils sont sur batterie UPS lors d’une coupure, un seul me suffira… D’où l’utilité des variables Ansible : des notifications minimales pour le groupe de serveurs et des notifications pour tous les events pour le serveur relié à l’UPS.

Le role nut-client est disponible sur Ansible Galaxy. Pour le prendre :

ansible-galaxy install belgotux.nut_client

La configuration est bien fournie dans le README en Anglais, mais je mets ici les points essentiels avec un exemple :

  • notifynut_method peut être [mail|pushbullet|telegram|pushover|sms] (default mail)
  • notifynut_mailto adresse mail de destinataire (default root)
  • nut_mode peut être [netclient|netserver] : netserver est à mettre uniquement sur le serveur ayant l’UPS en USB ou utilisé en réseau (default netclient)
  • nut_ups_name le nom donné à l’ups
  • nut_ups_ip l’IP de l’UPS
  • nut_ups_port port du service nut (default 3493)
  • nut_user utilisateur nut pour monitorer l’UPS
  • nut_password le mot de passe pour monitorer l’UPS

Selon la notification utilisée, les variables sont aussi à compléter. Dans le cas de Telegram :

  • notifynut_telegram_accessToken Telegram token
  • notifynut_telegram_chatID Telegram chat ID

Utiliser efficacement les variables Ansible

Et c’est suffisant pour un simple serveur. Mais pour ne pas recevoir 5 notifications si vous avez 5 serveurs qui passent sous batteries… Je vous conseille dans le groupe de serveur de mettre ces variables. Vous serez averti en cas de problème de communication avec le serveur NUT et quand le serveur est de nouveau en ligne après une coupure de courant :

notifynut_method: none
notifynut_method_comm: telegram
notifynut_method_serveronline: (telegram mail)

Et dans le hosts_vars du serveur NUT ceci, afin que le service soit en écoute et d’avoir toutes les notifications par telegram uniquement. (sauf serveronline vu qu’on l’a défini dans notre groupe à telegram+mail comme les autres serveurs).

nut_mode: netserver
notifynut_method: telegram
Summary
NUT - notifications push Telegram Pushbullet Pushover pour son UPS
Article Name
NUT - notifications push Telegram Pushbullet Pushover pour son UPS
Description
Script de notification NUT pour être averti en cas de coupure de courant de son UPS via Telegram Pushbullet Pushover mail ou SMS. La configuration NUT peut se faire manuellement ou via un role Ansible
Author