如何根据日期删除logstash中的给定事件?

时间:2015-07-14 21:33:01

标签: logstash

我有一个Kafka JSON流,我在logstash中设置为输入。

我想放弃日期在指定日期之前的事件(例如,今天的午夜)。

我可以正确解析输入(它是json,所以它是默认的),我可以使用json编解码器将其打印到stdout。

如何过滤日期?是否有类似的东西:

filter {
  if [date] <= "some date" {
    drop { }
  }
}

1 个答案:

答案 0 :(得分:3)

在您的日期{}过滤器之前,请放入ruby {}并收集服务器的当前时间:

event['server_timestamp'] = event['@timestamp']

然后正常使用您的日期{}过滤器将@timestamp重置为事件的时间。

之后,再次放入ruby {}来计算差异:

event['lag'] = ( ( event['server_timestamp'] - event['@timestamp'] ) ).to_f

然后回到logstash中,检查对你的约束的滞后:

# seconds!
if [lag] > 60 {
     drop{}
}

如果您不想与服务器的时间进行比较,您可以随时使用。当我尝试使用ruby的Datetime时,它似乎下降了几毫秒,所以要注意这一点。