Logstash grok multiligne message

Mes journaux sont mis en forme comme ceci:

2014-06-19 02:26:05,556 INFO ok
2014-06-19 02:27:05,556 ERROR
 message:space exception
         at line 85
 solution:increase space
          remove files   

Il y a 2 types d'événements:

-journal sur une ligne comme la première

-journal sur plusieurs lignes, comme la deuxième

Je suis en mesure de traiter la ligne de l'événement, mais je ne suis pas en mesure de traiter le deuxième type, où je tiens à stocker le message dans une variable et la solution dans un autre.

C'est ma config:

input {
 file {
    path => ["logs/*"]
    start_position => "beginning"
    codec => multiline {
                   pattern => "^%{TIMESTAMP_ISO8601} "
                   negate => true
                   what => previous
    }       
 }
}
filter {
 #parsing of one line event
 grok {
 patterns_dir => "./patterns"
 match=>["message","%{TIMESTAMP_ISO8601:timestamp} %{WORD:level} ok"]
 }
#the parsing fail, so we assumed we are in multiline events, now I process them and I am stuck when I am getting to the new line.
if "_grokparsefailure" in [tags] {
 grok {
 patterns_dir => "./patterns"
 match=>["message","%{TIMESTAMP_ISO8601:timestamp} %{WORD:level}\r\n"]
 }
}

}

Donc, c'est ce que j'ai fait, et je voudrais avoir dans ma console de sortie suivants:

{
"@timestamp" => "2014-06-19 00:00:00,000"
"path" => "logs/test.log"
"level"=>"INFO"
},
{
"@timestamp" => "2014-06-19 00:00:00,000"
"path" => "logs/test.log"
"level"=>"ERROR"
"message" => "space exception at line 85"
"solution"=>"increase space remove files"
}

Concrètement, je voudrais obtenir tout l'expression entre deux mots ("message" et de "solution" pour la variable message, "solution" et la fin de l'épreuve pour la solution de la variable), et que, peu importe si l'expression est sur une ou plusieurs lignes.

Merci d'avance

  • Avez-vous essayé juste message: (?<message>.*) solution:(?<solution>.*)? Je ne sais pas si . les matchs de saut de ligne dans le grok ou non-si non, on peut mettre [.\r\n]* au lieu de .*
InformationsquelleAutor user2443476 | 2014-06-19