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

Linux Discussion :

Parser logs apache pour extraire dans un CSV


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 194
    Par défaut Parser logs apache pour extraire dans un CSV
    Bonjour,

    Je suis issu du dev web et je débute en shell. J'aimerai créer un script KSH qui sera éxécuter avec un cron et qui fera le travail suivant:

    Parser un fichier de log apache:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ::1 - - [21/Apr/2009:09:38:52 +0200] "GET /.gif&utilisation=1&acces=1@stats=2 HTTP/1.1" 200 - "-" "Bla CFNetwork/422.11 Darwin/9.6.3 (i386) (iMac9%2C1)"
    ::1 - - [21/Apr/2009:09:38:53 +0200] "GET /.gif&utilisation=1&acces=1@stats=3 HTTP/1.1" 200 - "-" "Bla CFNetwork/422.11 Darwin/9.6.3 (i386) (iMac9%2C1)"
    ::1 - - [21/Apr/2009:09:38:57 +0200] "GET /.gif&utilisation=1&acces=2@carotte=2 HTTP/1.1" 200 - "-" "Bla CFNetwork/422.11 Darwin/9.6.3 (i386) (iMac9%2C1)"
    ::1 - - [21/Apr/2009:09:38:59 +0200] "GET /.gif&utilisation=1&acces=1@patate=8 HTTP/1.1" 200 - "-" "Bla CFNetwork/422.11 Darwin/9.6.3 (i386) (iMac9%2C1)"
    Afin de créer un nouveau fichier CSV qui affichera mes logs de la sorte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # ----------------------------------------
    # Table
    # ----------------------------------------
    /.gif&utilisation=1&acces=1@stats=2
    /.gif&utilisation=1&acces=1@stats=3
    /.gif&utilisation=1&acces=2@carotte=2
    /.gif&utilisation=1&acces=1@patate=8
    # --------------------------------------------------------------------------------
    Pouvez-vous m'aider? je suis perdu dans l'écriture d'un tel script


    merci d'avance

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Par défaut
    un petit coup de sed :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's/.*GET \(.*\) HTTP.*/\1/g'  apache.log
    donne :

    /.gif&utilisation=1&acces=1@stats=2
    /.gif&utilisation=1&acces=1@stats=3
    /.gif&utilisation=1&acces=2@carotte=2
    /.gif&utilisation=1&acces=1@patate=8


    pour le reste un simple echo " ...... " suffit

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 194
    Par défaut
    En effet très efficace, cependant cela écrit dans mon terminal, comment extraire tout ca dans un CSV?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Par défaut
    pas très courageux quand meme


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/ksh
     
    echo "# ----------------------------------------" > ./CSV
    echo "# Table" >> ./CSV
    echo "# ----------------------------------------" >> ./CSV
    sed -e 's/.*GET \(.*\) HTTP.*/\1/g' ./apache.log >> ./CSV
    echo >> ./CSV
    echo "# --------------------------------------------------------------------------------" >> ./CSV
    => parse.sh
    => cat ./CSV
    # ----------------------------------------
    # Table
    # ----------------------------------------
    /.gif&utilisation=1&acces=1@stats=2
    /.gif&utilisation=1&acces=1@stats=3
    /.gif&utilisation=1&acces=2@carotte=2
    /.gif&utilisation=1&acces=1@patate=8
    # --------------------------------------------------------------------------------

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 194
    Par défaut
    en effet avec tout ca je comprend mieux comme marche ce langage... merci


    cependant est-ce possible de regrouper dans la regex les lignes identifiques. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /.gif&utilisation=1&acces=1@stats=2
    /.gif&utilisation=1&acces=1@stats=3
    /.gif&utilisation=1&acces=2@carotte=1
    /.gif&utilisation=1&acces=1@carotte=1
    en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /.gif&utilisation=1&acces=1@stats=2, 1
    /.gif&utilisation=1&acces=1@stats=3, 1
    /.gif&utilisation=1&acces=2@carotte=1, 2

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Par défaut
    dans ton exemple, ils ont pas le meme accès les deux derniers

    mais pour répondre a ta question, oui c'est possible
    très simplement j'en suis pas sur

    en gros faut sauvegarder ta ligne, la comparer aux suivantes
    si il y a matching tu incrémentes un compteur
    sinon tu passes
    quand tu as fini tu affiches ta ligne si ton compteur est a zero
    sinon tu affiche ta ligne suivi de la valeur du compteur+1

    puis tu passes a la deuxième ligne ...
    (pas très optimisé sans parler qu'il faut supprimer les lignes qui ont été matchées)


    le perl serait beaucoup mieux adapté pour ça

Discussions similaires

  1. Boucle xml pour extraire dans un csv sur Talend
    Par Petude dans le forum Développement de jobs
    Réponses: 7
    Dernier message: 19/06/2015, 14h49
  2. [Wamp] Voir log apache et php dans une console ?
    Par yamatoshi dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 07/12/2011, 18h40
  3. [SQL-Server] Parser un tableau pour exploitation dans une requête avec IN
    Par arthuro45 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 26/05/2011, 11h54
  4. Parser de fichier textes >> Logs Apache
    Par gregb34 dans le forum Langage
    Réponses: 2
    Dernier message: 17/02/2006, 18h34
  5. Utiliser un parser pour extraire des formules
    Par EpOnYmE187 dans le forum C++
    Réponses: 2
    Dernier message: 15/03/2005, 23h55

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