|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Stéphane Ingénieur Systèmes Réseaux et Supervision Inscription : octobre 2012 Messages : 11 ![]() |
Bonjour à tous,
Alors voila je vous explique, je doit pour le boulot créer un script Perl pour superviser un serveur Apache or je ne connais pas encore Perl et le script doit être fait rapidement, je recherche donc une âme charitable qui aurait déjà une base de script et qui pourrais me le passer. Voilà ce dont j'ai besoin : -faire un script perl qui lance la commande "apachectl fullstatus", parse sa sortie, et récupère les infos suivantes : -nombre de requêtes par sec -nombre d'octets par sec -nombre de workers actifs et idle, calcul du pourcentage de workers occupés -pourcentage d'utilisation du cache ssl -état de chaque membre d'un loadbalancer, où OK = 0 et not OK = 1 Merci par avance à ceux qui pourront m'aider. |
|
|
00
|
|
|
#2 | ||
|
Invité de passage
![]() Stéphane Ingénieur Systèmes Réseaux et Supervision Inscription : octobre 2012 Messages : 11 ![]() |
J'ai réalisé un petit draft pour donner l'idée générale de ce que je veux faire :
Sachant que pour l'instant je n'arrive pas à voir comment transférer le résultat de ma commande dans un fichier. Code :
|
||
|
|
00
|
|
|
#4 | ||
|
Invité de passage
![]() Stéphane Ingénieur Systèmes Réseaux et Supervision Inscription : octobre 2012 Messages : 11 ![]() |
Merci du lien je pense qu'il me servira, au final j'ai trouver avec :
Code :
|
||
|
|
00
|
|
|
#5 |
|
Membre chevronné
![]() |
dans cette partie de la faq perl tu as comment parcourir un fichier
ensuite pour tester la chaine et rechercher des valeurs, les expressions régulières te seront utiles, voir les exemples ici bon courage pour digérer tout cela !
__________________
Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro. Plus les choses changent, plus elles restent les mêmes |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Stéphane Ingénieur Systèmes Réseaux et Supervision Inscription : octobre 2012 Messages : 11 ![]() |
Merci du coup de main à nouveau.
Ouai dur de tout digéré pour le début. Mais ça va bien finir par rentré. Je vais regarder les liens que tu m'as donné et essayé jusqu'à ce que ça fonctionne. Par contre est ce que c'est pareil pour par exemple j'ai : "66 B/second" sachant que le 66 est un nombre qui peut varier et correspond au nombre que je veux capturer en gros on va dire que j'ai "X B/second" je vas faire ma recherche sur B/second comment je peux faire pour récupéré X et l'affecter à une variable? Merci. |
|
|
00
|
|
|
#7 | ||
|
Membre chevronné
![]() |
dans le 2e lien de mon précédent message il est indiqué comment récupérer un motif
En plus détaillé ça donne: Code :
Tu suis toujours ? Pour capturer le groupe matchant \d+euros, on l'entoure d'une parenthèse. La ligne suivante utilise la variable $1, dans laquelle est entrée la valeur du premier groupe matchant l'expression régulière. Si tu mets plusieurs groupes tu as $2 $3 etc. De très nombreux tuto existent sur les expressions régulières de perl, bon courage !
__________________
Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro. Plus les choses changent, plus elles restent les mêmes |
||
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Stéphane Ingénieur Systèmes Réseaux et Supervision Inscription : octobre 2012 Messages : 11 ![]() |
J'avais vu dans la FAQ mais je n'avais rien compris alors que la déjà beaucoup plus.
Donc en gros dans mon cas ça donnerais : if ( $chaine =~ /\s(\d+\sB/second)$/ ) { my $prix = $1; |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Stéphane Ingénieur Systèmes Réseaux et Supervision Inscription : octobre 2012 Messages : 11 ![]() |
Au final je suis arrivé à ça, est-ce que vus pensez que c'est bon?
my $commande = "ipconfig"; my $resultat = `$commande > resultat.txt`; print $resultat; my $file = "resultat.txt"; open (FILE, $file); ======================================== # Recherche du nombres de requêtes par seconde my $substring = "requests/sec"; while (<FILE>) { if ( $_ =~ /\s(\d+\s$substring)$/ ) { my $reqpsec = $1; } } |
|
|
00
|
|
|
#10 |
|
Membre chevronné
![]() |
hum attention au $ en fin d'expression, il indique que ce que tu cherches doit se trouver à la fin de la ligne, je ne sais pas si c'est bien le cas pour toi
il te faut éplucher les tutos sur les expressions régulières, c'est inévitable vu la complexité du sujet.
__________________
Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro. Plus les choses changent, plus elles restent les mêmes |
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Stéphane Ingénieur Systèmes Réseaux et Supervision Inscription : octobre 2012 Messages : 11 ![]() |
Ouai je crois que je suis parti pour ça.
.0435 requests/sec - 66 B/second 1 requests currently being processed, 49 idle workers index usage: 0%, cache usage: 0% ajp hostname Init Ok 1 0 0 0 0 Voila en rouge ce que je veux récupérer dans des variables et en vert ce que je me suis défini comme chaîne pour ma recherche. Si ça peut aider pour comprendre. |
|
|
00
|
|
|
#12 |
|
Membre chevronné
![]() |
en gros voilà ce que je ferais, sachant que je suis très loin d'être expert en expressions régulières ^^
([\w\.]+) requests/sec - (\d+) B/second (\d+) requests currently being processed, (\d+) idle workers cache usage: (\d+)% ajp (\w+) Init (\w+)
__________________
Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro. Plus les choses changent, plus elles restent les mêmes |
|
|
00
|
|
|
#13 |
|
Invité de passage
![]() Stéphane Ingénieur Systèmes Réseaux et Supervision Inscription : octobre 2012 Messages : 11 ![]() |
Ok donc ça donnerais un truc du genre :
my $substring = "requests/sec"; my $reqpsec; while ($_ = <FILE>){ if ( $_ =~ ([\w\.]+)$substring/ ) { $reqpsec == $1; } } |
|
|
00
|
|
|
#14 | ||
|
Membre chevronné
![]() |
attention aux = ^^
Code :
tu peux le préciser soit avec ' ' soit avec \s ps: on peut omettre $_ qui est le plus souvent implicitement utilisé quand on ne précise pas de paramètres; sauf si tu préfères le mettre afin d'y voir plus clair
__________________
Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro. Plus les choses changent, plus elles restent les mêmes |
||
|
|
00
|
|
|
#15 |
|
Invité de passage
![]() Stéphane Ingénieur Systèmes Réseaux et Supervision Inscription : octobre 2012 Messages : 11 ![]() |
Au final j'ai trouvé une autre manière je la poste si des fois ça peut aider d'autres, je garde quand même tes conseils si des fois ça ne fonctionnait pas (je ne pourrais tester que lundi prochain). Un grand merci en tout cas pour ton aide.
Juste si des fois tu sais une dernière petite chose, pour la partie en gras rouge dans le script sur la fin. Je récupère un statut OK et je voudrais le transformer en 1 si OK ou en 0 sinon est-ce que mon if est bon? #!C:\Perl\bin use strict; use warnings; # ======================================== # Execution de la commande apachectl fullstatus et préparation pour l'analyse du résultat de la commande my $exec = "apachectl fullstatus"; $_ = qx{$exec}; print "Resultat :\n$_\n"; # ======================================== # Recherche du nombres de requêtes par seconde et du nombres d'octets apr seconde my $req_sec = ""; my $b_sec = ""; if ( /([.0-9]+)\srequests\/sec\s-\s([0-9]+)\sB\/second.*/ ) { $req_sec = $1; $b_sec = $2; } else { print "Erreur : req_sec / b_sec introuvables\n"; } # ======================================== # Recherche du nombre de workers actifs, du nombre d'idle et calcul du pourcentage de workers occupés my $workers_actifs = ""; my $idle = ""; my $pourcentage_workers_occupes = ""; if ( /([0-9]+)\srequests currently being processed,\s([0-9]+)\sidle workers/ ) { $workers_actifs = $1; $idle = $2; $pourcentage_workers_occupes = ($workers_actifs*100)/($workers_actifs+$idle); } else { print "Erreur : workers_actifs / idle introuvables\n"; } # ======================================== # Recherche du pourcentage de cache ssl my $cache_ssl = ""; if ( /cache usage:\s([.0-9]+)%/ ) { $cache_ssl = $1; } else { print "Erreur : cache_ssl introuvables\n"; } # ======================================== # Recherche de l'état des membres du loadbalancer my $hostname = ""; my $status = ""; if ( /ajp\s([^\s]+)\sInit\s([^\s]+)\s\d\s\d\s\d\s\d\s\d/ ) { $hostname = $1; $status = $2; if ($status = "OK") { $status = 1; } else { $status = 0; } } else { print "Erreur : hostname / status introuvables\n"; } |
|
|
00
|
|
|
#16 | ||
|
Membre chevronné
![]() |
pour tester l'égalité des chaînes de caractères, il faut utiliser eq (ou ne pour la différence)
Code :
__________________
Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro. Plus les choses changent, plus elles restent les mêmes |
||
|
|
00
|
|
|
#17 |
|
Invité de passage
![]() Stéphane Ingénieur Systèmes Réseaux et Supervision Inscription : octobre 2012 Messages : 11 ![]() |
Merci beaucoup de ton aide, maintenant résultat lundi prochain lors des tests.
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com