Archives du mot-clé scripts

Surveillance de la Température : le paramétrage du serveur ZABBIX

Nous avions mon collègue et moi mis en œuvre un serveur Zabbix pour tester et appréhender la supervision.

La chose fut simple à mettre en place, il suffit de télécharger une ‘appliance’ (une machine virtuelle déjà paramétré) et de l’incorporer dans notre infra structure VMWARE.

Puis est venu ce mini projet de surveillance de la température de la salle serveur, passons à l’étape suivante avec Zabbix : le paramétrage de quelque chose de spécifique.

Ce que j’aime bien avec zabbix c’est sa simplicité. une fois le serveur en place, il suffit d’installer les clients zabbix sur les serveurs à superviser, après c’est simple.

Parfois sur des machines pas à jour, l’installation du client est un peu difficile mais globalement cela fonctionne.

Petite précision : nous avons démarré avec la version 2.0 de Zabbix

Coté raspberry : le client zabbix

Sur le raspberry : apt-get install zabbix-agent

cela nous donne la version 1.8 mais cela suffit pour ce que l’on veut en faire

il suffit après de modifier le fichier /etc/zabbix/zabbix_agentd.conf pour paramétrer les infos suivantes :

Server :

l’adresse IP du server Zabbix, rajouter aussi 127.0.0.1 cela permet de faire des tests avec zabbix_get.

Hostname:

Le nom du client zabbix, attention il doit être identique avec le nom du hosts paramétré dans le serveur Zabbix

AllowRoot :

Permet de lancer le zabbix_client avec root, ce qui est nécessaire dans notre cas car la plupart des périphériques (1wire, i2c) ne sont accessible que par root.

Timeout:

Par la suite j’ai été obligé de le positionner à 30 secondes (par défaut c’est à 3 secondes) voir les explications plus loin.

UserParameter :

Le plus important, les informations spécifiques que l’on souhaite. Voici la ligne complète

 UserParameter=salle.temp,/home/temperature/bin/get_temp

La syntaxe est simple UserParameter=<clé>,<scripts>

Rien de bien compliqué mais il est possible de faire beaucoup plus plus d’infos ici

Il a fallu créer un user température, avec un home directory et un répertoire bin ou j’ai posé le scripts python get_temp. ( source complète => ici )

Note :

Au début, le script interrogeais le périphérique, si le CRC est bon il récupère la température et l’envoi sur la sortie standard. Simple non ?

Mais pas si simple que cela, parfois, et même si depuis cela s’est stabilisé depuis, les valeurs récupérées n’avait rien de cohérent ( -0.625 par exemple). Il a fallu modifier le script pour prendre 10 valeurs, enlever les extrêmes et faire la moyenne du reste.

Mais par contre le script lui est passé de 2 secondes d’exécution à 8 secondes et il a fallu modifier le Timeout coté serveur ET client pour que zabbix continue sa récolte d’informations.

Coté serveur Zabbix

Il faut d’abord créer un hosts dans zabbix (Configuration/Hosts) ce qui consiste a donner un nom, un nom visible, un accès ip ou DNS un port  et à l’inclure dans des groupes.

Pour les templates commencer par mettre le template « zabbix_agent » cela permet de tester si tout se passe bien avec zabbix, basculer aussi le mode automatic pour le ‘Host inventory’.

Ceci fait vous devriez voir dans ‘Monitoring / Lastest Data’ que le raspberry répond au ping ainsi que sa version de zabbix_client.

Le vrai paramétrage commence ici :

D’abord il faut créer un template puis une application puis un item puis des triggers ouf !

Le template regroupe l’application, les items et les triggers

Il est nécessaire de créer l’application puis l’item

ZABBIX_TEMPLATE

Image écran de création de l’item.

L’item a un type (ici zabbix_agent il s’agit d’un UserParameter),  porte un nom, on lui donne la clé des données à stocker (salle.temp cf UserParameter), le type des données, l’unité l’intervalle de récolte le temps de conservation les modifications à apporter etc …

