Logstash检查&存在解析子场

时间:2015-09-02 06:18:22

标签: logstash

在Logstash中,我有一个JSON有效负载,我已按如此解码:

filter 
{ 
   json 
   { 
     source => "payload" 
     target => "payloadData" 
   }
}

现在我想检查payloadData._extraData是否存在,然后再反序列化。

我尝试过这种方法,使用this related question中给出的示例:

filter 
{ 
   json 
   { 
     source => "payload" 
     target => "payloadData" 
   }
   if [payloadData._extraData] =~ /.+/ 
   { 
       sourcce => "payloadData._extraData"  
       target => "payloadData.extraData" 
   } 
}

但它没有做任何事情(没有崩溃,没有错误信息,只是没有做任何事情)

1 个答案:

答案 0 :(得分:7)

正确的语法是:

if [payloadData][_extraData] =~ /.+/   { }

示例输入:

{"foo":"bar","spam":"eggs","abc":"xyz","one":"two","three":"four","five":"six","seven":{"eight":"nine"}}

<强>配置:

filter {
    json { source => message }
    if [seven][eight] =~ /.+/ {
        # do something
    }
}

除此之外, if语句中的代码不做任何事情。您需要指定应执行的过滤器。 e.g:

if [payloadData][_extraData] =~ /.+/  { 
   json {
       source => "payloadData[_extraData]"  
       target => "payloadData[extraData]" 
   }
} 

您想在if语句中反序列化什么?第一个json过滤器应该识别嵌套对象。