Разбор вложенной строки JSON в Logstash
я регистрируюсь в logstash в формате json,
мои журналы имеют следующие поля, каждое поле представляет собой строку и atts
поле является строковым json (Примечание:atts
sub поля различны каждый раз)
вот пример:
{"name":"bob","last":"builder", "atts":"{"a":111, "b":222}"}
Я хотел бы разобрать это что-то вроде этого:
{
"name" => "bob",
"last" => "builder"
"atss" => {
"a" => 111,
"b" => 222}
}
вот моя конфигурация:
input { stdin { } }
filter {
json {
source => "message"
target => "parsed"
}
}
output { stdout { codec => rubydebug }}
ok, Итак, теперь я понимаю:
{
"@timestamp" => 2017-04-05T12:19:04.090Z,
"parsed" => {
"atss" => "{"a":111, "b":222}",
"name" => "bob",
"last" => "the builder"
},
"@version" => "1",
"host" => "0.0.0.0"
}
как я могу парсить atts
поле json так что получаю:
{
"@timestamp" => 2017-04-05T12:19:04.090Z,
"parsed" => {
"atss" =>
{"a" => 111,
"b" => 222},
"name" => "bob",
"last" => "the builder"
},
"@version" => "1",
"host" => "0.0.0.0"
}
2 ответов
благодаря @Alcanzar вот что я сделал
input {
stdin { }
}
filter {
json {
source => "message"
target => "message"
}
json {
source => "[message][atts]"
target => "[message][atts]"
}
}
output { stdout { codec => rubydebug }}
есть json
фильтр. Просто передайте ему поле, которое вы хотите разобрать, и цель, где вы хотите.
что-то типа:
json {
source => "[parsed][atss]"
target => "[parsed][newfield]"
}
Я не уверен, что вы можете поставить atss как новое поле. Это может сработать, а может и нет. Если это не так, используйте mutate
фильтр remove_field
и rename_field
.