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 服务器

3. Logstash8.1 工作原理

Logstash input输入 beats插件 和 syslog插件

Logstash input输入 jdbc插件

Logstash input输入 http插件