J'ai un fichier journal qui ressemble à ceci (simplifié)
exemple Logline
MyLine data={"firstname":"bob","lastname":"the builder"}
Je voudrais extraire le json contenu dans data et créer deux champs, un pour le prénom, un pour le dernier. Cependant, la sortie que j'obtiens est la suivante:
{"message":"Line data={\"firstname\":\"bob\",\"lastname\":\"the builder\"}\r","@version":"1","@timestamp":"2015-11-26T11:38:56.700Z","Host":"xxx","path":"C:/logstashold/bin/input.txt","MyWord":"Line","parsedJson":{"firstname":"bob","lastname":"the builder"}}
Comme vous pouvez le voir
..."parsedJson":{"firstname":"bob","lastname":"the builder"}}
Ce n'est pas ce dont j'ai besoin, je dois créer des champs pour le prénom et le nom dans kibana, mais logstash n'extrait pas les champs avec le filtre json.
LogStash Config
input {
file {
path => "C:/logstashold/bin/input.txt"
}
}
filter {
grok {
match => { "message" => "%{Word:MyWord} data=%{GREEDYDATA:request}"}
}
json{
source => "request"
target => "parsedJson"
remove_field=>["request"]
}
}
output {
file{
path => "C:/logstashold/bin/output.txt"
}
}
Toute aide grandement appréciée, je suis sûr que je manque quelque chose de simple
Merci
Après votre filtre json
ajoutez un autre appelé mutate
afin d'ajouter les deux champs que vous prendrez dans le champ parsedJson
.
filter {
...
json {
...
}
mutate {
add_field => {
"firstname" => "%{[parsedJson][firstname]}"
"lastname" => "%{[parsedJson][lastname]}"
}
}
}
Pour votre exemple de ligne de journal ci-dessus, cela donnerait:
{
"message" => "MyLine data={\"firstname\":\"bob\",\"lastname\":\"the builder\"}",
"@version" => "1",
"@timestamp" => "2015-11-26T11:54:52.556Z",
"Host" => "iMac.local",
"MyWord" => "MyLine",
"parsedJson" => {
"firstname" => "bob",
"lastname" => "the builder"
},
"firstname" => "bob",
"lastname" => "the builder"
}