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