Befehlszeilentools zum Analysieren von Apache-Protokolldateien [geschlossen]

16

Ich habe eine Reihe von Apache-Protokolldateien, die ich analysieren möchte. Ich suche ein Tool, das nicht viel Setup erfordert; Etwas, das ich über die Befehlszeile protokollieren kann, ohne auf unseren Live-Webservern herumzuspielen.

Irgendwelche Empfehlungen?

mmattax
quelle
Und das Betriebssystem, das Sie verwenden werden, ist ...
Izzy
Linux oder MacOSX ...
mmattax
1
"Analysieren" sagt nicht viel. Was versuchst du zu machen? Suchen Sie nach einer Saite, nach knackigen Zahlen?
David

Antworten:

7

Die oben genannten Tools sind zwar alle cool, aber ich glaube, ich weiß, was der Fragesteller gefragt hat. Es schmerzt mich oft, dass ich die Informationen nicht wie bei anderen Dateien aus einem Zugriffsprotokoll ziehen kann.

Das liegt am dummen Zugriffsprotokollformat:

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"

Warum haben sie [] für das Datum und "" für andere Dinge verwendet? Dachten sie, wir würden nicht wissen, dass ein Datum in Feld 4 ist? Es ist unglaublich frustrierend.

Das derzeit beste Tool dafür ist gawk:

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

auf den Daten darüber würde dies Ihnen geben:

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

Mit anderen Worten, der FPAT gibt Ihnen die Möglichkeit, die Felder des Apache-Logs so herauszuholen, als wären es tatsächliche Felder, anstatt nur durch Leerzeichen getrennte Entitäten. Das ist immer was ich will. Das kann ich dann mit einer Pipeline etwas genauer analysieren.

Das Funktionieren des FSPAT wird hier definiert: http://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html

Sie können daher einen Alias ​​einrichten, um einen Gawk zu erstellen, der Apache-Protokolle analysieren kann:

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

habe das für mich gemacht:

"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"

und natürlich ist jetzt fast alles möglich.

Genießen!

Nic Ferrier
quelle
1
2 Bemerkungen: Das Datum steht nicht wirklich in Feld 4, sondern in Feld 4 + 5 ^^ (ohne die Verschiebung von GMT hat das Datum wenig Wert). Und ein access_log hat die meiste Zeit 12 Felder (tatsächlich kann es mehr als 12 Felder geben, da der 12. der http-Agent ist, der auch viele Leerzeichen in seinem Namen enthalten kann. Die ersten 11 Felder sind einfach zu analysieren. und das zwölfte (und vielleicht noch weitere) Feld sollte der http-Agent sein. Sie können also einfach: awk '($9 == 200) {print $6,$7,$8}'dasselbe wie in Ihrem Beispiel anzeigen. Dort muss kein FPAT verwendet werden (auch wenn diese Methode in anderen Fällen nützlich sein kann)
Olivier Dulac
Ich denke, du hast genug zu kritisieren. Das Datum steht in Feld 4, wenn Sie das Feld als durch [] begrenzt betrachten. Die meiste Zeit befindet sich eine Protokolldatei in einer Zeitzone, daher ist die Zone nicht erforderlich. Das Beispiel sollte nicht nur zeigen, dass etwas auf diese Weise möglich war, sondern den allgemeinen Trick zeigen.
Nic Ferrier
1
Ich bin sehr überrascht ... Ich habe überhaupt nicht "kritisiert", sondern nur zwei Bemerkungen gemacht (und gesagt, dass die von Ihnen verwendete Methode in anderen Fällen nützlich sein kann, aber hier nicht benötigt wird) ...
Olivier Dulac
6

wtop ist cool. Es gibt auch andere Dienstprogramme. Oft analysiere ich Protokolle mit bash, sed und awk.

Warner
quelle
wtop, und speziell ihr Log - Analyzer logrep groß ist, sobald Sie den Conf auf Ihr Log - Format anpassen wird es einen schnellen Weg , um zu bekommen , was Sie braucht (Top-URL, Verkehr, etc ..)
aseques
6

apachetop ist ziemlich cool; Es druckt Live-Statistiken. Du machst es mit

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

So installieren Sie es in Debian / Ubuntu:

apt-get install apachetop

oder von der Quelle: https://github.com/JeremyJones/Apachetop

Oriettaxx
quelle
1

Welche Art von Ausgabe möchten Sie?

Wenn Sie nur Dinge zählen wollen, dann greifen Sie zu logfile.txt | wc -l funktioniert super Wenn Sie hübsche Grafiken wollen ... nicht so sehr.

Chris Nava
quelle
Für Windows ahmt der Befehl find grep bis zu einem gewissen Grad nach.
Chris Nava
0

Wenn Sie eine Windows-Workstation haben, die Sie verwenden können, ist Logparser das Werkzeug der Wahl!

Tony Roth
quelle
0

Analog funktioniert sofort und erfordert nicht viel Setup. logwrangler ist ein Paket, das mit Analog arbeitet, um eine schönere Ausgabe zu generieren, und außerdem wenig Setup erfordert.

BillThor
quelle
0

Anstatt ein Befehlszeilentool zu verwenden, würde ich empfehlen, Apache Logs Viewer zu testen. Es ist ein kostenloses Tool, mit dem Sie die Apache-Protokolldatei überwachen und analysieren können. Es kann einige ziemlich coole Grafiken und Berichte im laufenden Betrieb generieren.

Weitere Informationen unter http://www.apacheviewer.com


quelle