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

Langage Perl Discussion :

Traitement de log d'alarmes PERL


Sujet :

Langage Perl

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Février 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Traitement de log d'alarmes PERL
    Bonjour,
    Je suis en train d'investiguer des alarmes (je suis dans les télécoms) sur des antennes relais. Je souhaite investiguer sur le statut des antennes relais . Le problème c'est que j'ai un log d'alarme pour chaque antenne. Donc il me faut concaténer les fichiers log de toutes les antennes et traiter le fichier final de façon a avoir en sortie un fichier avec :

    Nom de l'antenne relais;status
    AntenneA;disabled
    AntenneB;enabled
    AntenneC;disabled
    .
    .

    Les fichier logs se présentent ainsi

    -----------------------------------------------------------------------------------
    -----------------------------------------------------------------------------------
    >Status (Disabled)
    -----------------------------------------------------------------------------------
    -----------------------------------------------------------------------------------

    Le nom du fichier correspond au nom de l'antenne mais n'est pas présent à l'interieur du log. Donc il me faudrait ouvrir chacun des fichiers logs, récupérer le nom de l'antenne (nom du fichier log),et récupérer le status ...qui est toujours entre parenthèse.

    Bon j'ai passé la soirée à regarder les tutoriels mais partant des profondeurs abyssales en matière de programmation perl je suis juste à peu près capable de comprendre des codes simples. J'ai beaucoup de mal à coder...je me perds avec tous ces symbole $%#

    Si vous avez une minute, pourriez vous m'aiguiller svp ? Quelqun aurait un exemple de code à me proposer svp ?
    merci grandement

  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
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Hum, pas assez d'information pour fournir une réponse complète, et puis je ne vais pas non plus faire ton travail à ta place (surtout que je suis aussi dans la téléphonie mobile et que tu n'as pas indiqué pour quel opérateur tu travailles... ) Je te donne cependant un point de départ:

    Une fois identifié un fichier log; disons antenne_A.log, stocké dans la variable $file_name, tu peux faire quelque chose comme cela (pas testé):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    my $nom_antenne = $1 if $file_name =~ /^(\w+)\./; # recupère "antenne_A"
    open my $FH, "<", $file_name or die "ouverture impossible de $file_name $!";
    while (<$FH>) {
         next unless />Status/;
         chomp;
         my $statut = $1 if />Status (.*)/;
         print "$nom_antenne  $statut \n";
         last
    }
    Ce code va imprimer la ligne que tu recherches à l'écran. Je te laisse faire les modifs pour imprimer dans un fichier.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    si on part du principe que tous tes fichiers se trouvent dans le même dossiers et ont le même format de nom genre
    $user:ls -1 Mon/Dossier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    fic_Antenne1.log
    fic_Antenne1.log
    fic_Antenne2.log
    fic_Antenne3.log
    fic_Antenne4.log
    fic_Antenne5.log
    fic_Antenne6.log
    ...

    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
    #!/usr/bin/perl
    use strict;
     
    my @liste_fichiers = `ls -1 Mon/Dossier/fic_*.log`;
    open my $FH_OUT, ">", $fichier_sortie or die "ouverture impossible de $fichier_sortie\n";
    foreach my $fichier (@liste_fichiers){
         $fichier =~ s/\s+$//;
         if ( $fichier =~ #(.*)/fic_(.*)\.log# ){
              my $antenne = $1;
              open my $FH_IN, "<", $fichier or die "ouverture impossible de $fichier\n";
              while (<$FH_IN>){
                   my $statut = $1 if ($_ =~ />Status\s*\((.*)\)/);
                   print $FH_OUT "$antenne $statut\n";
              }
         }
    }
    j'ai pas testé mais si tu rencontres des problèmes que tu n'arrives pas à corriger dis-le

  4. #4
    Nouveau Candidat au Club
    Femme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Février 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    merci beaucoup à vous deux.
    6ril j'ai testé votre code et j'ai quelque message que je ne comprends pas. Des idées sur l'origine de ces erreurs ?
    merci

    perl parse.pl
    Global symbol "$fichier_sortie" requires explicit package name at parse.pl line 5.
    Global symbol "$fichier_sortie" requires explicit package name at parse.pl line 5.
    syntax error at parse.pl line 9, near "$1;"
    Unmatched right curly bracket at parse.pl line 16, at end of line # bon la j'ai bien compris qu'il y a un } en trop
    syntax error at parse.pl line 16, near "}" # idem
    Execution of parse.pl aborted due to compilation errors.

    voici le code

    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
     
    #!/usr/bin/perl
    use strict;
     
    my @liste_fichiers = `ls -1 /home/ffffff/nodestatus/3G-*.log`;
    open my $FH_OUT, ">", $fichier_sortie or die "ouverture impossible de $fichier_sortie\n";
    foreach my $fichier (@liste_fichiers){
         $fichier =~ s/\s+$//;
         if ( $fichier =~ #(.*)/3G-(.*)\.log# ){
              my $antenne = $1;
              open my $FH_IN, "<", $fichier or die "ouverture impossible de $fichier\n";
              while (<$FH_IN>){
                   my $statut = $1 if ($_ =~ /nodesytatus\s*\((.*)\)/);
                   print $FH_OUT "$antenne $statut\n";
              }
         }
    }

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Février 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    En fait je crois avoir compris : je n'ai pas défini mon fichier de sortie

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    oui il manque quelque chose du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $fichier_sortie= 'chemin/de/sortie.txt';
    sinon pour cette partie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ( $fichier =~ #(.*)/3G-(.*)\.log# ){
              my $antenne = $1;
    si tu veux récupérer la partie en rouge il faut mettre "$2" désolé pour l'erreur
    la variable $X commence à 1 et non 0 comme les indices d'array...

    Sinon pour ce qui est du problème de "}", corrige les autres erreurs pour voir si ça se résout, sinon c'est qu'il ne prend pas en compte le "{" ligne 9 (commentaire); essaie avec cette ligne 9:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( $fichier =~ /(.*)\/3G-(.*)\.log/ ){
    PS: quand tu as toute une liste d'erreurs comme ici, corrige toujours la 1ère car c'est parfois 1 erreur qui en entraine d'autres

  7. #7
    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
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    En plus de ce qui a déjà été discuté plus haut, il me semble que cette ligne ne fonctionnera pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( $fichier =~ #(.*)/3G-(.*)\.log# ){
    car je crois que le m/ est obligatoire quand on utilise un autre séparateur que /.

    Donc il faudrait soit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( $fichier =~ m#(.*)/3G-(.*)\.log# ){
    soit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( $fichier =~ /(.*)\/3G-(.*)\.log/ ){
    En outre, la première série de parenthèses capturantes n'est pas nécessaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( $fichier =~ /.*\/3G-(.*)\.log/ ){
    mais il faut alors revenir à $1 (et non plus $2).

Discussions similaires

  1. Traitement de logs apache vers fichier CSV
    Par GTJuanpablo dans le forum Langage
    Réponses: 3
    Dernier message: 22/04/2009, 15h14
  2. Traitement des logs sous WebSphere
    Par menzlitsh dans le forum Websphere
    Réponses: 2
    Dernier message: 04/12/2008, 16h22
  3. Traitement de logs
    Par alban92000 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 23/05/2008, 08h02
  4. Automatisation de traitement de log => tableur
    Par Gokukan dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 30/05/2007, 18h51
  5. traitement du log
    Par scolopendra dans le forum Logging
    Réponses: 9
    Dernier message: 16/04/2007, 14h27

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