logstash - 删除日期字段不是来自特定日期的事件

时间:2017-09-14 12:20:17

标签: ruby logstash

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

实际不能正常工作:

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

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

但这似乎放弃了一切。

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

我正在使用logstash 2.3。 感谢您的回复。

1 个答案:

答案 0 :(得分:0)

我结束了“黑客攻击”它:

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

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

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

首先我将createdTm转换为整数,以便能够比较它 接下来,我将它与那些常数值进行比较,这些值也是unix epoch(1970)的几毫秒 - 基本上是检查createdTm是否在间隔内。
如果没有,请删除事件,如果是,则将其转换为日期并继续解析消息。

我说“hacky”,因为我需要在某些在线转换器中获取这些常量值并且它不是非常直观。
我还没有找到先解析日期然后将其作为字符串检查的选项,如上所述