elasticsearch Logstash“;添加“U字段”;保存";%{…};JSON中缺少键值对时作为值,elasticsearch,logstash,logstash-configuration,filebeat,logstash-file,elasticsearch,Logstash,Logstash Configuration,Filebeat,Logstash File" /> elasticsearch Logstash“;添加“U字段”;保存";%{…};JSON中缺少键值对时作为值,elasticsearch,logstash,logstash-configuration,filebeat,logstash-file,elasticsearch,Logstash,Logstash Configuration,Filebeat,Logstash File" />

elasticsearch Logstash“;添加“U字段”;保存";%{…};JSON中缺少键值对时作为值

elasticsearch 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]

My Logstash从Filebeat接收一个JSON,其中包含object
example
,它本身包含object
jsonNested1
,它包含一个键值对(键为
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]}"}
    }
}