Durchsuchen großer Protokolldateien

8

Fehlerbehebung, Analyse & amp; Das Filtern von Protokolldateien ist bei weitem einer der mühsamsten täglichen Jobs. Mein Problem ist das Durchsuchen einer Protokolldatei, die weit über 4 Gigs groß sein könnte. Das Laden der Datei dauert nur 15 Minuten. Ich betreibe einen ziemlich schnellen Prozessor mit 8 GB Speicher. Nachdem die Datei geladen ist, habe ich buchstäblich nur den Luxus von grep und / oder control + F, um durch die Datei zu scannen. Das wird schlimmer, wenn ich versuche, Dateien von mehreren Systemen zu betrachten, die jeweils über einen Gig wogen. Habe versucht, die Dateien basierend auf Zeitstempeln zu segmentieren, um sie kleiner zu machen, aber keine Freude.

Gibt es ein Tool oder sogar einen Prozess, mit dem ich die Fehlersuche weniger zeitaufwendig machen kann (abgesehen von der üblichen "Fehlerbehebung")?

Ihre Kommentare sind willkommen.

    
Will 28.10.2010, 02:42
quelle

4 Antworten

9

Was laden Sie es? 4 gigs ist eine ziemlich große Datei, aber das sollte nicht so lange dauern, um sie in den Speicher zu laden.

Für so große Dateien würde ich grep direkt empfehlen, und wenn grep es nicht für dich tut, sind SED und AWK deine Freunde. Wenn Sie dies in Echtzeit tun möchten, erfahren Sie, wie Sie diese Tools in Verbindung mit Pipes und tail -f verwenden.

Ja, ich weiß, SED ist anfangs sehr einschüchternd. Es ist auch lächerlich mächtig. Erfahren Sie es.

Wenn du auf Windows stehst, hast du meine Sympathie. Darf ich eine Unix-Shell empfehlen?

Wenn Sie Angst vor den Befehlszeilentools haben, sollten Sie Perl oder Python lernen. Sie sind beide ziemlich gut darin, in großen Dateien wie diesem das Signal vom Rauschen zu sortieren.

    
Paul McMillan 28.10.2010 02:56
quelle
1

Barentail ist ein gutes Werkzeug zu haben. Versuche es. Ich habe es nicht für 4 Gigs-Dateien verwendet, aber meine Log-Dateien sind auch ziemlich groß und es funktioniert gut. Ссылка

edit: Ich habe nicht gesehen, dass jemand schon Barettail vorgeschlagen hat.

    
user281693 28.10.2010 03:15
quelle
1

Wenn Sie Zeilen von Dingen ausschließen möchten, die Sie nicht sehen möchten, können Sie grep -v 'I dont wanna see this' > logWithExcludedLines.log . Sie können auch regex grep -vE 'asdf|fdsa' > logWithNoASDForFDSA.log

verwenden

Diese Methode funktioniert sehr gut mit Apache Zugriffsprotokollen grep -v 'HTTP/1.1 200' > no200s.log (oder etwas ähnliches, erinnere mich nicht an die genaue Zeichenfolge).

    
Scott 28.10.2010 03:20
quelle
0

Ich mache solche Dinge derzeit mit den Unix-Kommandozeilen-Tools (f) grep, awk, cut, join usw., die auch für Windows mit Cygwin oder UnxUtils und so weiter, und auch einige Scala Skripte für Dinge, die komplizierter sind. Sie können Skripts schreiben, um Suchen durchzuführen, die Logfile-Einträge in mehreren Dateien umfassen. Aber ich bin auch frage mich, ob es etwas Besseres gibt als - vielleicht sie in eine Datenbank importieren (beide sind SO-Fragen)?

Übrigens: Lassen Sie Ihre Festplatte durch ein SSD-Laufwerk ersetzen. Das sind Wege schneller! Außerdem zahlt es sich aus, die Logs gzip-komprimiert auf der Platte zu belassen, da sie bei der Suche der Engpass ist. Wenn Sie beispielsweise nach einem regulären Ausdruck in den Protokolldateien suchen und 100 Kontextzeilen für jedes Vorkommen haben möchten, tun Sie Folgendes:

%Vor%

und laden Sie die Ausgabedatei in Ihren bevorzugten Textdatei-Viewer. Wenn Sie nach festen Strings suchen, verwenden Sie fgrep (gleich grep mit der zusätzlichen Option -F ) - das ist viel schneller.

    
Hans-Peter Störr 08.12.2010 17:31
quelle

Tags und Links