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

Web Perl Discussion :

Script Perl pour Apache


Sujet :

Web Perl

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Systèmes Réseaux et Supervision
    Inscrit en
    Octobre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Systèmes Réseaux et Supervision

    Informations forums :
    Inscription : Octobre 2012
    Messages : 19
    Points : 8
    Points
    8
    Par défaut Script Perl pour Apache
    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.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Systèmes Réseaux et Supervision
    Inscrit en
    Octobre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Systèmes Réseaux et Supervision

    Informations forums :
    Inscription : Octobre 2012
    Messages : 19
    Points : 8
    Points
    8
    Par défaut Complément
    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 : 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
    # Algorithme pour script apache
     
    Execute commande "apachectl fullstatus" >> $resultat
     
    Open FICHIER ">resultat.txt"
     
    print FICHIER "$resultat"
     
    Close FICHIER
     
    ==============================
    # Premier test : nombres de requêtes par seconde
     
    Open FICHIER "<resultat.txt"
     
    Find X "requests/sec"
    $X=X
    opcmon opcmon MAPOLICY=$X -option requestspsec=$X
     
    Close FICHIER
     
    ==============================
    # Deuxième test : nombre d'octets par seconde
     
    Open FICHIER "<resultat.txt"
     
    Find Y "B/second"
    $Y=Y
    opcmon MAPOLICY=$Y -option bpsecond=$Y
     
    Close FICHIER
     
    =============================
    # Troisième test : nombre de workers actif et d'idle, et pourcentage de workers occupés
     
    Open FICHIER "<resultat.txt"
     
    Find W "requests currently being processed," I "idle workers"
    $W=W
    $I=I
     
    $Z=($W*100)/($W+$I)
     
    opcmon MAPOLICY=$Z -option pourcentworkersoccupes=$Z -option workersactifs=$W -option idle=$I
     
    Close FICHIER
     
    =============================
    #Quatrième test : pourcentage utilisation cache ssl
     
    Open FICHIER "<resultat.txt"
     
    Find "cache usage:" V"%"
    $V=V
    opcmon MAPOLICY=$V -option cacheusage=$V
     
    Close FICHIER
     
    =============================
    #Cinquième test : etats des membres du loadbalancer
     
    Open FICHIER "<resultat.txt"
     
    Find "ajp" R S
    $R=R
    $S=S
     
    If ($S=OK
    	Then $S=1)
    else ($S=0)
     
    opcmon MAPOLICY=$S -option name=$R -option state=$S
     
    Close FICHIER

  3. #3
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    pour capturer la sortie d'une commande, tu peux utiliser les backsticks (cf la)
    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

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Systèmes Réseaux et Supervision
    Inscrit en
    Octobre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Systèmes Réseaux et Supervision

    Informations forums :
    Inscription : Octobre 2012
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    Merci du lien je pense qu'il me servira, au final j'ai trouver avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my $resultat = `$commande > resultat.txt`;
    ça fonctionne maintenant les recherches vont être difficiles, je débute totalement en perl et quasiment en prog.

  5. #5
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    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

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Systèmes Réseaux et Supervision
    Inscrit en
    Octobre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Systèmes Réseaux et Supervision

    Informations forums :
    Inscription : Octobre 2012
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    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.

  7. #7
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ( $chaine =~ /\s(\d+\seuros)$/ ) {
     my $prix = $1;
    Dans cet exemple, on recherche un espace, un nombre non nul (d'où le +) de chiffres (symbolisé par \d) puis un espace puis euros, en fin d'expression

    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

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Systèmes Réseaux et Supervision
    Inscrit en
    Octobre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Systèmes Réseaux et Supervision

    Informations forums :
    Inscription : Octobre 2012
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    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;

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Systèmes Réseaux et Supervision
    Inscrit en
    Octobre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Systèmes Réseaux et Supervision

    Informations forums :
    Inscription : Octobre 2012
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    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; }
    }

  10. #10
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    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

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Systèmes Réseaux et Supervision
    Inscrit en
    Octobre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Systèmes Réseaux et Supervision

    Informations forums :
    Inscription : Octobre 2012
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    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.

  12. #12
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    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

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Systèmes Réseaux et Supervision
    Inscrit en
    Octobre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Systèmes Réseaux et Supervision

    Informations forums :
    Inscription : Octobre 2012
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    Ok donc ça donnerais un truc du genre :

    my $substring = "requests/sec";
    my $reqpsec;
    while ($_ = <FILE>){
    if ( $_ =~ ([\w\.]+)$substring/ )
    {
    $reqpsec == $1;
    }
    }

  14. #14
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    attention aux = ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    my $substring = "requests/sec";
    my $reqpsec;
    while (<FILE>){
      if (([\w\.]+) $substring/ )
      {
        $reqpsec = $1;
      }
    }
    il y a un espace avant requests non ?
    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

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Systèmes Réseaux et Supervision
    Inscrit en
    Octobre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Systèmes Réseaux et Supervision

    Informations forums :
    Inscription : Octobre 2012
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    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";
    }

  16. #16
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    pour tester l'égalité des chaînes de caractères, il faut utiliser eq (ou ne pour la différence)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if ($status eq "OK")
    {
    $status = 1;
    } else
    {
    $status = 0;
    }
    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

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Systèmes Réseaux et Supervision
    Inscrit en
    Octobre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Systèmes Réseaux et Supervision

    Informations forums :
    Inscription : Octobre 2012
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup de ton aide, maintenant résultat lundi prochain lors des tests.

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

Discussions similaires

  1. Script Perl pour VNC
    Par dubis dans le forum Programmation et administration système
    Réponses: 0
    Dernier message: 17/11/2009, 09h50
  2. Réponses: 3
    Dernier message: 31/03/2008, 13h59
  3. recherche module perl pour apache 2.2.6
    Par chris81 dans le forum Apache
    Réponses: 7
    Dernier message: 21/10/2007, 11h12
  4. Script PERL pour l'archivage/purge/zip de fichiers
    Par jfmerveille dans le forum Langage
    Réponses: 1
    Dernier message: 30/03/2007, 12h52
  5. script perl pour ftp
    Par donny dans le forum Modules
    Réponses: 5
    Dernier message: 29/09/2006, 12h02

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