2010-01-03 6 views
15

Ich benutze Grep, um durch meine Trading-Apps-Protokolle zu analysieren, aber es ist in dem Sinne begrenzt, dass ich visuell durch die Ausgabe zu graben muss, um zu sehen, was passiert ist usw.Was ist das beste Tool zum Analysieren von Protokolldateien?

Ich frage mich, ob Perl eine bessere Option ist? Irgendwelche guten Ressourcen zum Erlernen von Protokoll- und String-Parsing mit Perl?

Ich würde auch glauben, dass Python dafür gut sein würde. Perl vs Python vs "Grep auf Linux"?

+0

Vielen Dank für die Antworten. Ich denke, praktisch müsste ich bei Perl oder Grep bleiben. Auf Produktionskästen, die perm werden, um Python/Ruby usw. auszuführen, wird ein Projekt für sich genommen. Ich denke, es ist Zeit, dass ich mein Regex-Wissen aufwertete, um Dinge in Grep zu erledigen. – user242591

+2

@coderzambesi: Bitte definieren Sie "Best" und "Better" im Vergleich zu was? Billiger? Schneller? Bessere GUI-Entwicklungswerkzeuge? Mehr Anbieterunterstützung/Was meinst du mit "Beste"? –

Antwort

9

Am Ende hängt es wirklich davon ab, wie viel Semantik Sie identifizieren möchten, ob Ihre Protokolle zu allgemeinen Mustern passen und was Sie mit den geparsten Daten machen wollen.

Wenn Sie reguläre Ausdrücke verwenden können, um zu finden, was Sie brauchen, haben Sie jede Menge Optionen. Perl ist eine beliebte Sprache und hat sehr bequeme native RE-Einrichtungen. Ich persönlich fühle mich viel wohler mit Python und finde, dass der kleine zusätzliche Aufwand für REs nicht signifikant ist.

Wenn Sie etwas intelligenter als RE-Abgleich tun wollen, oder eine Menge Logik haben möchten, können Sie sich mit Python oder sogar mit Java/C++/etc. Zum Beispiel ist es einfach, Zeile für Zeile in Python zu lesen und dann verschiedene Prädikatfunktionen und Reaktionen auf Übereinstimmungen anzuwenden, was großartig ist, wenn Sie einen Regelsatz haben, den Sie anwenden möchten.

4

Alle Skriptsprachen sind gute Kandidaten: Perl, Python, Ruby, PHP und AWK sind alle in Ordnung. Die Verwendung einer dieser Sprachen ist besser als ein Blick auf die Protokolle ab einer (kleinen) Größe.

Wearing Ruby Slippers to Work ist ein Beispiel dafür, dies in Ruby zu tun, geschrieben in Why's unnachahmlichen Stil. Hier ist ein basic example in Perl. Ich schlage vor, Sie wählen eine dieser Sprachen und fangen an zu knacken.

1

Ich finde diese list von unschätzbarem Wert im Umgang mit jedem Job, der eine mit Python zu analysieren benötigt.

Ich würde nicht Perl für die Analyse von großen/komplexen Logs verwenden - nur für die Lesbarkeit (die Geschwindigkeit auf Perl fehlt für mich (große Jobs) - aber das ist wahrscheinlich mein Perl-Code (ich muss verbessern)).

Wenn Grep jedoch genau Ihren Bedürfnissen entspricht, gibt es wirklich keinen Grund, sich daran zu hindern, einen vollständigen Parser zu schreiben. Die einfachste Lösung ist normalerweise die beste, und Grep ist ein gutes Werkzeug.

2

Ein großer Vorteil Perl über Python hat, ist, dass, wenn der Text Parsen ist die Fähigkeit, regular expressions direkt als Teil der Sprachsyntax zu verwenden. Zum Beispiel:

if ($line =~ m/^Regex/) { 
    ... code goes here 
} 

Perl weist auch capture groups direkt zu $ ​​1, $ 2, etc., so dass es sehr einfach, mit zu arbeiten. Abhängig von dem Format und der Struktur der Logdateien, die Sie analysieren möchten, könnte sich dies als sehr nützlich erweisen (oder, wenn es als Datei mit fester Breite oder mit einfacheren Techniken analysiert werden kann, nicht sehr nützlich).

Es ist alles nur syntaktische Zucker, wirklich, und andere Sprachen können Sie auch verwenden reguläre Ausdrücke und Capture-Gruppen (in der Tat zeigt der verknüpfte Artikel, wie es in Python zu tun). Sie müssen nur ein bisschen mehr Code schreiben und Objekte herumreichen, um es zu tun.

+1

die Fähigkeit, Regex mit Perl zu verwenden, ist kein großer Vorteil gegenüber Python, denn erstens hat Python auch Regex, und zweitens ist Regex nicht immer die bessere Lösung. – ghostdog74

+1

Es ist noch einfacher, Regexes in Perl als in einer anderen Sprache zu verwenden, da sie direkt verwendet werden können. Und ja, manchmal ist Regex nicht die richtige Lösung, deshalb habe ich gesagt "je nach Format und Struktur der Logdateien, die Sie analysieren wollen" –

+1

C'mon, es ist nicht so schwer, Regexes in Python zu verwenden. Wenn Sie über bloße Syntax streiten, dann streiten Sie wirklich nichts, das sich lohnt. Perl hat einige Regex-Funktionen, die Python nicht unterstützt, aber die meisten Leute brauchen sie wahrscheinlich nicht. Wie bei den Aufnahmepuffern war Python mit etikettierten Captures (die Perl jetzt auch hat) dem Spiel voraus. –

