Forum Astuces.divers [Terminal] Test CPU dans Nagios

Posté par  (site web personnel) .
Étiquettes : aucune
0
21
déc.
2003
Je viens de remettre la main sur certains de mes scripts donc j'en profite pour les filer !!!

On peut constater que dans Nagios ( Outils de Monitoring ) nous avons la possibilité de checker un certain nombre de services ou de paramètres d'une machine. Or on ne retrouve pas un test de la charge CPU, donc je vous propose un script qui vous permets de le faire :
check_cpu.pl
qui prend deux arguments : le pourcentage du CPU pour declencher une alerte avertissement et celui d'une alerte critique :


#!/usr/bin/perl
#
#
# check_cpu.pl [warn] [critical]
# Nagios script to get the cpu usage from procinfo
#
# Changes and Modification
# ========================
# 07-Sept-2002 - Benjamin Jakubowski
# Created from check_cpu.pl for LDAP Serveur use 100% CPU

sub print_help ();
sub print_usage ();
$PROGNAME = "check_cpu";
if ( @ARGV[0] eq "" || @ARGV[1] eq "" )
{
print_usage ();
exit 0;
}
@toto = `procinfo | grep idle | awk \'{print \$5}\'`;
$warning = @ARGV[0];
$critik = @ARGV[1];
$STATE_CRITICAL = 2;
$STATE_OK = 0;
$STATE_WARNING = 1;

@cpu = 100-@toto[0];
if ( $cpu[0] >= $critik )
{
printf "CRITICAL : use @cpu%";
printf " idle : @toto";
exit $STATE_CRITICAL
;;
}

if (($cpu[0] < $critik)&&($cpu[0] < $warning))
{
printf "OK : use @cpu%";
printf " idle : @toto\n";
exit $STATE_OK
;;
}
if (($cpu[0] >= $warning)&&($cpu[0] < $critik))
{
printf "WARNING : use @cpu%";
printf " idle : @toto\n";
exit $STATE_WARNING
;;
}


sub print_help ()
{
print($PROGNAME,': 1.0');
printf "\n";
print "Copyright (c) 2002 Benjamin Jakubowski \
Perl Check CPU Usage plugin for Nagios \
";
}
sub print_usage ()
{
print_help();

printf "\n\nUsage : check_cpu.pl [warn] [critical]\n
warn, INTEGER
Number of CPU Space at wich a warning will be generated ( No Default )
critical, INTEGER
Number of CPU Space at wich a critical will be generated ( No Default )\n";
}



PS : Bon c'est sur exécuter une commande système dans Perl c'est pas nickel mais bon ça marche !!!
  • # Re: Test CPU dans Nagios

    Posté par  (site web personnel) . Évalué à 1.

    PS : Bon c'est sur exécuter une commande système dans Perl c'est pas nickel mais bon ça marche !!!

    Au contraire c'est en partie fait pour ça.
    • [^] # Re: Test CPU dans Nagios

      Posté par  . Évalué à 3.

      D'accord pour procinfo, c'est encore la méthode la plus simple et la plus rapide.
      Par contre, grep et awk... ça c'est dommage, surtout que perl est fait pour gérer les chaines facilement et efficacement. C'est pas tellement pour la performance, c'est pour le principe ;)

      (je passe sur le choix des noms de variables, perso je déteste les variables n'ayant pas un nom renseignant sur leur utilité, mais bon, c'est un choix)

      D'autre part, pourquoi toto et cpu sont-ils des tableaux ? il n'y a jamais qu'une seule valeur... et je n'ai pas vu (mais j'ai pe mal regardé) d'endroit ou un contexte de liste était nécessaire...

      Bon, comme critiquer sans rien proposer c'est Mal©, voici un patch sans fork autre que l'appel à procinfo, et 2/3 autres modifs...

      (la prochaine fois, la critique ce sera l'absence de licence quelconque et le fait que use strict; c'est Bien©... mais là il est tard et j'ai la flemme... sans compted que j'utilise plutôt check_load, moi) ;)

      allez, le patch promis :

      --- check_cpu.pl.bak 2004-04-10 03:10:54.000000000 +0200
      +++ check_cpu.pl 2004-04-10 03:09:56.000000000 +0200
      @@ -8,6 +8,9 @@
      # ========================
      # 07-Sept-2002 - Benjamin Jakubowski
      # Created from check_cpu.pl for LDAP Serveur use 100% CPU
      +#
      +# 10-Apr-2004 - Clement Hermann
      +# removing grep and awk call in @toto, @cpu is now $cpu...

      sub print_help ();
      sub print_usage ();
      @@ -17,33 +20,36 @@
      print_usage ();
      exit 0;
      }
      -@toto = `procinfo | grep idle | awk \ '{print \$5}\'`;
      +@toto = grep (/idle/, `procinfo`);
      +chomp $toto[0];
      +$toto[0] =~ s/.*\s+([\d\.]+)%.*/$1/;
      +print "$toto[0]\n";
      $warning = @ARGV[0];
      $critik = @ARGV[1];
      $STATE_CRITICAL = 2;
      $STATE_OK = 0;
      $STATE_WARNING = 1;

      -@cpu = 100-@toto[0];
      -if ( $cpu[0] >= $critik )
      +$cpu = 100-$toto[0];
      +if ( $cpu >= $critik )
      {
      - printf "CRITICAL : use @cpu%";
      - printf " idle : @toto";
      + printf "CRITICAL : use $cpu%";
      + printf " idle : $toto[0]%";
      exit $STATE_CRITICAL
      ;;
      }

      -if (($cpu[0] < $critik)&&($cpu[0] < $warning))
      +if (($cpu < $critik)&&($cpu < $warning))
      {
      - printf "OK : use @cpu%";
      - printf " idle : @toto\n";
      + printf "OK : use $cpu%";
      + printf " idle : $toto[0]%\n";
      exit $STATE_OK
      ;;
      }
      -if (($cpu[0] >= $warning)&&($cpu[0] < $critik))
      +if (($cpu >= $warning)&&($cpu < $critik))
      {
      - printf "WARNING : use @cpu%";
      - printf " idle : @toto\n";
      + printf "WARNING : use $cpu%";
      + printf " idle : $toto[0]%\n";
      exit $STATE_WARNING
      ;;
      }

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.