Ceci fait nous pouvons commencer a tester si cela fonctionne

Pour cela depuis le serveur zabbix il suffit de taper :

zabbix_get -s ADR_IP_CLIENT -k "salle.temp"

Et vous devriez avoir une réponse du style => 19.275

C’est ce que va stocker le serveur zabbix.

Au bout de quelques temps vous pouvez même avoir des graphiques :

ZABBIX_GRAPH_TEMPERATURE

C’est d’un intérêt limité mais cela fait son petit effet quand même 🙂

A partir de la on peut avoir des triggers, donc création de 2 triggers : un quand la température est supérieure à 30° et un quand elle est en dessous de 15°. Le niveau d’alerte (severity)  à déclencher est ‘HIGH’ (que l’on traduit par ‘aie’ en français 🙂 )

Maintenant j’ai des données que je sondes régulièrement et des déclencheurs qui lancent des niveau d’alerte.

Il suffit maintenant de paramétrer une action, rien de bien compliqué.  il suffit de copier 🙂

ZABBIX_ACTION1 ZABBIX_ACTION2 ZABBIX_ACTION3

Cette action va donc, si les conditions sont remplis, déclencher une opération de type « Send Message » a un groupe précis d’utilisateurs en utilisant le media « SMS script temperature salle ».

Ce media est à paramétrer dans Administration (et non plus configuration), ce paramétrage consiste a lui donner une description, un type (Script) et un nom de script.

Pour utiliser des scripts avec zabbix : d’abord modifier zabbix_server.conf comme suit :

387 ### Option: AlertScriptsPath
388 #   Full path to location of custom alert scripts.
389 #   Default depends on compilation options.
390 #
391 # Mandatory: no
392 # Default:
393 # AlertScriptsPath=${datadir}/zabbix/alertscripts
394 AlertScriptsPath=/usr/local/zabbix/alertscripts
395
396 ### Option: ExternalScripts
397 #   Full path to location of external scripts.
398 #   Default depends on compilation options.
399 #
400 # Mandatory: no
401 # Default:
402 # ExternalScripts=${datadir}/zabbix/externalscripts
403 ExternalScripts=/usr/local/zabbix/externalscripts

Le script a été copié dans /usr/local/zabbix/alertscripts :


#!/bin/bash
#set -x
to="$1"
subject="$2"
body="$3"
FIC_LOG=/var/log/send_SMS_temp_salle.log
{
## A l'origine
## Mais probleme pour l'envoi de plusieurs SMS
## corrige voir le daemon send_smsd
/usr/local/bin/send_sms "$to" "$subject" 2>&1

## Au cas ou si cela ne fonctionne pas methode brutale
#T=5
## Ce script va envoyer les n SMS
#/usr/local/bin/send_sms 0612345678 "$subject" 2>&1     #User 1
#sleep $T
#/usr/local/bin/send_sms 0612345678 "$subject" 2>&1     #User 2
#sleep $T
#/usr/local/bin/send_sms 0612345678 "$subject" 2>&1     #User 3
#sleep $T
} >> $FIC_LOG

Notez l’importance de TOUT logger si vous voulez comprendre ce qu’il se passe.

Vous remarquerez que ce script utilise sens_sms un autre script que j’ai du écrire pour pouvoir envoyer correctement des SMS avec le daemon send_smsd, que je décrierais bientôt dans un article dédié.

A ce stade des choses se déclenche si la température dérape dans la salle serveur.

Notez que : Je suis tout à fait conscient que tout n’a pas été fait dans les règles de l’art.

Mais cela fonctionne et cela m’a permis de mieux comprendre le fonctionnement de Zabbix. Rien n’est mieux que de se fixer des buts concrets pour appréhender un outil.

La difficulté est souvent de trouver des objectifs réalisables.