2

Es gibt ein Perl-Programm namens Log_Analysis, das viele Analysen und Vorverarbeitungen für Sie durchführt.

1

Eine andere mögliche Interpretation Ihrer Frage ist "Gibt es irgendwelche Tools, die Protokollüberwachung erleichtern?“Und zu antworten, dass ich vorschlagen, würden Sie einen Blick auf Splunk haben oder vielleicht Log4view.

+0

Sprog ist auch ziemlich geschickt: http://sprog.sourceforge.net/ – daotoad

+0

Octopussy ist auch schön (Disclaimer: mein Projekt): http://www.8pussy.org – sebthebert

1

auf Linux, können Sie einfach die Shell (bash, ksh etc.) verwenden, um zu analysieren Log-Dateien, wenn sie in der Größe nicht zu groß sind Die anderen Tools zu gehen sind in der Regel grep und awk.After, für mehr Programmierleistung, wird in der Regel awk.Wenn Sie große Dateien zu analysieren haben, versuchen Sie awk

Natürlich, Perl oder Python oder praktisch jeder andere Sprachen mit Dateilese- und Zeichenfolgenmanipulationsfunktionen können ebenfalls verwendet werden

2

Durch das Erlernen einer Programmiersprache können Sie Ihre Logarithmusfähigkeiten auf eine andere Ebene bringen:

Jede dynamische oder "scripting" Sprache wie Perl, Ruby oder Python wird die Aufgabe erledigen. Was Sie verwenden sollten, hängt von externen Faktoren ab. Unter den Dingen, die Sie beachten sollten:

  • funktioniert schon eine geeignete langauge verwenden?
  • Kennen Sie jemanden, der Sie in einer geeigneten Sprache beraten kann?
  • versuchen Sie jede Sprache ein wenig und sehen Sie, welche Sprache Ihnen besser passt.

Persönlich für die obige Aufgabe würde ich Perl verwenden. YMMV.

Mehr Gründe Perl mögen:

Leistungsstarke Einzeiler - wenn Sie einen ganz schnell tun müssen, einmaligen Job bietet Perl einig wirklich großen Short-Cuts. Ein Beispiel finden Sie in perlrun -n

Multiparadigmensprache - Perl unterstützt imperative, funktionale und objektorientierte Programmiermethoden.

Sigils - die führenden Interpunktionszeichen auf Variablen wie $foo oder @bar. Sie sind ein wenig wie ungarische Notation, ohne so nervig zu sein.

Moose - ein unglaubliches neues OOP-System, das leistungsstarke neue OO-Techniken für die Codezusammensetzung und -wiederverwendung bietet.

Strikturen - das use strict Pragma fängt viele Fehler ein, die andere dynamische Sprachen zur Kompilierungszeit ausblenden. Ich vermisse es schrecklich, wenn ich Python oder PHP benutze.

Selbstdisziplin - Perl gibt Ihnen die Freiheit zu schreiben und zu tun, was Sie wollen, wann Sie wollen. Dies bedeutet, dass Sie lernen müssen, sauberen Code zu schreiben, oder Sie werden verletzen. Glücklicherweise gibt es Tools, die einem Anfänger helfen. Perl::Critic führt fusselartige Analyse von Code für Best Practices durch. diese

-2

versuchen Nagios Log Monitoring

Der Grund dieses Werkzeug das Beste für Ihr Zweck ist:

Es erfordert keine Installation von Fremd Pakete. Das bedeutet, dass Sie keine Perl-Abhängigkeiten oder irgendwelche albernen Pakete installieren müssen, die Sie nervös machen könnten.

Es gibt wenig bis keine Lernkurve. Sie müssen keine Programmiersprachen lernen, um es zu benutzen. Alles, was Sie tun müssen, ist genau zu wissen, was Sie mit den Protokollen tun möchten, die Sie im Sinn haben, und lesen Sie die PDF, die mit dem Tool geliefert wird.

Wenn das Protokoll Sie in einem syslog-Format analysieren wollen, können Sie einen Befehl wie folgt verwendet werden:

./NagiosLogMonitor 10.20.40.50:5444 logrobot autofig /opt/jboss/server.log 60m 'INFO' '.' 1 2 -show

Selbst wenn Ihr Protokoll nicht in einem anerkannten Format ist, kann es immer noch effizient mit dem folgenden Befehl überwacht werden:

./NagiosLogMonitor 10.20.40.50:5444 logrobot autonda/opt/jboss /server.log 60m 'INFO' '.' 1 2 jbosslogs -nshow

Um ein Protokoll für bestimmte Zeichenfolgen zu analysieren, ersetzen Sie die Zeichenfolge 'INFO' durch die Muster, die Sie im Protokoll beobachten möchten. Wenn Sie nach mehreren Mustern suchen möchten, geben Sie sie wie folgt an: 'INFO | FEHLER | fatal'.

Wenn Ihnen Effizienz und Einfachheit (und sichere Installation) wichtig sind, ist dieses Nagios-Tool der richtige Weg.

+0

Während dieser Link die Frage beantworten kann, ist es besser um die wesentlichen Teile der Antwort hier einzubeziehen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. – Serlite

+0

aktualisierte Post ... –

Verwandte Themen