Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation et administration système Perl Discussion :

Plugin Nagios en Perl


Sujet :

Programmation et administration système Perl

  1. #1
    Candidat au Club
    Plugin Nagios en Perl
    Bonjour,

    Je planche actuellement sur un script perl permettant de vérifier le nom des Lun sur une baie Netapp, et de retourner une valeur si l'une d'entre elle contient "_Backup".
    Malheureusement je n'arrive pas à le faire fonctionner.

    J'utilise Nagios:lugin, car Monitoring:lugin n'est pas installé sur mon serveur Nagios.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #!/usr/bin/perl
     
    use strict;
    use warnings;
    use Nagios:<img src="images/smilies/icon_razz.gif" border="0" alt="" title=":P" class="inlineimg" />lugin;
     
      my $plugin = Nagios:<img src="images/smilies/icon_razz.gif" border="0" alt="" title=":P" class="inlineimg" />lugin->new(
          usage => "Usage: %s [-V <host>] [-V <snmp version>] [-c <community>]"
      );
     
      $plugin->add_arg(
          spec    => 'host|H=s@',
          help    => "--host NAME\n   Ip address of the controller to check",
              required => 1,
      );
     
      $plugin->add_arg(
          spec    => 'version|V=s@',
          help    => "--version NAME\n   The version of the snmp community (1/2c/3)",
              required => 1,
      );
     
      $plugin->add_arg(
          spec    => 'community|c=s@',
          help    => "--community NAME\n   The name of the snmp community",
              required => 1,
      );
     
     $plugin->getopts();
     my $opts = $plugin->opts();
     
      my $host                      		= $opts->get('host');
      my $version                           = $opts->get('version');
      my $community                         = $opts->get('community');
     
    my $Backup = `snmpwalk -v $version -c $community $host 1.3.6.1.4.1.789.1.17.15.2 | grep *_Backup | wc -l`;
     
     
    if ( $Backup != 0  ) {
    	print "Présence de backup de LUN";
    	exit 2;
    }
    else {
    	print "Pas de Backup de LUN présent";
    	exit 0;
    }


    Le script se coupe à "$plugin->getopts();" (vérifier à l'aide d'un print placé après chaque action). J'ai donc essayer la version que vous proposer dans votre tuto à savoir:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    $plugin->getopts;
    my $host = $plugin->opts->host;
    my ...


    Mais sans résultat, le script ce coupe de la même manière.
    Je dois très certainement oublié quelque chose, ou le faire de la mauvaise manière mais je n'arrive pas à trouver ou/quoi.

  2. #2
    Responsable Perl et Outils

    Bonjour,

    Tu as lu cette documentation Concevoir facilement un plugin Nagios en Perl ?
    Tu ne peux pas faire installer le module Monitoring:lugin sur ton serveur ?
    Tu utilises quelle version de Perl ?

  3. #3
    Candidat au Club
    Bonjour,

    Citation Envoyé par djibril Voir le message
    Bonjour,

    Tu as lu cette documentation Concevoir facilement un plugin Nagios en Perl ? Oui, très bien faites d'ailleurs.
    Tu ne peux pas faire installer le module Monitoring:lugin sur ton serveur ? Malheureusement non, je n'ai pas les droits nécessaires, et ce n'est pas un projet prévu dans un futur proche.
    Tu utilises quelle version de Perl ? v5.10.1, de même que pour le module je n'ai pas la possibilité de le mettre à jour.

  4. #4

  5. #5
    Candidat au Club
    Je viens d'essayer, sans résultat j'ai toujours le même problème.

    Afin d'êtres plus parlant, voila le script que j'utilise pour tester le bon fonctionnement:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    #!/usr/bin/perl
     
    use strict;
    use warnings;
    use Nagios:<img src="images/smilies/icon_razz.gif" border="0" alt="" title=":P" class="inlineimg" />lugin;
     
    print "1";
     
      my $plugin = Nagios:<img src="images/smilies/icon_razz.gif" border="0" alt="" title=":P" class="inlineimg" />lugin->new(
          usage => "Usage: %s [-H <host>] [-V <snmp version>] [-c <community>]"
      );
     
      $plugin->add_arg(
          spec    => 'host|H=s',
          help    => "--host NAME\n   Ip address of the controller to check",
              required => 1,
      );
     
      $plugin->add_arg(
          spec    => 'version|V=s@',
          help    => "--version NAME\n   The version of the snmp community (1/2c/3)",
              required => 1,
      );
     
      $plugin->add_arg(
          spec    => 'community|c=s@',
          help    => "--community NAME\n   The name of the snmp community",
              required => 1,
      );
     
    print "2";
     
    $plugin->getopts();
     
    print "3";
     
      my $opts = $plugin->opts();
      my $host = $opts->get('host');
      my $version = $opts->get('version');
      my $community = $opts->get('community');
     
    print "4";
     
    my $Backup = `snmpwalk -v $version -c $community $host 1.3.6.1.4.1.789.1.17.15.2 | grep *_Backup | wc -l`;
     
    if ( $Backup != 0  ) {
            print "Présence de backup de LUN";
            exit 2;
    }
    else {
            print "Pas de Backup de LUN présent";
            exit 0;
    }


    Les print me permettent de repérer ou le script bloque, j'ai donc comme retour en console "12check_test.pl".

  6. #6
    Responsable Perl et Outils

    Hum. Le bogue est étrange quand même.
    Sincèrement, là faut que tu vois avec ton admin système pour qu'il te fasse la mise à jour de quelques modules.
    Tu lui donnes les commandes pour mettre à jour certains modules pour qu'il le fasse sur le serveur.

  7. #7
    Candidat au Club
    Désoler pour ce retour un peu tardif.

    Donc finalement j'ai réussi à "contourner" le problème... j'ai fini par faire un script Bash et oh miracle cela fonctionne.
    Malheureusement, mettre à jour des modules est une tache colossal car nous avons un assez grand nombre de solution de supervision de déployer et cela demanderai des ressources dont nous ne disposerons pas avant plusieurs mois.

    Je laisse ici le code qui fonctionne si cela peut aider quelqu'un:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    #!/bin/bash
    #
    # Check the presence of LUN Backup
    #
    # Date: 2017-08-08
    # Author: Axel Lucas
    #
    # the memory check is done with following command line:
    # snmpwalk -v $Version -c $Community $Host 1.3.6.1.4.1.789.1.17.15.2 | grep *_Backup | wc -l
     
    # get arguments
     
    while getopts 'H:V:C:hp' OPT; do
      case $OPT in
        H)  Host=$OPTARG;;
        C)  Community=$OPTARG;;
        V)  Version=$OPTARG;;
        h)  hlp="yes";;
        *)  unknown="yes";;
      esac
    done
     
    # usage
    HELP="
        usage: $0 [ -H hostadress -V snmp_version -C snmp_community -p -h ]
     
        syntax:
     
                -H --> IP adress of the host
                -C --> SNMP Community
                -V --> SNMP Version to use (1/2c/3)
                -h --> print this help screen
    "
     
    if [ "$hlp" = "yes" -o $# -lt 1 ]; then
      echo "$HELP"
      exit 0
    fi
     
    # get list of lun and count it
    LUN_STAT=`snmpwalk -v $Version -c $Community $Host 1.3.6.1.4.1.789.1.17.15.2 | grep Backup | wc -l`
     
    # output result
    OUTPUT="There is $LUN_STAT Backup of lun present."
    err=0
     
      if (($LUN_STAT > 0)); then
        err=1
      elif (($LUN_STAT >= 2)); then
        err=2
      fi
     
      if (( $err == 0 )); then
          echo -n "OK - $OUTPUT"
          exit "$err"
     
      elif (( $err == 1 )); then
          echo -n "WARNING - $OUTPUT"
          exit "$err"
     
      elif (( $err == 2 )); then
          echo -n "CRITICAL - $OUTPUT"
          exit "$err"
     
      fi
     
    exit

###raw>template_hook.ano_emploi###