2014-06-18 22 views
5

Obecnie mam:co jest wzorzec wyrażenia regularnego dla wielowierszowego (logstash)

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

i to jest część mojego dziennika:

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

mój wzór nie działa tutaj. Prawdopodobnie dlatego, że dodałem (---) na końcu. Jaki jest prawidłowy regexp, aby dodać także linie ---?

Dzięki

Odpowiedz

2

będziemy chcieli uwzględnić innych znaków na linię, a także:

(^---.*$) 
+0

Próbowałem, ale nie działa. Próbowano również (^ .---. +) I (^ \ - \ - \ -. *) I wszystkiego pomiędzy. Nie mogę znaleźć logstash log informujący mnie, co jest błąd. – user3752671

+0

Co powiedzie się na '(^ ---. +)'? Ponadto, jeśli usuniesz '(---)' z oryginalnej konfiguracji, czy wyrażenie działa dla innych linii, które spodziewałbyś się odebrać? –

+0

Po usunięciu (---) działa dobrze. (z wyjątkiem - linii: -P). Próbowano również (^ ---. +), Ale nie zadziałało. – user3752671

1

Jeśli jedno zdarzenie dziennika zacząć datownika lub konkretnego wyrazu, na przykład, w swojej loguje się, jeśli wszystkie dzienniki zaczynają się od TP, wtedy możesz użyć go jako wzorca filtra.

multiline { 
      pattern => "^TP" 
      what => "previous" 
      negate => true 
    } 

Dzięki temu filtru można łatwo wyrównywać dzienniki, nie trzeba używać złożonych wzorów.

+0

Czasami jest to^TP. Czasami jest [Rozładunek, a czasem log4j:. Próbowałem to zrobić "^ TP |^\ [Rozładowuję |^log4j:" ale nie działa – user3752671

+0

Myślę, że źle to zrozumiałeś.Wzorzec "^ TP" oznacza, że ​​wszystkie logi zaczynają się od "TP". "^" Oznacza zaczynanie linii w regexp. Tak więc, twoje dzienniki, "TPXXXXXXXX", wszystkie dzienniki mogą obsłużyć przez logstash. Możesz spróbować zmodyfikować swoje logi, zaczynając od "TP". Następnie spróbuj ponownie. :) –

2

Włożyłem swoje regex i tekst do tych internetowych regex kumpli i starał sugestię Eric:

Czasami te kumple forum naprawdę pomaga oczyścić umysł . Ten obraz pokazuje, co jest rozpoznawane:

Regex processing on regexr.com

Gdybym był zatrzymany w tej sprawie, nie chciałbym skupić się na samej regex dalej. Raczej sprawdziłbym te punkty:

  • Ponieważ istnieją różne dialekty regex, jaki dialekt jest używany przez logstash? Co to oznacza dla mojego wzorca?
  • Czy istnieją jakieś modyfikatory specyficzne dla logstash, które nie są ustawione i które należy ustawić?
  • Jak wspomniał Ben, istnieją dodatkowe narzędzia filtrowania. Czy pomogłoby to użyć grok?