Blog & Astuces

Monitorer son serveur avec Grafana et Prometheus - Surveiller son onduleur et détecter une perte de courant

Monitorer son serveur avec Grafana et Prometheus - Surveiller son onduleur et détecter une perte de courant

Tuto

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) :

Grafana

Quant au widget "Price", indiquez aussi la puissance de votre onduleur et le prix de l'électricité au kwh :

Grafana

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) :

OpsGenie

Sélectionnez ensuite Integrations, puis cliquez sur Add integration :

OpsGenie

Recherchez "Grafana" puis sélectionnez le choix qui s'affichera :

OpsGenie

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 :

OpsGenie

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" :

Grafana

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" :

Grafana

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 :

Grafana

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 :

Grafana

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