Logstash 忽略早于给定日期的传入日志存储条目

Logstash 忽略早于给定日期的传入日志存储条目,logstash,Logstash,我希望Logstash在处理输入条目时,能够简单地删除超过N天的条目 我想我会使用和,但我不知道如何连接它们。我知道的唯一进行日期级比较的方法是通过Ruby代码。您需要date过滤器来解析时间戳(这是它自己的问题) 将日期解析为字段后(例如,事件[“@timestamp”]),您可以使用它来确定是否要忽略它: 5.0: 5.x之前: ruby { code => "event.cancel if (Time.now.to_f - event['@timestamp'].to_f) &g

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


我想我会使用和,但我不知道如何连接它们。

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

将日期解析为字段后(例如,
事件[“@timestamp”]
),您可以使用它来确定是否要忽略它:

5.0:

5.x之前:

ruby {
  code => "event.cancel if (Time.now.to_f - event['@timestamp'].to_f) > (60 * 60 * 24 * 5)"
}
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 { }
}
在这种情况下,
5
N

另外,值得指出的是,这与Logstash运行的机器时间有关。如果它不准确,那么它将影响日期数学。类似地,如果源计算机的系统时钟错误,那么它也可能是一个问题

利用Alain的优点,除了基于它进行删除之外,您还可以使用此存储延迟时间

5.0:

5.x之前:

ruby {
  code => "event.cancel if (Time.now.to_f - event['@timestamp'].to_f) > (60 * 60 * 24 * 5)"
}
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或其他数据存储。

我建议您计算每个字段的滞后(在ruby中,类似于所示),然后在logstash中比较/删除它。这样,您仍然可以知道剩余文档的延迟,这非常有用。@AlainCollins我喜欢这个建议。添加了一个注释。我也喜欢计算滞后。我正在一些实时数据上尝试,一旦它运行,我将接受/评论。这很有效。我也喜欢@AlainCollins的“如果/放弃”版本。这是一个简单的方法,看看它是否工作。谢谢