Outils de ligne de commande pour analyser les fichiers journaux Apache [fermé]

16

J'ai un tas de fichiers journaux Apache que j'aimerais analyser. Je recherche un outil qui ne nécessite pas beaucoup de configuration; quelque chose que je peux exécuter un journal via la ligne de commande, sans déconner sur nos serveurs Web en direct.

Des recommandations?

mmattax
la source
Et le système d'exploitation que vous allez utiliser est ...
Izzy
Linux ou MacOSX ...
mmattax
1
"Analyser" ne dit pas grand-chose. Qu'essayez-vous de faire? Vous cherchez une chaîne, des chiffres croquants?
David

Réponses:

7

Bien que les outils ci-dessus soient tous cool, je pense que je sais ce que l'interrogateur demandait. Cela me fait souvent mal de ne pas pouvoir extraire les informations d'un journal d'accès de la manière que je peux avec d'autres fichiers.

C'est à cause du format de journal d'accès stupide:

127.0.0.1 - - [16/Aug/2014:20:47:29 +0100] "GET /manual/elisp/index.html HTTP/1.1" 200 37230 "http://testlocalhost/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0"

Pourquoi ont-ils utilisé [] pour la date et "" pour d'autres choses? pensaient-ils que nous ne saurions pas qu'une date était dans le champ 4? C'est incroyablement frustrant.

Le meilleur outil en ce moment est gawk:

gawk 'BEGIN { FPAT="([^ ]+)|(\"[^\"]+\")|(\\[[^\\]]+\\])" } { print $5 }'

sur les données ci-dessus, cela vous donnerait:

"GET /manual/elisp/index.html HTTP/1.1"

En d'autres termes, le FPAT vous donne la possibilité d'extraire les champs de l'apache-log comme s'il s'agissait de champs réels au lieu de simplement des entités séparées par des espaces. C'est toujours ce que je veux. Je peux ensuite analyser cela un peu plus avec un pipeline.

Le fonctionnement du FSPAT est défini ici: http://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html

Vous pouvez donc configurer un alias pour créer un gawk capable d'analyser les journaux apache:

alias apacheawk="gawk -vFPAT='([^ ]+)|(\"[^\"]+\")|(\\\\[[^\\\\]]+\\\\])' " apacheawk '$6 ~ /200/ { print $5 } | sort | uniq

fait ceci pour moi:

"GET / HTTP/1.1"
"GET /manual/elisp/index.html HTTP/1.1"
"GET /manual/elisp/Index.html HTTP/1.1"
"GET /scripts/app.js HTTP/1.1"
"GET /style.css HTTP/1.1"

et bien sûr presque tout le reste est désormais possible.

Prendre plaisir!

nic ferrier
la source
1
2 remarques: La date n'est pas vraiment dans le champ 4 mais dans les champs 4 + 5 ^^ (sans le décalage de GMT, la date a peu de valeur). Et un access_log a la plupart du temps la forme de 12 champs (en fait, il pourrait y avoir plus de 12 champs, car le 12 est l'agent http, qui peut aussi contenir de nombreux espaces dans son nom .. les 11 premiers champs sont faciles à analyser, et le 12ème champ (et peut-être plus) restant devrait être l'agent http). Vous pouvez donc simplement: awk '($9 == 200) {print $6,$7,$8}'afficher la même chose que dans votre exemple. Pas besoin d'y utiliser FPAT (même si cette méthode peut être utile dans d'autres cas)
Olivier Dulac
Je pense que vous critiquez trop. La date est dans le champ 4 si vous considérez que le champ est délimité par []. La plupart du temps, un fichier journal est dans un fuseau horaire, donc la zone n'est pas nécessaire. Le but de montrer l'exemple n'était pas de montrer que quelque chose était exclusivement possible de cette façon, mais de montrer l'astuce générale.
nic ferrier
1
Je suis très surpris ... Je n'ai pas du tout "critiqué", j'ai juste fait 2 remarques (et dit qu'en effet la méthode que vous avez utilisée peut être utile dans d'autres cas, mais ici n'est tout simplement pas nécessaire) ...
Olivier Dulac
6

wtop est cool. Il existe également d'autres utilitaires. Souvent, je vais analyser les journaux en utilisant bash, sed et awk.

Warner
la source
wtop, et spécialement leur analyseur de journal logrep sont excellents, une fois que vous adapterez le .conf à votre format de journal, il fournira un moyen rapide d'obtenir ce dont vous avez besoin (URL du haut, trafic, etc.)
aseques
6

apachetop est assez cool; il imprime des statistiques en direct. Vous l'exécutez avec

apachetop -f /var/log/apache2/www.mysite.com.access.log

Pour l'installer dans Debian / Ubuntu:

apt-get install apachetop

ou depuis la source: https://github.com/JeremyJones/Apachetop

Oriettaxx
la source
1

Quel type de sortie souhaitez-vous?

Si vous cherchez juste à compter les choses, alors grep quelque chose logfile.txt | wc -l fonctionne très bien. Si vous voulez de jolis graphiques ... pas tant que ça.

Chris Nava
la source
Pour Windows, la commande find imite grep dans une certaine mesure.
Chris Nava
0

si vous avez un poste de travail Windows que vous pouvez utiliser, alors logparser est l'outil de choix!

Tony Roth
la source
0

analogique fonctionne bien hors de la boîte et ne nécessite pas beaucoup de configuration. logwrangler est un package qui fonctionne avec l'analogique pour générer une sortie plus agréable et nécessite également peu de configuration.

BillThor
la source
0

Au lieu d'utiliser un outil de ligne de commande, je suggérerais d'essayer Apache Logs Viewer. C'est un outil gratuit qui peut surveiller et analyser le fichier journal Apache. Il peut générer des graphiques et des rapports assez cool à la volée.

Plus d'informations sur http://www.apacheviewer.com


la source