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’upsnut_ups_ip
l’IP de l’UPSnut_ups_port
port du service nut (default 3493)nut_user
utilisateur nut pour monitorer l’UPSnut_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 tokennotifynut_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
Laisser un commentaire