私はlogstashにjson形式でログを記録していますが、ログには次のフィールドがあり、各フィールドは文字列であり、atts
フィールドは文字列化されたjsonです(注:atts
サブフィールドは毎回異なります)
以下に例を示します。
{"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"
}
json
フィルターがあります。解析したいフィールドと、必要なターゲットを渡すだけです。
何かのようなもの:
json {
source => "[parsed][atss]"
target => "[parsed][newfield]"
}
新しいフィールドとしてatssを配置できるかどうかはわかりません。動作する場合と動作しない場合があります。そうでない場合は、mutate
フィルターを使用してremove_field
およびrename_field
。