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.txtvers/usr/local/etc/nutNotify.confafin 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.shvers/usr/local/bin - Copier
systemd-notifyvers/lib/systemd/system/nut-notify-boot.service - systemctl reload daemon et enable
nut-notify-boot - Créer le répertoire de log
/var/log/nutNotifyavec 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_methodpeut être [mail|pushbullet|telegram|pushover|sms] (default mail)notifynut_mailtoadresse mail de destinataire (default root)nut_modepeut être [netclient|netserver] : netserver est à mettre uniquement sur le serveur ayant l’UPS en USB ou utilisé en réseau (default netclient)nut_ups_namele nom donné à l’upsnut_ups_ipl’IP de l’UPSnut_ups_portport du service nut (default 3493)nut_userutilisateur nut pour monitorer l’UPSnut_passwordle 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_accessTokenTelegram tokennotifynut_telegram_chatIDTelegram 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





Laisser un commentaire