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.
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.
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.
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
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).
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.
Tags und Links logfile-analysis