[PERL] Supervisation d'un onduleur et alerte

Supervisation d'un onduleur et alerte [PERL] - Perl - Programmation

Marsh Posté le 31-01-2008 à 16:44:10    

salut à tous,
j'ai un petit problème.  
Dans le cadre de mon projet de fin d'année, je dois ajouter au logiciel de monitoring NAGIOS, un plugin qui va recuperer la temperature interne d'un onduleur.
Pour cela je me sert du protocole SNMP et de la MIB de l'onduleur.
Une fois le T° récupérée, je dois faire en sorte que si la T° est trop élevée, NAGIOS nous informe par SMS et/ou email de la situation.
 
Pour le moment, j'ai réalisé un script qui récupère bien la T° voulue :
 

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use Net::SNMP;
  4. my ($session, $error) = Net::SNMP->session(
  5.       -hostname  => shift || '192.168.254.250', \\adresse IP de l'onduleur\\
  6.       -community => shift || 'public',
  7.       -port      => shift || 161
  8.                                               );
  9. if (!defined($session)) {
  10.     printf("ERROR: %s.\n", $error);
  11.     exit 1;
  12. }
  13. \\MIB de la T° interne de l'onduleur\\
  14. my $temperature = '1.3.6.1.4.1.705.1.5.7.0';
  15. my $result = $session->get_request(-varbindlist => [$temperature]);
  16. if (!defined($result)) {
  17.     printf("ERROR: %s.\n", $session->error);
  18.     $session->close;
  19.     exit 1;
  20. }
  21. printf("la Temperature dans la salle machine est de %s degres\n",
  22.   $result->{$temperature});
  23. $session->close;
  24. exit 0;


 
La T° interne doit être de 20° maxi.
Cependant, je ne sais pas comment faire pour comparer la T° et voir si elle est supérieur à 20°. Et ensuite, si elle est >20° être alerté...
 
Pourriez-vous m'aider ?
merci bcp pour vos réponses ;)

Reply

Marsh Posté le 31-01-2008 à 16:44:10   

Reply

Marsh Posté le 31-01-2008 à 16:53:09    

lire la doc?
( en même temps if c'est quand même la base :/ )


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 31-01-2008 à 17:16:24    

OK je connais très bien les if.
Mais pour Nagios, est-ce que je dois créer deux scripts différents ou faire le test de la T° dans celui-ci ?

Reply

Marsh Posté le 31-01-2008 à 19:58:33    

dans nagios tu dois renvoyer un code retour suivant les états suivants :
 'OK'      => 0,
 'WARNING' => 1,
 'CRITICAL'=> 2,
 'UNKNOWN' => 3

Reply

Marsh Posté le 31-01-2008 à 21:23:52    

'lut couak,
merci pour ta réponse.
En effet, je crois que j'ai du mal a comprendre comment fonctionne Nagios en fait.
C'est ces "états" que je ne comprend pas vraiment et comment les interpreter...et les imcorporer dans le script.
 
 :sarcastic:

Reply

Marsh Posté le 31-01-2008 à 21:47:19    

c'est toi qui définit les interprétation de ces états, nagios ne fait que récupérer le code retour
en perl, pour le code retour c'est comme en shell :

Code :
  1. exit X;


avec X le numéro du code retour


Message édité par couak le 31-01-2008 à 21:47:31
Reply

Marsh Posté le 31-01-2008 à 22:46:17    

OK j'esayerai cela au taff demain.
merci bien en tout cas.
bonne soirée

Reply

Marsh Posté le 05-02-2008 à 14:46:30    

salut,
voici mon plug, je pense qu'il fonctionne puisqu'il me retourne T° correcte
 

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use Net::SNMP;
  4. my ($session, $error) = Net::SNMP->session(
  5.       -hostname  => shift || '192.168.254.250',
  6.       -community => shift || 'public',
  7.       -port      => shift || 161
  8.                                            );
  9. my %ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3,'DEPENDENT'=>4);
  10. if (!defined($session)) {
  11.     printf("ERROR: %s.\n", $error);
  12.     exit 1;
  13. }
  14. my $temperature = '1.3.6.1.4.1.705.1.5.7.0';
  15. my $result = $session->get_request(-varbindlist => [$temperature]);
  16. if (!defined($result)) {
  17.     printf("ERROR: %s.\n", $session->error);
  18.     $session->close;
  19.     exit 1;
  20. }
  21. if( ($result->{$temperature} > 18 ) or ($result->{$temperature} < 25 ) ){
  22.     printf("temperature correcte" );
  23.     exit $ERRORS{'OK'};
  24.     $session->close;
  25. }else{
  26.     if( ($result->{$temperature} > 25 ) or ($result->{$temperature} < 28 ) ){
  27.         printf("Attention seuil de temperature limite" );
  28. exit $ERRORS{'WARNING'};
  29.         $session->close;
  30.     }else{
  31.         if( $result->{$temperature} >28 ){
  32.             printf("seuil de temperature critique atteint" );
  33.     exit $ERRORS{'CRITICAL'};
  34.             $session->close;
  35. }       } }

Reply

Marsh Posté le 07-02-2008 à 09:19:51    

Si la température est de 18, 25 ou 28 degrés exactement, tu fais quoi ?

Reply

Marsh Posté le 07-02-2008 à 10:05:13    

et si la température est inférieur à 18 ?
 
en perl tu as le mot-clé "elsif", ca aide pour éviter de faire des boucles immondes

Reply

Marsh Posté le 07-02-2008 à 10:05:13   

Reply

Marsh Posté le 07-02-2008 à 11:30:51    

Ah et aussi je crois que tu veux dire "and", pas "or". La température est correcte si elle est supérieure à 18 ET inférieure à 25. Tu est au seuil si elle et supérieure à 25 ET inférieure à 28.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed