解析Logstash中的嵌套JSON字符串

解析Logstash中的嵌套JSON字符串,logstash,Logstash,我以json格式登录到logstash, 我的日志有以下字段,每个字段都是字符串,atts字段是字符串化的json(注意:atts子字段每次都不同) 以下是一个例子: {“name”:“bob”,“last”:“builder”,“atts”:“{\“a\”:111,\“b\”:222} 我想将其解析为如下内容: { "name" => "bob", "last" => "builder" "atss" => { "a"

我以json格式登录到logstash, 我的日志有以下字段,每个字段都是字符串,
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  }}
嗯, 现在我明白了:

{
    "@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
过滤器
删除\u字段
重命名\u字段

多亏了@Alcanzar,我就是这么做的

input { 
  stdin { } 
}  

filter {
  json {
    source => "message"
    target => "message"
  }
  json {
    source => "[message][atts]"
    target => "[message][atts]"
  }

}
 output { stdout { codec => rubydebug  }}

截至2020年8月5日,在logstash 7.8.0中,JSON过滤器现在解析嵌套字符串。
我将以下字符串存储在Postgres列中,我们称之为“column-1”

我的json过滤器如下所示

json {
    source => "column-1"
    target => "column-1"
}
在我的Elasticsearch索引中,它被解析为嵌套字典


与公认的答案不同的是,现在我们只需要一个json过滤器,而不是多个。

谢谢!你能看到我贴出的答案吗?有没有办法把过滤器全部写在
json
filter下一次?类似于
filter{json{source=>“message”target=>“message”source=>“[message][atts]”“target=>“[message][atts]”}}
json {
    source => "column-1"
    target => "column-1"
}