Announcement

Collapse
No announcement yet.

Création d'un nouveau plugin check_graph_snmp_ink.pl

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Création d'un nouveau plugin check_graph_snmp_ink.pl

    "Projet de monitoring d'un réseau multisite avec oreon/nagios"

    Bonjour,

    Pour mon stage, je dois monitorer des imprimantes snmp(niveaux encre, compteurs divers et remonté d'erreur).
    De plus la plupart des imprimantes sont sur des sites distants, j'envisage plus un solution basé sur NSCA.

    Pour le moment je n'ai pas besoin d'utiliser les trap snmp car un check toutes les 2 heures est plus que suffisant pour contrôler des niveaux d'encre ou le nombre de page imprimé.
    Le problème se poseras peut être après mais l'important et de savoir si l'imprimante est en état de faire sont travail(pas obliger de savoir quel est le problème précis).

    Après avoir testé le plugin check_hpjd qui me remonte l'a même chose que l'affichage lcd de l'imprimante(pour mes tests j'utilise une imprimante OKI Laser Couleur C5300).

    J'ai cherché dans la MIB les OIDs qui correspondaient aux niveaux d'encre :
    Black : 1.3.6.1.4.1.2001.1.1.1.1.100.3.1.1.3.1
    Cyan : 1.3.6.1.4.1.2001.1.1.1.1.100.3.1.1.3.2
    Magenta : 1.3.6.1.4.1.2001.1.1.1.1.100.3.1.1.3.3
    Yellow : 1.3.6.1.4.1.2001.1.1.1.1.100.3.1.1.3.4

    Je me suis mis au perl pour faire un plugin qui doit vérifier les niveaux via SNMP.

    L'objectif et de retourner une ligne du style :
    "Ink OK - black=79% cyan=85% magenta=85% yellow=84%"

    Pour y arrivé je me suis aidé du plugin OREON check_graph_ping.
    Mon souci est que je ne comprend pas très bien le fonctionnement de certaines parties :
    Code:
    if ($opt_w =~ /([0-9]+),([0-9]+)%/) {
         $rta_warning = $1;
         $pl_warning = $2;
    qu'est ce que récupèrent $rta_warning et $pl_warning?
    Ainsi que la partie plugin init, je n'en saisi pas toutes les suptilités.

    Quelqu'un pourais me commenter le plugin check_graph_ping en particulier les parties près cités, cela me serait d'une grande aide.
    Debian3.1r1 - Nagios 1.2 - Nagios Plugins 1.3.1 - Oreon 1.2.3RC4
    Status : OK
    Status information : NSCA OK.

  • #2
    Re: Création d'un nouveau plugin

    Originally posted by jigot
    "Projet de monitoring d'un réseau multisite avec oreon/nagios"

    Bonjour,

    [...]

    L'objectif et de retourner une ligne du style :
    "Ink OK - black=79% cyan=85% magenta=85% yellow=84%"

    Pour y arrivé je me suis aidé du plugin OREON check_graph_ping.
    Mon souci est que je ne comprend pas très bien le fonctionnement de certaines parties :
    Code:
    if ($opt_w =~ /([0-9]+),([0-9]+)%/) {
         $rta_warning = $1;
         $pl_warning = $2;
    qu'est ce que récupèrent $rta_warning et $pl_warning?
    Ainsi que la partie plugin init, je n'en saisi pas toutes les suptilités.

    Quelqu'un pourais me commenter le plugin check_graph_ping en particulier les parties près cités, cela me serait d'une grande aide.
    En fait, l'argument des options -w et -c sont composés en deux parties : [rta],[percent lost]
    L'objectif de la regex est donc de récupérer les deux valeurs.
    Entre crochets, il s'agit d'une classe de caractères (les chiffres de 0 à 9, en l'occurence dans les deux cas). Le caractère + recherche la dite classe au moins fois et plus.
    Entre parenthèses, il s'agit d'un groupement qui sera transmis dans les variables $x où x est un nombre entier. La valeur du premier groupe correspondra à la variable $1 et ainsi de suite. Attention toutefois, ces variables sont volatiles. À chaque utilisation d'une telle regex, elles sont automatiquement ré-utilisées.
    Le second groupe est délimité juste entre la virgule après le premier groupe et le caractère %.
    J'espère que ce sera plus clair.
    Raphaël 'SurcouF' Bordet
    Je ne teste pas mes plugins en root, tu ne testes pas tes plugins en root...
    Dons Paypal

    Comment


    • #3
      Merci pour ta réponse.

      J'ai avancé, j'ai testé un première version sans la gestion de oreon sur ma machine perso, ca marche nickel.

      Je viens de modifier avec des trucs que j'ai repris sur check_graph_ping comme par exemple dans la partie plugin init :
      Code:
      use strict;
      
      use FindBin qw($Bin);
      use lib "$Bin";
      use oreon;
      use vars qw($VERSION %oreon);
      use vars qw(%oreon);
      BEGIN
      {
          %oreon=oreon::get_parameters;
      }
      
      use lib $oreon{NAGIOS_LIBEXEC} ;
      J'ai pas encore pu tester sur le serveur de supervision.
      Il y a surment du ménage à faire ou des trucs à écrire différement.
      Attached Files
      Debian3.1r1 - Nagios 1.2 - Nagios Plugins 1.3.1 - Oreon 1.2.3RC4
      Status : OK
      Status information : NSCA OK.

      Comment


      • #4
        Bon je viens de tester mon plugin sur la plateforme Oreon.

        En ligne de commande ca marche très bien avec les options et tout
        Il en va de même pour l'utilisation dans oreon.

        C'est que du bonheur [/code]
        Debian3.1r1 - Nagios 1.2 - Nagios Plugins 1.3.1 - Oreon 1.2.3RC4
        Status : OK
        Status information : NSCA OK.

        Comment


        • #5
          Originally posted by jigot
          Merci pour ta réponse.

          J'ai avancé, j'ai testé un première version sans la gestion de oreon sur ma machine perso, ca marche nickel.

          Je viens de modifier avec des trucs que j'ai repris sur check_graph_ping comme par exemple dans la partie plugin init :
          Code:
          use strict;
          
          use FindBin qw($Bin);
          use lib "$Bin";
          use oreon;
          use vars qw($VERSION %oreon);
          use vars qw(%oreon);
          BEGIN
          {
              %oreon=oreon::get_parameters;
          }
          
          use lib $oreon{NAGIOS_LIBEXEC} ;
          J'ai pas encore pu tester sur le serveur de supervision.
          Il y a surment du ménage à faire ou des trucs à écrire différement.
          Juste une petite remarque: il aurait mieux valu t'appuyer sur un autre plugin car il est dommage d'exécuter les commandes snmpwalk et snmpget alors qu'il existe des modules Perl qui permettent ainsi d'éviter d'utiliser trop de forks. Quand le système est chargé, cela peut vite faire la différence.
          Raphaël 'SurcouF' Bordet
          Je ne teste pas mes plugins en root, tu ne testes pas tes plugins en root...
          Dons Paypal

          Comment


          • #6
            Hello,

            Comme te le suggeres Surcouf, inspires -toi peut etre du plugin check_graph_dell_temperature.pl
            StatusMap Module - NDO Tools Module - ImportCSV Module - SNMP-UI Module - PDFReports Module
            Dons Paypal

            Comment


            • #7
              En suivant vos conseils, je me suis remis à l'écriture de se plugin.

              Je vais ainsi utiliser le module Net::SNMP de perl en me basant sur check_graph_dell_temperature.pl.

              De plus mon objectif étant de fournir un plugin standard (je ne souhaite pas réécrire mon plugin pour chaque imprimante à superviser), j'ai testé avec succès l'utilisation du module XPATH pour rechercher les oid dans un fichier de conf xml.

              Je prefère utilister xml qui est plus compréhensible et facile à mettre à jour qu'un fichier texte.

              programme perl de test pour le xml :
              Code:
              #!/usr/bin/perl
              
              # utiliser le module
              use XML::XPath;
              use XML::XPath::XMLParser;
              
              # créer un objet
              my $xp = XML::XPath->new(filename => 'printer_oid.xml');
              my $oidb;
              my $oidc;
              my $oidm;
              my $oidy;
              
              # accéder aux données XML
              foreach my $model ($xp->find('/constructor[@name="oki"]/model[@name="C5300"]')->get_nodelist) {
              	$oidb = $model->find('black');
              	$oidc = $model->find('cyan');
              	$oidm = $model->find('magenta');
              	$oidy = $model->find('yellow');
              }
              
              # afficher le résultat
              print "black oid : $oidb\n";
              print "cyan oid : $oidc\n";
              print "magenta oid : $oidm\n";
              print "yellow oid : $oidy\n";
              Le fichier xml d'exemple (printer_oid.xml):
              Code:
              <?xml version='1.0'?>
              <constructor name='oki'>
                      <model name='C5300'>
              		<black>1.3.6.1.4.1.2001.1.1.1.1.100.3.1.1.3.1</black>
              		<cyan>1.3.6.1.4.1.2001.1.1.1.1.100.3.1.1.3.2</cyan>
              		<magenta>1.3.6.1.4.1.2001.1.1.1.1.100.3.1.1.3.3</magenta>
              		<yellow>1.3.6.1.4.1.2001.1.1.1.1.100.3.1.1.3.4</yellow>
              	</model>
              </constructor>
              L'idée et de passer la marque et le model de l'imprimante en parametre du check d'où l'utilisation de :
              Code:
              find('/constructor[@name="oki"]/model[@name="C5300"]')
              où les chaines de caractère seront remplacées par des variables.

              A noter que je ne suis pas encore très à l'aise dans l'écriture du perl mais ca commence à rentrer
              Debian3.1r1 - Nagios 1.2 - Nagios Plugins 1.3.1 - Oreon 1.2.3RC4
              Status : OK
              Status information : NSCA OK.

              Comment


              • #8
                oki, tu aurais aussi pu utiliser le fichier oreon.conf qui contient déjà différent OID utilisé par d'autres plugins. Mais ton bout de code XML n'est pas mal, je le garde dans un coin
                StatusMap Module - NDO Tools Module - ImportCSV Module - SNMP-UI Module - PDFReports Module
                Dons Paypal

                Comment


                • #9
                  Le souci de ces oid est que pour ce projet je vais avoir une liste d'oid à utiliser pour chaque model d'imprimante.

                  Et pour chaque nouveau model à monitorer il n'y a qu'un seul fichier xml à modifier.

                  De plus ce fichier xml devrais à terme contenir d'autre oid correspondant à divers compteur de nombre de pages imprimés, ...
                  Afin d'être utilisé par un autre plugin que je doit mettre en place.

                  Ainsi avec l'utilisation des graphs dans oreon il seras possible de visualiser l'utilisation de l'imprimante en fonction du temps (déceler une utilisation anormalement intensive entre 12h et 13h par exemple).
                  Debian3.1r1 - Nagios 1.2 - Nagios Plugins 1.3.1 - Oreon 1.2.3RC4
                  Status : OK
                  Status information : NSCA OK.

                  Comment


                  • #10
                    Originally posted by jigot
                    Et pour chaque nouveau model à monitorer il n'y a qu'un seul fichier xml à modifier.
                    pareil pour le fichier oreon.conf
                    mais bon, j'insiste pas :roll:
                    StatusMap Module - NDO Tools Module - ImportCSV Module - SNMP-UI Module - PDFReports Module
                    Dons Paypal

                    Comment


                    • #11
                      J'ai un peu regardé le fichier oreon.conf (faut pas mourrir idiot).

                      Je vois pas trop comment l'utiliser à la manière de ce que permet le xml.
                      C'est a dire, une base de donnée hierrachique très visuelle et compréhensible et facile à étendre et à mettre à jour.

                      Car si je me retrouve avec une dixaine d'oid par model d'imprimante et qu'il y a une cinquantaine d'imprimantes voir plus ca va pas être la joie pour modifier ou ajouter quelquechose.

                      Après je fait peut être fausse route. Je ne crois pas avoir un avis très objectif sur la question étant encore qu'un étudiant qui débute sous oreon et en perl.

                      Mais en tout cas merci pour les conseils.
                      Debian3.1r1 - Nagios 1.2 - Nagios Plugins 1.3.1 - Oreon 1.2.3RC4
                      Status : OK
                      Status information : NSCA OK.

                      Comment


                      • #12
                        Petite modif pour ceux qui ne l'auraient pas remarqué, j'ai fait une petite erreur dans mon exemple de testxml.pl, je n'affiche que les oid du dernier model du fichier xml.
                        Pour avoir la liste des oid par model, il faudrait plutot écrire :
                        Code:
                        #!/usr/bin/perl
                        
                        # utiliser le module
                        use XML::XPath;
                        use XML::XPath::XMLParser;
                        
                        # créer un objet
                        my $xp = XML::XPath->new(filename => 'printer_oid.xml');
                        my $oidb;
                        my $oidc;
                        my $oidm;
                        my $oidy;
                        
                        # accéder aux données XML
                        foreach my $model ($xp->find('/constructor[@name="oki"]/model[@name="C5300"]')->get_nodelist) {
                        	print $model->find('@name')." :\n";
                        	$oidb = $model->find('black');
                        	$oidc = $model->find('cyan');
                        	$oidm = $model->find('magenta');
                        	$oidy = $model->find('yellow');
                        	
                        	# afficher le résultat
                        	print "black oid : $oidb\n";
                        	print "cyan oid : $oidc\n";
                        	print "magenta oid : $oidm\n";
                        	print "yellow oid : $oidy\n";
                        }
                        Debian3.1r1 - Nagios 1.2 - Nagios Plugins 1.3.1 - Oreon 1.2.3RC4
                        Status : OK
                        Status information : NSCA OK.

                        Comment


                        • #13
                          Wistof, tu pourrais nous faire oreon.conf en xml après tout :wink:
                          Intel(R) Xeon(TM) CPU 3.4GHz - MemTotal : 1034476 kB
                          Centreon 2.4.1 - Nagios 3.2.1 - Nagios Plugins 1.4.15 - Manubulon Plugins tuné
                          Fedora Core 5 - 2.6.20-1.2320

                          Comment


                          • #14
                            C'est ça qui est formidable et que j'aime dans l'informatique (la prog en particulier). A un problème, il y a une multitudes de solution.

                            Je ne suis pas un spécialiste mais il me semble que ce langage est bien adapté aux fichiers de configuration car très souple et facile à étendre surtout dans le cas d'une utilisation par plusieur plugins

                            D'une certaine manière ca me rappelle le snmp où chaque fabricant implémente sa partie dans iso.org.dod.internet.private.enterprises.*

                            Mais dans le cas du fichier de oreon.conf, sa structure dépendrait alors des plugins qui sont installés. Il faudrait faire attention aux conflits entre les plugins utilisant ce fichier unique : ajouter les infos à la main dans le fichier pour chaque plugin ou alors laisser la gestion à oreon ou aux plugins eux même.

                            Enfin bon, comme d'habitude tout est possible. Reste à savoir si cela repond bien au besoin.
                            Debian3.1r1 - Nagios 1.2 - Nagios Plugins 1.3.1 - Oreon 1.2.3RC4
                            Status : OK
                            Status information : NSCA OK.

                            Comment


                            • #15
                              L'avantage c'est que ca ressemble à une MIB en effet, donc chaque développeur peut y glisser ses bouts de variable sans géner les autres (il se réserve une branche dans l'arbo XML)
                              Intel(R) Xeon(TM) CPU 3.4GHz - MemTotal : 1034476 kB
                              Centreon 2.4.1 - Nagios 3.2.1 - Nagios Plugins 1.4.15 - Manubulon Plugins tuné
                              Fedora Core 5 - 2.6.20-1.2320

                              Comment

                              Working...
                              X