2017-09-14 108 views
0

我想删除事件,其中字段createdTm不是来自特定日期。 createdTm收到为long(从时代开始),然后我将其转换为日期。logstash - 删除日期字段不是特定日期的事件

实际不工作配置:

date { 
match => [ "createdTm", "UNIX_MS" ] 
target => "createdTm" 
} 

if !("2017-09-14" in [createdTm]) { drop {} } 

但这似乎放下一切。

我已经看到一些ruby代码,它使用当前时间和计算差异,但它不是我想要的,因为如果在午夜之后不久运行,它也会接受来自昨天的日志。

我正在使用logstash 2.3。 感谢您的任何回应。

回答

0

我结束了“黑客”它像这样:

mutate { 
     convert => { "createdTm" => "integer" } 
    } 

if !([createdTm]>=1505433600000 and [createdTm]<=1505519999000) { 
    drop {} 
} 

date { 
     match => [ "createdTm","UNIX_MS" ] 
    target => "createdTm" 
} 

首先我转换createdTm为整数,才能够进行比较。
接下来,我将它与那些恒定值进行比较,这些值也是unix时代(1970年)的毫秒数 - 基本上检查createdTm是否处于间隔期。
如果不是,则放弃事件,如果是,则将其转换为日期并继续解析消息。

我说“哈克”,因为我需要在一些在线转换器中获得这些常量值,而且它并不直观。
我没有找到选择先解析日期,然后检查它作为字符串,如问题中所述。