L'interface de Centreon permet l'affichage de graphes alimentés par les données de performances des plugins. Centreon utilise des bases de données métriques au format RRD (Round Robin Database) créé par Tobias Oetiker. Nous allons étudier la possibilité de réaliser un compteur de pages d'imprimantes. Malheureusement, n'ayant pas d'imprimante réseau avec une gestion SNMP, nous simulerons cette imprimante par un plugin maison.
1 Simulation d'un compteur d'imprimante
1.1 Création du plugin check_test_imp.pl
Voici le programme basé sur mes plugins perl précédents. Celui-ci va lire, ou créer s'il n'existe pas, un fichier temporaire où on stockera la valeur simulant le nombre de pages de la soi-disant imprimante. Ce fichier sera stocké dans le dossier /var/lib/centreon/centplugins et sera indexé par l'option -n. Cette option permet de différencier les fichiers temporaires dans le cas d'utilisation simultanée du plugin. Nous prendrons comme référence, une imprimante HP pouvant imprimer 42 pages à la minute. Nous réaliserons un check toutes les cinq minutes, ce qui donne une valeur max théorique de 42 pages x 5 minutes = 210 pages. Nous utiliserons pour notre plugin une valeur aléatoire ne dépassant pas 180.
#!/usr/bin/perl -w #=============================================================================== # Auteur : kermith72 # Date : 07/04/2014 # But : plugin Centreon Tutoriel RRD simulant l'activité d'une imprimante #=============================================================================== use strict; # rends le language moins permissif, déclaration de variable obligatoire,... use warnings; # affichage des avertissements, on peut utiliser /usr/bin/perl -w use Nagios::Plugin; # Chargement du module CPAN # déclaration variable $licence my $licence = "This program is free software; you can redistribute it and/or modify it under" ." the terms of the GNU General Public License as published by the Free Software" ." Foundation ; either version 2 of the License."; # déclaration de la sonde my $np = Nagios::Plugin->new( shortname => 'Test compteur imprimante', usage => 'Usage : %s -n|numero', license => $licence, version => '1.00', blurb => "Ce plugin est un test pour le RDD " ); # Définition de l'argument --numero ou -n $np->add_arg( spec => 'numero|n=f', help => 'numero fichier', # Aide au sujet de cette option required => 1, # Argument obligatoire ); # Récupération des valeurs de paramètres $np->getopts; # logique du programme #declaration des variables my $nbpage; my $pagetotal; my $filename; my $fh; my $command; my $code_retour; my $compteur; $filename = "/var/lib/centreon/centplugins/check_imp".$np->opts->numero.".tmp"; # lecture du résulat précédent if (-e $filename) { open ($fh, '<', $filename) or die "impossible d'ouvrir le fichier"; $compteur = <$fh>; close $fh; } else { $compteur = 0; } # nombre aléatoire entre 0 et 180 $nbpage = int rand(181); $pagetotal = $compteur + $nbpage; # sauvegarde du résultat open ($fh, '>', $filename) or die "impossible d'ouvrir le fichier"; print $fh $pagetotal; close $fh; # ajout des données de performances $np->add_perfdata( label => "compteur", value => $pagetotal ); # traitement du code retour $np->nagios_exit( OK, "all test imp OK $nbpage : $pagetotal"); __END__
Nous pouvons tester notre plugin avec l'exécution de la commande ci-dessous
./check_test_imp.pl -n 724
Test compteur imprimante OK - all test imp OK 178 : 178 | compteur=178;;
Si vous relancez la même commande avec le même numéro, le compteur va s'incrémenter.
./check_test_imp.pl -n 724
Test compteur imprimante OK - all test imp OK 164 : 342 | compteur=342;;
1.2 utilisation du plugin dans Centreon
Ce plugin ne pourra fonctionner que sur le serveur de supervision car il s'exécute en local et il utilise le dossier temporaire des plugins Centreon. Nous allons faire une configuration minimale.
1.2.a commande de plugin
Créez la commande, dans l'exemple ci-dessous, nous utilisons une macro personnalisée appelée $_SERVICEP0RT$ pour l'option n.
1.2.b le service
Créez le service pour le serveur de supervision. N'oubliez pas la macro, nous affecterons le numéro d'identification 257. Pensez à la relation au serveur de supervision avec le deuxième onglet. Nous n'affecterons pas de graphe par défaut.
Appliquez la configuration au serveur de supervision. Vous devriez avoir rapidement l'image ci-dessous :
1.3 Interprétation du graphe
Au bout de quelques heures, nous obtiendrons ce graphe.
Nous ne pouvons pas dire que cela correspond entièrement à nos attentes. En effet la courbe affiche une incrémentation quasi constante de la représentation d'un compteur du nombre de pages d'une imprimante. C'est le fonctionnement de la métrique de type GAUGE, adapté à la mesure des espaces de stockage, des seuils de températures, etc...
Nous devons utiliser la métrique de type COUNTER permettant de calculer la différence entre deux points d'enregistrement. La seule condition est de ne pas avoir de valeur inférieure par rapport à l'enregistrement précédent. Ce ne sera pas le cas dans notre exemple.
Nous devons utiliser la métrique de type COUNTER permettant de calculer la différence entre deux points d'enregistrement. La seule condition est de ne pas avoir de valeur inférieure par rapport à l'enregistrement précédent. Ce ne sera pas le cas dans notre exemple.
1.3.a Changement du type de métrique
Pour changer le type de métrique, sélectionnez Administration / Options / CentStorage / Manage. Repérez votre graphique et cliquez sur le service.
Le métrique compteur est du type GAUGE et nous voulons un type COUNTER. Sélectionnez votre métrique.
Sélectionnez le menu Set RRD Data Source Type to COUNTER
Votre métrique a changé de type.
Maintenant, vous devez absolument reconstruire la base de données RRD. Pour cela, retournez dans la vue manage de CentStorage, cochez le graphique et sélectionnez le menu Stop rebuilding RRD Databases.
Un indicateur vous indique que l'opération est pris en compte.
L'explication de la reconstruction de la base
Votre graphe a été créé avec le type GAUGE, comme l'indique cette commande. Le champ ds est de type GAUGE.
Votre graphe a été créé avec le type GAUGE, comme l'indique cette commande. Le champ ds est de type GAUGE.
rrdtool dump 16.rrd | more
0003 300 1398863929 value GAUGE 3000 NaN NaN
La reconstruction de la base permettra de changer le type au bout de quelques minutes (ou secondes en fonction de votre architecture) comme le montre cette commande réalisée après la reconstruction. Le champ ds a changé de type.
rrdtool dump 16.rrd | more
rrdtool dump 16.rrd | more
0003 300 1398863929 value COUNTER 3000 NaN NaN
Après quelques minutes, votre graphique est plus conforme à notre attente.
1.3.a Configuration de la courbe
Modifions la courbe, nous n'avons pas besoin des valeurs Last, Average. Nous garderons les valeurs Min et Max. Nous changerons la couleur et le label de la courbe. Pour cela, ajoutons une courbe. Sélectionnez Views / Graphs / Curves
Le graphique a changé avec les options désirées.
Spécifier le type de Data Source directement dans votre plugin.
Si vous utilisez Centreon-Broker, il est possible de spécifier directement dans le résultat de votre plugin le type de votre métrique. Pour notre cas, nous pouvons utiliser c pour COUNTER comme ci-dessous
Si vous utilisez Centreon-Broker, il est possible de spécifier directement dans le résultat de votre plugin le type de votre métrique. Pour notre cas, nous pouvons utiliser c pour COUNTER comme ci-dessous
# ajout des données de performances $np->add_perfdata( label => "c[compteur]", value => $pagetotal );
Le graphe sera identique au graphe affiché ci-dessus.
1.4 Afficher des données cohérentes
Nous avons un graphe, encore faut-il qu'il soit pratique et lisible. Les valeurs verticales indique des millièmes (m). Cela ne correspond pas à notre attente de valeur de page par minutes. En fait, les valeurs correspondent au nombre de pages par seconde. Explication : Rrdtool va stocker le résultat de la différence entre la valeur actuelle et la valeur enregistrée. le résultat sera divisé par l'intervalle de temps.
Exemple :
le compteur affiche 6000 à 8 h 00
il affiche 6060 à 8 h 05
résultat : (6060-6000)/300s = 0,2 pages / seconde de moyenne à 8 h 05
Pour arriver à un résultat cohérents en pages par minute, nous allons créer une métrique virtuelle que nous associerons avec le graphe.
Exemple :
le compteur affiche 6000 à 8 h 00
il affiche 6060 à 8 h 05
résultat : (6060-6000)/300s = 0,2 pages / seconde de moyenne à 8 h 05
Pour arriver à un résultat cohérents en pages par minute, nous allons créer une métrique virtuelle que nous associerons avec le graphe.
1.4.a Créer une métrique virtuelle
Pour créer une métrique virtuelle, sélectionnez Views / Graphs / Metrics. Cliquez sur Add
Metric Name : ppm
Host / Service : supervision / test_compteur
DEF Type : CDEF
RPN : compteur,60,*
Warning Threshold : 35
Critical Threshold : 40
Comments : métrique nb de page par minute
Sauvez votre métrique et visualisez de suite votre graphique.
Rajoutons les deux lignes dans le fichier caché .profile. Nous avons une représentation de l'activité plus conforme à nos attentes. Il reste à customiser notre courbe ppm et le graphique en général. Commençons par la courbe.
Puis le template du graphique, ajoutons un template graphe_impression
Affectez le template graphe_impression au service test_compteur.
Admirons le résultat. la couleur de la courbe précédente est modifiée pour une couleur proche du blanc afin de la faire disparaître au maximum. Nous avons bien des valeurs Nb pages / minute.
1.5 Test de validité du plugin
Afin de vérifier la validité dama configuration, j'ai modifié mon plugin pour simuler le fonctionnement maximum de notre imprimante virtuelle soit 42 pages à la minute. Comme nous réalisons un check toutes les cinq minutes, il suffit d'incrémenter le compteur de 42 pages x 5 minutes = 210 pages.
# nombre 42 pages à la minutes soit 42 x 5 = 210 $nbpage = 210; $pagetotal = $compteur + $nbpage;
Et voici le graphe. La courbe indique bien un fonctionnement de maximum de 42 pages à la minute.