Avec ce script vous pourrez surveiller la consommation de vos appareils POE sur votre switch et déclencher une alerte le cas échéant. Comme d’habitude vous retrouverez ce script et les différentes mises à jour et correctifs sur mon dépôt Github à cette adresse : Github Quick-Tutoriel (n’hésitez pas à vous abonner).
Avant toute chose un petit rappel s’impose concernant le POE.
Le Power over Ethernet (POE) permet de faire passer une tension de 48 V (jusqu’à 12 W de puissance voire plus 25 W avec du POE+) en plus des données à 100 Mbit/s ou 1 Gbit/s. Cette technologie alloue deux paires (ou plus) sur les quatre paires que contient un câble UTP ou STP afin d’alimenter certains appareils d’un réseau Ethernet tels que des téléphones IP, des disques durs réseaux, des imprimantes, des caméras IP ou des points d’accès Wi-Fi.
Un câble Ethernet est composé de quatre paires de fils. Quand la connexion s’établit à 100 Mbits, les données transitent sur deux paires seulement, à savoir les fils 1, 2, 3 et 6; les deux autres paires inutilisées, à savoir les fils 4, 5,7 et 8, peuvent être utilisées pour véhiculer le courant électrique. Dans la plupart des cas le POE passe par un fil de la paire 1,2 et un autre fil de la paire 3,6 en même temps que les données.
Les options du script PERL.
Ce script utilise 2 modules CPAN : Net ::SSH::Expect (J’utilise ce module au lieu de Net::SSH::Perl ou Perl::SSH2 car je rencontre beaucoup moins de problème de connexion SSH ou encore de passage en mode enable, de plus ce module est plus adapté pour passer plusieurs commandes dans la même session) et Net ::SNMP.
J’utilise toujours le même modèle pour mes scripts. Donc avant de commencer le traitement, je vérifie que toutes les options soient saisies :
- La variable $opt_host permet d’indiquer l’adresse ip du switch à superviser
- La variable $opt_command permet de définir la commande CLI à exécuter sur le switch Cisco. Ici pour récupérer les infos sur le POE dont nous avons besoin, nous allons utiliser la commande suivante :
#show power inline | exclude n/a (exclude n/a permet de ne pas afficher les ports qui n’utilisent pas de POE afin d’améliorer la vitesse de traitement du script, notamment sur des switchs de 7 cartes de 48 ports) - La variable $opt_w permet de définir la valeur en watt pour afficher un warning dans Centreon
- La variable $opt_c permet définir la valeur en watt pour afficher un critical dans Centreon
- Les variables $opt_user et $opt_password permettent de saisir le login et mot de passe pour se connecter sur le switch. Pour éviter d’utiliser ces identifiants dans Centreon, vous pouvez définir les valeurs dans le script Ligne 82 pour le user et Ligne 85 pour le mot de passe.
Le script PERL.
Nous allons maintenant examiner les portions de codes les plus intéressantes du plugin.
- 98 à 104 : Paramètre nécessaire pour se connecter à l’équipement Cisco 4500 avec le module Net::SSH::Expect
- 106 : Connexion à l’équipement.
- 111 : On utilise cette astuce pour afficher le résultat entier de la commande sans le –MORE—
- 112: On exécute la commande sur le switch.
- 116 : Dans cette boucle on lit chaque ligne de retour de la commande passée.
- 119 : Dans cette condition nous allons récupérer la puissance totale disponible sur le switch, elle se trouve sur la ligne Available. Ensuite on met chaque mot de la ligne dans un tableau. Le séparateur est un espace (Ligne 121).
- 127 : dans cette condition on récupère 2 valeurs le nombre de périphériques POE connecté au switch ainsi que la puissance consommée.
- 137 : On réactive la valeur par défaut pour l’affichage des résultats d’une commande sur le switch, à savoir 24 lignes.
- 150 à 159 : On vérifie le résultat de la variable $consomation_poe pour déclencher une alerte dans Centreon si la puissance consommée est supérieur à nos limites.
- 162: On construit le graphique de suivi avec 2 valeurs la puissance totale et la puissance consommée. On pourra personnaliser notre graphique avec une valeur maxi.
- 163 : On affiche le résultat de la commande dans Centreon avec le nombre d’appareils connectés, la puissance totale disponible, la puissance consommée et le pourcentage de celle-ci pour une lecture rapide des résultats
Pour ma part j’utilise une CES (Centreon Entreprise Server) virtualisé. Le répertoire ou je dois copier mes plugins est le suivant : /usr/lib/nagios/plugins.
Avant d’intégrer le plugin dans Centreon je l’exécute toujours sur mon serveur pour vérifier que tout fonctionne correctement. Les scripts sont exécutés par l’utilisateur centreon-engine.
Vérifications de fonctionnement du plugin.
Vérification N°1 : Je m’assure que le plugin n’a pas d’erreur de programmation en affichant l’aide
Vérification N°2 : Je teste le plugin sur l’équipement désiré, avec de vrais valeurs et l’utilisateur qui exécute les scripts sous Centreon.
#su centreon-engine #./check_ssh_cisco4500_poe -H 192.168.2.65 -k "sh power inline | exclude n/a" -w 1520 -c 2130
Ajout de la commande dans l’interface de Centreon.
Ce qui se matérialise par ceci au niveau de la commande :
On rajoute devant le nom de la variable _HOST pour indiquer que ce paramètre se situe au niveau du HOST et _SERVICE pour indiquer que ces paramètres sont à saisir au niveau du service.
Dans mon modèle pour les switchs Cisco, on retrouve bien la commande à exécuter sur le switch, dans les macros personnalisées :
Si vous voulez plus de renseignements pour créer une sonde suivez ce tutoriel : Créer une commande dans Centreon avec des macros
Une fois le plugin opérationnel, vous aurez ceci dans Centreon :
Avec ce type de graphique par exemple :
Amélioration du plugin.
Voici une petite liste d’amélioration à réaliser :
- Si vous n’indiquer pas le login et mot de passe via l’option, n’oublier pas de les rentrer en dur dans le plugin Lignes 82 et 85
- Au lieu d’utiliser SSH on pourrait utiliser SNMP pour récupérer ces valeurs et améliorer la rapidité du script. En effet avec cette méthode il faut environ 1 minute pour avoir les résultats
- On pourrait éviter de saisir la commande en option et la mettre en dur directement dans le script car ceci n’a pas trop d’intérêt avec le recul.
That’s All.