elasticsearch Logstash“;添加“U字段”;保存";%{…};JSON中缺少键值对时作为值
My Logstash从Filebeat接收一个JSON,其中包含objectelasticsearch Logstash“;添加“U字段”;保存";%{…};JSON中缺少键值对时作为值,elasticsearch,logstash,logstash-configuration,filebeat,logstash-file,elasticsearch,Logstash,Logstash Configuration,Filebeat,Logstash File,My Logstash从Filebeat接收一个JSON,其中包含objectexample,它本身包含objectjsonNested1,它包含一个键值对(键为jsonNested2) 如果jsonNested1存在且jsonNested2存在且包含值,则该值将正确保存在Elasticsearch中的ExampleFieldName中 add_field => {"ExampleFieldName" => "%{[example][jsonNested1][jsonNested2]
example
,它本身包含objectjsonNested1
,它包含一个键值对(键为jsonNested2
)
如果jsonNested1
存在且jsonNested2
存在且包含值,则该值将正确保存在Elasticsearch中的ExampleFieldName
中
add_field => {"ExampleFieldName" => "%{[example][jsonNested1][jsonNested2]}"}
在这种情况下,ExampleFieldName
将包含exampleValue
{
"example": {
"jsonNested1": {
"jsonNested2": "exampleValue"
}
}
}
在这种情况下,我希望ExampleFieldName
包含一个空字符串或根本不包含任何值(或者一开始就不创建)
但碰巧ExampleFiledName
包含字符串%{[example][jsonNested1][jsonNested2]}
我已经找到了解决方案,在执行add\u字段之前,首先检查嵌套的键值对是否存在
{
"example": {
"jsonNested1": {
}
}
}
这个解决方案可行,但我不相信这是最好的方法。我觉得很奇怪,当键值对不存在时,Logstash甚至将%{[example][jsonNested1][jsonNested2]}
保存为字符串。我希望它能认识到这一点,并且在这种情况下不会保存任何价值
如果必须检查一个字段,则if语句是可接受的解决方案。但目前我正在使用大约50个字段的Logstash配置。是否应该在那里创建50条if语句?您可以使用修剪过滤器修复此问题,其中的默认值是删除未解析的字段引用。您可以使用修剪过滤器修复此问题,其中的默认值是删除未解析的字段引用
if [example][jsonNested1][jsonNested2] {
mutate {
add_field => {"ExampleFieldName" => "%{[example][jsonNested1][jsonNested2]}"}
}
}