Json Logstash:如何在不知道keyname的情况下提取对象
我期望的输入JSON包含一个包含一些对象的字段。对象的键应该是随机的,所以我不能在logstash yml文件中指定它 示例JSON:Json Logstash:如何在不知道keyname的情况下提取对象,json,ruby,logstash,Json,Ruby,Logstash,我期望的输入JSON包含一个包含一些对象的字段。对象的键应该是随机的,所以我不能在logstash yml文件中指定它 示例JSON: { “根密钥”:{ “字段名”:{ “子字段”:“子字段值” } } } “FieldName”本身可以是输入中的任意随机字符串,因此相同的JSON在不同的事件中看起来可能是这样的- { “根密钥”:{ “SomeDifferentFieldName”:{ “子字段”:“子字段值” } } } 奇怪的是,“SubField”键名将是静态的 我想我可以做这样的
{
“根密钥”:{
“字段名”:{
“子字段”:“子字段值”
}
}
}
“FieldName”本身可以是输入中的任意随机字符串,因此相同的JSON在不同的事件中看起来可能是这样的-
{
“根密钥”:{
“SomeDifferentFieldName”:{
“子字段”:“子字段值”
}
}
}
奇怪的是,“SubField”键名将是静态的
我想我可以做这样的事-
mutate{add_field=>{fieldValue=>“[RootKey][0][SubField]}}
但这似乎对数组而不是对象很有效。
任何其他表示都会出错-
例如
mutate{add_field=>{fieldValue=>“[RootKey][[SubField]]”}
mutate{add_field=>{fieldValue=>“[RootKey]{0}[SubField]”}
mutate{add_field=>{fieldValue=>“[RootKey]{}[SubField]”}
您需要使用ruby过滤器。试一试
ruby {
code => '
root = event.get("RootKey")
if root
root.each { |x|
event.set("fieldValue", x["SubField"])
}
end
'
}