Vous êtes ici:

Menu

Stacks Image 8983
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.
Stacks Image 12626
la commande de plugin check_imprimante

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.
Stacks Image 12663
le service test_compteur
Stacks Image 12702
La relation service-hôte
Appliquez la configuration au serveur de supervision. Vous devriez avoir rapidement l'image ci-dessous :
Stacks Image 12739
le service en état de fonctionnement

1.3 Interprétation du graphe

Au bout de quelques heures, nous obtiendrons ce graphe.
Stacks Image 12775
premier 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.

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.
Stacks Image 12823
Choix du graphique
Le métrique compteur est du type GAUGE et nous voulons un type COUNTER. Sélectionnez votre métrique.
Stacks Image 12842
metric compteur
Sélectionnez le menu Set RRD Data Source Type to COUNTER
Stacks Image 12859
choix du type de metric
Stacks Image 12876
Confirmez votre choix
Votre métrique a changé de type.
Stacks Image 12893
metric de type COUNTER
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.
Stacks Image 12912
reconstruction de la base RRD
Un indicateur vous indique que l'opération est pris en compte.
Stacks Image 12939
reconstruction de la base RRD
Stacks Image 13115
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.
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.
Stacks Image 13022
Graphique avec un métrique de type COUNTER

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
Stacks Image 13044
Ajouter une courbe
Le graphique a changé avec les options désirées.
Stacks Image 13065
Ajouter une courbe
Stacks Image 13398
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
# 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.

1.4.a Créer une métrique virtuelle

Pour créer une métrique virtuelle, sélectionnez Views / Graphs / Metrics. Cliquez sur Add
Stacks Image 13471
création d'une métrique virtuelle
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.
Stacks Image 13486
Graphique avec la métrique virtuelle
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.
Stacks Image 13540
Courbe ppm
Puis le template du graphique, ajoutons un template graphe_impression
Stacks Image 13558
Ajouter un modèle de graphe graphe_impression
Affectez le template graphe_impression au service test_compteur.
Stacks Image 13597
Onglet Service Extended Info
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.
Stacks Image 13621
Graphique avec la métrique virtuelle

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.
Stacks Image 13660
vérification du plugin
comments powered by Disqus
 Vous êtes ici: