add_field => {"ExampleFieldName" => "%{[example][jsonNested1][jsonNested2]}"}
我的Logstash从Filebeat接收一个JSON,其中包含对象example
,该对象本身包含对象jsonNested1
,该对象包含一个键值对(键为jsonNested2
)。
如果jsonNested1
存在并且jsonNested2
存在并且包含一个值,那么该值将正确保存在Elasticsearch的{{1}}中。
ExampleFieldName
在这种情况下,{
"example": {
"jsonNested1": {
"jsonNested2": "exampleValue"
}
}
}
将包含ExampleFieldName
。
exampleValue
在这种情况下,我希望{
"example": {
"jsonNested1": {
}
}
}
包含一个空字符串或根本不包含任何值(或者首先不要创建)。
但是碰巧ExampleFieldName
包含字符串ExampleFiledName
。
我已经找到解决方案,方法是在执行%{[example][jsonNested1][jsonNested2]}
之前先检查嵌套键值对是否存在。
add_field
此解决方案有效,但我无法相信这是实现此目的的最佳方法。我发现很奇怪,当键值对不存在时,Logstash甚至在这里将if [example][jsonNested1][jsonNested2] {
mutate {
add_field => {"ExampleFieldName" => "%{[example][jsonNested1][jsonNested2]}"}
}
}
另存为字符串。我希望它能够识别出这种情况,并且在这种情况下根本不保存任何值。
如果必须检查一个字段,则if语句是可以接受的解决方案。但是目前我正在使用大约50个字段进行Logstash配置。我应该在那里创建50个if语句吗?