web-dev-qa-db-ja.com

LogstashでのネストされたJSON文字列の解析

私は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"
}
12
dina

jsonフィルターがあります。解析したいフィールドと、必要なターゲットを渡すだけです。

何かのようなもの:

json {
  source => "[parsed][atss]"
  target => "[parsed][newfield]"
}

新しいフィールドとしてatssを配置できるかどうかはわかりません。動作する場合と動作しない場合があります。そうでない場合は、mutateフィルターを使用してremove_fieldおよびrename_field

4
Alcanzar