忽略早于给定日期的传入 logstash 条目

ignore incoming logstash entries that are older than a given date

我希望 Logstash 在处理输入条目时简单地删除超过 N 天的条目。

我假设我会使用 the date module and obviously drop,但我不知道如何连接它们。

我知道进行日期级别比较的唯一方法是通过 Ruby 代码。您需要 date 过滤器来解析时间戳(这是它自己的问题)。

一旦您将日期解析为一个字段(例如,event["@timestamp"]),您就可以使用它来确定是否要忽略它:

5.0:

ruby {
  code => "event.cancel if (Time.now.to_f - event.get('@timestamp').to_f) > (60 * 60 * 24 * 5)"
}

前5.x:

ruby {
  code => "event.cancel if (Time.now.to_f - event['@timestamp'].to_f) > (60 * 60 * 24 * 5)"
}

在这种情况下,5N

此外,值得指出的是,这是相对于 Logstash 恰好是 运行 的机器时间而言的。如果它不准确,则会影响日期数学。同样,如果源机器的系统时钟是错误的,那么它也可能是一个问题。

借鉴阿兰的好点,除了基于它的掉落之外,你还可以使用这个商店的滞后时间。

5.0:

ruby {
  code => "event.set('lag_seconds', Time.now.to_f - event.get('@timestamp').to_f))"
}

# 5 represents the number of days to allow
if [lag_seconds] > (60 * 60 * 24 * 5) {
  drop { }
}

前5.x:

ruby {
  code => "event['lag_seconds'] = Time.now.to_f - event['@timestamp'].to_f)"
}

# 5 represents the number of days to allow
if [lag_seconds] > (60 * 60 * 24 * 5) {
  drop { }
}

使用这种方法,您将编制索引 lag_seconds,这是一个小数额,因此如果它进入 ES 或其他一些数据存储,您可以分析索引中的滞后。