多个If在单个过滤器中

时间:2016-10-24 09:20:38

标签: logstash

 if [CREATION_DATE] == "" 
 {
   mutate {
            convert => [ "CREATION_DATE", "string" ]
          }
 }
 else
 {
   date {
   locale => "en"
   match => [ "CREATION_DATE", "dd-MMM-yy hh.mm.ss.SSS a"]
   target => "CREATION_DATE"
        }
 }  

  if [SUBMITTED_DATE] == "" 
 {
   mutate {
            convert => [ "SUBMITTED_DATE", "string" ]
          }
 }
 else
 {
   date {
   locale => "en"
   match => [ "SUBMITTED_DATE", "dd-MMM-yy hh.mm.ss.SSS a"]
   target => "SUBMITTED_DATE"
        }
 }  

 if [LAST_MODIFIED_DATE] == ""
 {
 mutate {
         convert => [ "LAST_MODIFIED_DATE", "string" ]
      }
 }
 else
 {
   date {
   locale => "en"
   match => [ "LAST_MODIFIED_DATE", "dd-MMM-yy hh.mm.ss.SSS a"]
   target => "LAST_MODIFIED_DATE"
       }
 }' 
如果我在日期格式中拥有全部三个(CREATION_DATE,SUBMITTED_DATE,LAST_MODIFIED_DATE),那么

正在获取输出。如果STRING没有在我的输入中获取该日志文件。   对于前: 我的意见是

12-JUL-13 11.33.56.259 AM,12-JUL-13 03.59.36.136 PM,12-JUL-13 04.00.05.584 PM
14-JUL-13 11.33.56.259 AM,11-JUL-13 04.00.05.584 PM

我的输出将成功

12-JUL-13 11.33.56.259 AM,12-JUL-13 03.59.36.136 PM,12-JUL-13 04.00.05.584 PM

但不是第二行

在Simple中,只有当三个if子句具有日期时,Logstash才会建立索引。 帮助我。提前提醒!!

2 个答案:

答案 0 :(得分:1)

@ Fairy和@ alain-collins的评论指出了if语句的问题。

if [CREATION_DATE] == ""

不检查该字段是否存在,它检查它是否为空字符串。

相反,您可以使用正则表达式检查来查看字段中是否有任何内容使用:

if [CREATION_DATE] =~ /.*/

并在返回true时执行日期过滤器。

答案 1 :(得分:0)

当我更改输入格式时问题解决了。 (新格式)11-JUL-13 06.36.33.425000000 PM,13-JUL-13 06.36.33.425000000 PM ,, 代替 (旧格式)11-JUL-13 06.36.33.425000000 PM,13-JUL-13 06.36.33.425000000 PM,"", 但我的问题仍然存在。 我发布了这个,因为这个解决方案可能对某些人有用。 感谢!!!

相关问题