IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

script / seuil / récupérer sortie commande


Sujet :

Programmation et administration système Perl

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 4
    Par défaut script / seuil / récupérer sortie commande
    Bonjour à tous,

    Étant débutant dans la programmation, je suis confronté à un problème. Je dois mettre en place une supervision de QoS entre certaines machines du réseau, avec des seuils prédéfinis (avec le logiciel de supervision Centreon).
    J'utilise actuellement un script qui effectue un contrôle du débit (c'est à dire que les seuils associés au script se font uniquement sur le débit).
    Ce script fait appel à la commande "iperf", qui permet d'obtenir en sortie : 1.05 Mbits/sec 0.064 ms 0/ 893 (0%), nous avons en premier le débit, puis la gigue et enfin la perte de paquets.
    Or ce que je voudrais, c'est le même script mais qui contrôle la perte de paquet. Ayant tenté de modifier le code sous la section "open", je ne m'y retrouve pas, j'ai également effectué diverses recherches ("perl seuil sortie commande" ou des équivalents), mais je n'ai pas trouvé mon bonheur :/


    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    use strict;
     
    $ENV{'PATH'}='';
    $ENV{'BASH_ENV'}='';
    $ENV{'ENV'}='';
     
    my ($target,$exit);
    #my $iperf = "c:\\temp\\iperf.exe";
    my $iperf = "/usr/local/bin/iperf";
     
    if ($#ARGV+1 !=3) {
    	usage();
    	exit;
    } elsif (! -f "$iperf") {
    	print "didn't find iperf here '$iperf'.\n";
    	exit;
    } else {
    	$target = $ARGV[0];
    }
     
     
    our ($mtu,$connect_ok,$speed,$unit);
    $connect_ok = 0;
    $speed = "UNKNOWN";
     
    my ($maxwarn,$maxcrit,$minwarn,$mincrit);
    $mincrit = $ARGV[1];
    if ($mincrit =~ m/([0-9].+):([0-9].+)/) {
    	$mincrit = $1;
    	$maxcrit = $2;
    }
    $minwarn = $ARGV[2];
    if ($minwarn =~ m/([0-9].+):([0-9].+)/) {
    	$minwarn = $1;
    	$maxwarn = $2;
    }
     
     
    #print "DEBUG: $iperf -c $target -m\n";
    open(OUT, "$iperf -c $target -m -u|");
    while (<OUT>) {
    	chomp;
    	#print "DEBUG: '$_'\n";
    	if (m/TCP window size: ([0-9\.].+) (\w)/) {
    		$mtu = "$1 $2";
    	} elsif (m/connected with/) {
    		$connect_ok = 1;
    	} elsif (m/^\[.*\]  [0-9-\.].+ sec.*[0-9\.] .Bytes\s*([0-9].*) (.*)$/) {
    		#print "DEBUG: '$_' ; '$1', '$2' \n";
    		$speed = $1;
    		$unit = $2;
    	}
    }
     
    if ($connect_ok == 0) {
    	print "NOK: iperf didn't connect to '$target'.\n"; $exit = 2;
    } elsif ($speed<$mincrit) {
    	print "Critical: iperf speed of '$target': $speed ($unit) < $mincrit.\n";$exit=2;
    } elsif (defined($maxcrit) && $speed > $maxcrit) {
    	print "Critical: iperf speed of '$target': $speed ($unit) > $maxcrit.\n";$exit=2;
    } elsif ($speed < $minwarn) {
    	print "Warning: iperf speed of '$target': $speed ($unit) < $minwarn.\n";$exit=1;
    } elsif (defined($maxwarn) && $speed > $maxwarn) {
    	print "Warning: iperf speed of '$target': $speed ($unit) > $maxwarn.\n";$exit=2;
    } else {
    	#print "OK: iperf returns $speed $unit (wsize $mtu).\n"; $exit = 0;
    	print "OK: iperf returns (débit,gigue,perte) $speed $unit.\n"; $exit = 0;
    }
     
     
     
    sub usage {
    	print <<EOL
     $0 <target host> "Critical speed" "Warning speed": 
     	this plugin returns iperf usage
     
     examples:
    	$0 <host> 10 15: critical if speed under 10 units
    	$0 <host> 10 15:50: warning if speed out of 15:50 units
    	$0 <host> 10:100 15:90
    	$0 <host> 10:40 15:90
     
    EOL
     
    }
     
     
    exit $exit;
    Par rapport à la sortie de la commande (1.05 Mbits/sec 0.064 ms 0/ 893 (0%)),
    $speed = 1.05 Mbits/sec 0.064 ms 0/ 893
    $unit = (0%)

    Si vous avez des pistes pour m'orienter sur ce que je dois modifier du code, je suis preneur !

    Merci !
    Cordialement,
    Soupap.

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    je suis désolé, ça n'a pas l'air bien compliqué, mais je ne comprends pas ce que tu veux exactement, ni ce qui marche et ce qui ne marche pas comme tu le souhaites dans ton script.

    Peux tu préciser de façon claire et précise exactement ce que renvoie le programme iperf, et ce que tu veux de ton côté afficher.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 4
    Par défaut
    Tout d'abord merci de ta réponse,

    Juste pour info, iperf fonctionne en client/serveur, donc la commande iperf -s tourne en boucle sur le serveur.
    Actuellement lorsque j'exécute mon script sur ma machine, je dois lancer la commande ./check_iperf.pl "@IP serveur" "critical speed" "warning speed, un exemple serait ./check_iperf.pl 10.10.10.10 0.5:10 1:10 .
    Ce script me renvoie le résultat suivant : "OK: iperf returns (débit,gigue,perte) 1.05 Mbits/sec 0.039 ms 0/ 893 (0%)." Ici, le script renvoie OK, car le script prend en compte la valeur du débit, qui est bien comprise dans les valeurs de seuils indiqués. Ce qui est très bien déjà!

    Or ce que je voudrais, c'est que le script prenne en compte la valeur des pertes de paquets (par exemple le pourcentage) et non pas le débit, ce qui implique de changer bien entendu la valeur des seuils. Par exemple si %perte > 5%, le script renvoie "critical", et si 5%>%perte>3% le script renvoie "warning".

    N'hésite pas à me redemander si ce n'est toujours pas clair.

    Cordialement,
    Soupap.

  4. #4
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    désolé, mais ce n'est toujours pas clair pour moi.

    Ce que je comprends: tu as une commande iperf qui te renvoie des infos sur le système. Tu désires retraiter ces infos pour afficher autrement une partie d'entre elles.

    Peux-tu préciser exactement et verbatim:
    - les lignes renvoyées par iperf;
    - les lignes que ton script doit générer.

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    désolé, mais ce n'est toujours pas clair pour moi.

    Ce que je comprends: tu as une commande iperf qui te renvoie des infos sur le système. Tu désires retraiter ces infos pour afficher autrement une partie d'entre elles.

    Peux-tu préciser exactement et verbatim (entre des balises de type code):
    - les lignes renvoyées par iperf;
    - les lignes que ton script doit générer.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 4
    Par défaut
    Ce que je comprends: tu as une commande iperf qui te renvoie des infos sur le système. Tu désires retraiter ces infos pour afficher autrement une partie d'entre elles.
    Exactement, iperf permet de calculer des tests de performance entre 2 machines, tel que le débit, gigue, etc... Cette commande me renvoie un résultat sur le terminal. Et avec le script je traite ce résultat selon des seuils, et ce script me renverra si oui ou non le résultat est compris dans la plage de seuil.

    Peux-tu préciser exactement et verbatim (entre des balises de type code):
    - les lignes renvoyées par iperf;
    - les lignes que ton script doit générer.
    - Les lignes renvoyer par la commande "iperf -c 10.10.10.10 -u -m":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ------------------------------------------------------------
    Client connecting to 10.10.10.10, UDP port 5001
    Sending 1470 byte datagrams
    UDP buffer size:  122 KByte (default)
    ------------------------------------------------------------
    [  3] local X.X.X.X port 48940 connected with 10.10.10.10 port 5001
    [ ID] Interval       Transfer     Bandwidth
    [  3]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec
    [  3] Sent 893 datagrams
    [  3] Server Report:
    [  3]  0.0-10.0 sec  1.25 MBytes   1.05 Mbits/sec   0.051 ms    0/  893 (0%)
    - Lors de l'exécution du script, il y a des seuils de warning et de critical à renseigner, sinon le script ne s'exécute pas. Ces seuils me sont utiles lors de l'insertion de ce script sur mon serveur de supervision, qui me renverra :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    NOK: iperf didn't connect to '$target'.
    OK : iperf returns (débit,gigue,perte) $speed $unit. (où $speed = 1.05 Mbits/sec 0.051 ms 0/893  et  $unit = (0%))
    Critical: iperf speed of '$target': $speed ($unit) < $mincrit. (si le débit est inférieur au seuil minimum critique)
    Critical: iperf speed of '$target': $speed ($unit) > $maxcrit. (si le débit est supérieur au seuil maximal critique)
    Warning: iperf speed of '$target': $speed ($unit) < $minwarn. (si le débit est inférieur au seuil minimum warning)
    Warning: iperf speed of '$target': $speed ($unit) > $maxwarn. (si le débit est supérieur au seuil maximal warning)
    Actuellement le script compare uniquement le débit avec les seuils renseignés lors de l'exécution du script. Par exemple je lance : ./check_iperf.pl 10.10.10.10 1:10 2:10 , le résultat devrait être : "Warning: iperf speed of '$target': $speed ($unit) < $minwarn." car le débit est de 1.05. Il est donc bien compris dans la plage du critical (1:10), mais pas dans celle du warning (2:10) donc le script retourne warning.
    Ce que je voudrais, c'est que le script compare non pas le débit, mais le pourcentage de perte de paquet. En écrivant ça, je me dis qu'il faut "juste changer" le $speed par le $unit. Je vais essayer ça et je vous fais un retour.
    J'espère que la compréhension est bonne maintenant..

    Cordialement,
    Soupap.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 4
    Par défaut
    Bon bah c'était vraiment tout bête, j'ai réussi à avoir ce que je voulais, j'ai juste modifier dans la boucle pour afficher les messages de sortie du script les $speed par les $unit, et les comparaisons se faisaient par rapport au pourcentage des pertes, donc parfait. Pas besoin de connaître le langage perl pour faire ça
    Je clos le sujet.

    Merci pour ton aide!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/03/2011, 15h13
  2. Réponses: 15
    Dernier message: 15/06/2009, 17h35
  3. Réponses: 4
    Dernier message: 14/12/2005, 12h16
  4. [SQL*Plus] Lancer un script en ligne de commandes
    Par Jibees dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 04/07/2005, 17h05
  5. [SQL*Plus] Lancer un script en ligne de commandes
    Par Jibees dans le forum Oracle
    Réponses: 6
    Dernier message: 04/07/2005, 15h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo