Logstash S3 输入插件 - 基于修改时间的过滤器
Posted
技术标签:
【中文标题】Logstash S3 输入插件 - 基于修改时间的过滤器【英文标题】:Logstash S3 input plugin - filter based on time modified 【发布时间】:2022-01-22 23:59:19 【问题描述】:我有一个配置为从 S3 读取对象的 Logstash 容器。 要求是过滤旧的对象,比方说应该丢弃 3 个月之前的对象。
我注意到我可以公开 s3 元数据,所以我在每个事件中都有以下元数据:
"@metadata" =>
"s3" =>
"etag" => "\"xxx"",
"content_length" => 33,
"metadata" => ,
"version_id" => "null",
"accept_ranges" => "bytes",
"last_modified" => 2021-12-21T13:30:28.000Z,
也许我可以使用过滤器/ruby 代码来过滤“旧”对象并删除它们?
感谢任何帮助!
【问题讨论】:
【参考方案1】:您说得对,logstash 中有 drop filter,您可以将它与 if
结合使用,以删除符合文档中此示例的条件的事件:
filter
if [loglevel] == "debug"
drop
除此之外,您还需要一种方法来检查事件的年龄。为此,您可以使用age filter。引用文档:
此过滤器通过减去事件来计算事件的年龄 当前时间戳的时间戳。您可以将此插件与 删除过滤器插件以删除比某些更旧的 Logstash 事件 阈值。
这个插件似乎直接与@timestamp
字段一起工作,所以你必须在你的字段周围做一些洗牌。
祝你好运!
【讨论】:
谢谢菲利普,我发布了答案,但没有注意到你写的。您的方法是正确的,使用基于时间戳的年龄过滤器。感谢您的帮助【参考方案2】:所以,经过Logsatsh社区的调查和帮助,我设法处理了这个要求,如下所示
使用 mutate 插件将上次修改时间复制到时间戳
变异 复制 => "[@metadata][s3][last_modified]" => "@timestamp"
使用年龄插件根据更改的时间戳进行过滤
年龄 if [@metadata][age] > $number in seconds 降低
【讨论】:
以上是关于Logstash S3 输入插件 - 基于修改时间的过滤器的主要内容,如果未能解决你的问题,请参考以下文章
ELK——Logstash 2.2 date 插件翻译+实践
Logstash + Syslog 输入插件 VS Logstash + 文件输入插件 + Syslog 服务器