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.*
Vous devez vous connecter pour publier un commentaire.
Comme pour multiligne grok, il est préférable d'utiliser le drapeau spécial pour chaîne de modèle:
Il semble que vous avez deux questions:
Vous avez besoin de combiner correctement votre multilines:
Ce sera de combiner toute ligne qui commence par un espace dans la ligne précédente. Vous pouvez finir par avoir à utiliser un "à côté" au lieu de "précédent".
Remplacer Les Retours À La Ligne
Je ne crois pas que grok matches à travers des retours à la ligne.
J'ai contourné ce problème en procédant de la manière suivante dans votre section de filtre. Cela devrait aller avant la grok section:
Cela m'a permis de grok multilines comme une grande ligne plutôt que correspondant seulement jusqu'à la "\n".
multiline
filtre est obsolète et doit être remplacé par le multiligne code