Dans ce tutoriel, je vais présenter comment monitorer son onduleur avec Grafana et Prometheus, et détecter les coupures de courant en envoyant une alerte sur votre adresse e-mail ou votre téléphone.
Pré-requis
- Un serveur Linux
- Un onduleur connecté en USB au serveur (de mon côté, j'ai un Eaton 3S)
- Avoir installé Docker, Grafana et Prometheus sur le serveur. Vous pouvez vous reporter sur mon précédent tutoriel pour voir comment installer Grafana avec Docker. Vous pouvez aussi vous reporter sur mon autre tutoriel pour installer Prometheus.
- Pour le système d'alerte sur téléphone (optionnel) : se créer un compte (gratuit) sur Opsgenie
Installation de NUT (Network UPS Tools)
Tout d'abord, il faut installer NUT qui vous permettra de se connecter à l'onduleur en USB. Le logiciel est disponible dans la plupart des distributions Linux en natif.
Par exemple sous Ubuntu, pour l'installer, lancer cette commande suffit :
sudo apt install nut
Bien sûr, un peu de configuration est nécessaire, mais je vais tout vous expliquer :
Ouvrez le fichier de configuration /etc/nut/ups.conf
et ajoutez de la config comme suit tout en bas du fichier :
[myups]
driver=usbhid-ups
port=auto
desc="MY UPS"
Le nom entre crochet (myups) est unique, vous pouvez le modifier. La description aussi.
Modifiez le fichier de configuration /etc/nut/upsd.conf
et ajoutez ceci à la fin :
LISTEN 192.168.X.X 3493
Cela correspond à l'adresse IP locale de votre serveur, suivi du port sur lequel le serveur NUT va écouter. Retenez bien ce port, nous en aurons besoin par la suite.
Modifiez ensuite le fichier /etc/nut/upsd.user
pour configurer le nom d'utilisateur et le mot de passe pour se connecter au serveur :
[monuser]
password = MODIFIEZ_LE_MOT_DE_PASSE
upsmon master
Modifiez bien sûr le mot de passe. Vous pouvez aussi modifier le nom d'utilisateur (monuser) entre les crochets.
Ajoutez les mêmes lignes dans le fichier ``/etc/nut/upsd.users`.
Modifiez ensuite le fichier /etc/nut/upsmon.conf
et ajoutez ceci à la fin :
MONITOR [email protected] 1 monuser MOT_DE_PASS_A_MODIFIER master
SHUTDOWNCMD "/etc/nut/shutdown"
POWERDOWNFLAG /etc/killpower
La première ligne contient le nom de l'onduleur (tel que défini dans le fichier upsd.conf), suivi de l'adresse IP locale du serveur, du nom d'utilisateur et du mot de passe pour se connecter au serveur NUT, tels que définis précedemment.
Voilà, la configuration est prête, activez le service NUT si cela n'est pas encore fait, puis redémarrez-le :
sudo systemctl enable nut-client.service
sudo systemctl enable nut-monitor.service
sudo systemctl restart nut-client.service
sudo systemctl restart nut-monitor.service
Installation de nut-exporter
Ce petit utilitaire va permettre d'exposer les données de NUT à Prometheus, pour pouvoir être stockées dans sa base de données, puis que ces données soient exposées à Grafana. Nous allons l'installer grâce à Docker.
Créer un fichier docker-compose.yml comme suit :
version: "3"
services:
nut-exporter:
image: druggeri/nut_exporter:latest
container_name: nut-exporter
hostname: nut-exporter
restart: unless-stopped
environment:
NUT_EXPORTER_SERVER: 192.168.X.X
NUT_EXPORTER_USERNAME: monuser
NUT_EXPORTER_PASSWORD: LE_MOT_DE_PASSE
NUT_EXPORTER_VARIABLES: battery.charge,ups.load,ups.status,output.voltage,output.voltage.nominal,ups.beeper.status,battery.charge.low,input.transfer.high,input.transfer.low,outlet.1.status,output.frequency.nominal
port:
- 9199:9199
Modifiez les valeurs suivantes :
- NUT_EXPORTER_SERVER : indiquez ici l'adresse IP locale de votre serveur
- NUT_EXPORTER_USERNAME : indiquez ici le nom d'utilisateur pour se connecter
- NUT_EXPORTER_PASSWORD : indiquez ici le mot de passe
Démarrer ensuite le container avec la commande docker-compose up -d
.
Ne pas oublier d'ajouter le service à la liste des datasources de Prometheus :
scrape_configs:
- job_name: nut-primary
metrics_path: /ups_metrics
static_configs:
- targets: ['nut-exporter:9199']
nut-exporter ici correspond au hostname du container. Vous devrez potentiellement modifier cette valeur vers l'adresse IP locale du serveur si Prometheus n'est pas dans le même réseau que le container.
Redémarrez ensuite Prometheus.
Configuration de Grafana
Configuration du tableau de bord de NUT
Vous pouvez vous baser sur un dashboard que j'ai mis en place. Il s'agit du même qui est en photo de cet article.
Téléchargez le dashboard ici https://www.eliastiksofts.com/grafana-nut-dashboard/downloads/
Puis importez-le tout simplement dans Grafana. Si tout est bien paramétré, vous devriez avoir un affichage similaire à la photo de l'article.
Modifiez les deux widgets "Consumption (appromimative)" en indiquant la puissance de votre onduleur (ici 420W par défaut) :
Quant au widget "Price", indiquez aussi la puissance de votre onduleur et le prix de l'électricité au kwh :
D'autres dashbaords existent également sur Internet. Libre à vous de choisir celui qui vous convient. Cela n'aura pas d'impact sur la mise en place de l'alerte.
Création de l'alerte
Dans cette partie, nous allons mettre en place l'alerte qui va vous permettre de savoir quand une panne d'électricité a lieu grâce aux informations fournies par l'onduleur. Nous nous baserons sur l'état qui nous est fourni lorsque l'onduleur passe sur batterie, à la suite d'une perte de courant.
Obtention de la clé d'API de OpsGenie (optionnel)
Cette partie est optionnelle mais recommandée si vous souhaitez recevoir les alertes par notification ou SMS. Par défaut elles vous seront uniquement envoyées par e-mail par Grafana (pour peu que vous ayez correctement configuré un serveur SMTP pour l'envoi d'e-mail).
Connectez-vous ou inscrivez-vous sur la plateforme OpsGenie : https://www.atlassian.com/fr/software/opsgenie. Pour recevoir les alertes par SMS, vous devrez renseigner votre numéro de téléphone. Vous pouvez recevoir également les alertes à travers l'application mobile à installer sur votre smartphone (recommandé).
Une fois connecté à votre compte, rendez-vous dans l'onglet "Teams", puis sélectionnez votre team (si ce n'est pas fait, en créer une) :
Sélectionnez ensuite Integrations, puis cliquez sur Add integration :
Recherchez "Grafana" puis sélectionnez le choix qui s'affichera :
Donnez un nom quelconque puis cliquez sur "Continue"
Vous verrez s'afficher votre clé d'API : copiez-la quelque part, car nous en aurons besoin juste après :
Enfin pour finir, cliquez sur "Turn on integration" pour valider le tout.
Configuration de la clé d'API de OpsGenie dans Grafana
Rendez-vous dans Grafana, puis allez dans la section "Alerting" puis "Contact points". Cliquez sur "Add contact point" :
Puis dans remplissez le formulaire comme suit :
- Integration : sélectionnez bien sûr "OpsGenie"
- API Key : collez la clé d'API que nous avons obtenu à l'étape précédente
- Alert API URL : entrez l'URL suivante - https://api.opsgenie.com/v2/alerts
Validez ensuite pour créer l'élément.
Création de l'alerte
Toujours dans Grafana, allez dans la section "Alerting", puis "Alerts rules". Cliquez ensuite sur "New alert rule" :
Donnez un nom à votre alerte, puis sélectionnez la source prometheus et entrez la PromeQL Query suivante :
network_ups_tools_ups_status{flag="OB"}
Cette requête va vérifier le cas où l'onduleur passe sur batterie. C'est le cas quand une coupure de courant a lieu.
Vous pouvez aussi vous baser sur cette requête :
network_ups_tools_ups_status{flag="OL"}
Qui vérifie le cas où l'onduleur quitte le mode "Online".
Vous devez ensuite mettre en place la condition à laquelle l'alerte se déclenchera :
Mettez la condition :
- When : last() of A
- Is above : 0
Vous pouvez vous baser sur la capture d'écran suivante pour votre alerte :
Pour le reste du paramétrage, vous devez donner un nom et un code à votre alerte, et paramétrer l'intervalle de vérification de votre alerte. Vous pouvez aussi mettre un commentaire à votre alerte :
Je vous conseille de faire en sorte que la vérification s'effectue toutes les deux minutes afin de recevoir l'alerte le plus vite possible.
Enregistrez ensuite l'alerte.
Par défaut, en cas d'alerte, Grafana contactera l'API de OpsGenie pour vous alerter. Si vous avez renseigné votre adresse e-mail sur le contact point par défaut de Grafana, vous revevrez aussi un e-mail (à condition que vous ayez paramétré un serveur SMTP).
Commentaires