2014-06-18 11 views
5

Zur Zeit habe ich:was den regulären Ausdruck Muster für mehrzeilige (logstash) ist

multiline { 
type => "tomcat" 
pattern => "(^.+Exception: .+)|(^\s+at .+)|(^\s+... \d+ more)|(^\s*Caused by:.+)|(---)" 
what => "previous" 
} 

und dies ist ein Teil meiner log:

TP-xxxxxxxxxxxxxxxxxxxxxxxx: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
    at xxxxxx 
Caused by: xxxxxxxxx 
    at xxxxxx 
Caused by: xxxxxxxxx 
--- The error occurred in xxxxxxxxx. 
--- The error occurred xxxxxxxxxx. 

Mein Muster funktioniert hier nicht. Wahrscheinlich, weil ich das (---) am Ende hinzugefügt habe. Was ist der richtige Regexp, um auch die --- Zeilen hinzuzufügen?

Dank

Antwort

2

Sie werden für die anderen Zeichen auf der Linie als auch berücksichtigen wollen:

(^---.*$) 
+0

Versucht es aber nicht funktioniert. Auch versucht (^ .---. +) Und (^ \ - \ - \ -. *) Und alles dazwischen. Ich kann auch kein logstash Protokoll finden, das mir sagt, was der Fehler ist. – user3752671

+0

Wie wäre es mit '(^ ---. +)'? Wenn Sie '' (---) 'von Ihrer ursprünglichen Konfiguration entfernen, funktioniert der Ausdruck auch für die anderen Zeilen, von denen Sie erwarten würden, dass er sie aufnimmt? –

+0

Wenn ich (---) entferne, funktioniert es gut. (außer den - Zeilen :-P). Auch versucht (^ ---. +) Aber hat nicht funktioniert. – user3752671

1

Wenn ein Protokollereignis beginnt mit einem Zeitstempel oder einem bestimmten Wort, zum Beispiel Ihres in protokolliert, wenn alle Protokolle mit TP beginnen, dann können Sie es als Filtermuster verwenden.

Mit diesem Filter können Sie Ihre Protokolle einfach multiline, ohne komplexe Muster verwenden zu müssen.

+0

Manchmal ist es^TP. Manchmal ist es [Entladen und manchmal ist es log4j:. versucht es so "^ TP |^\ [Entladen |^log4j:" aber funktioniert nicht – user3752671

+0

Ich denke, Sie haben es falsch verstanden.Das Muster "^ TP" bedeutet, dass alle Logs "TP" starten. Das "^" bedeutet das Starten einer Zeile bei regexp. Also, werden Ihre Protokolle, "TPXXXXXXXX", alle Protokolle mit logstash umgehen können. Sie können versuchen, Ihre Protokolle mit allen Start mit "TP" zu ändern. Dann versuche es noch einmal. :) –

2

Ich habe Ihre regex und Text in diesen Online-regex Freunde und versuchte, den Vorschlag von Eric setzen:

Manchmal sind diese Online-Freunde wirklich helfen, den Geist zu löschen . Dieses Bild zeigt, was erkannt wird:

Regex processing on regexr.com

Wenn ich auf diese stecken würde, würde ich nicht auf die regex konzentrieren sich weiter. Eher würde ich diese Punkte überprüfen:

  • Da es verschiedene regex Dialekte gibt, welcher Dialekt wird von logstash verwendet? Was bedeutet das für mein Muster?
  • Gibt es irgendwelche logstashspezifischen Modifikatoren, die nicht gesetzt sind und gesetzt werden müssen?
  • Wie Ben erwähnt, gibt es weitere Filterwerkzeuge. Würde es helfen, stattdessen grok zu verwenden?