【问题标题】:Logstash S3 input plugin - filter based on time modifiedLogstash S3 输入插件 - 基于修改时间的过滤器
【发布时间】: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 代码来过滤“旧”对象并删除它们?

感谢任何帮助!

【问题讨论】:

    标签: date amazon-s3 filter logstash


    【解决方案1】:

    您说得对,logstash 中有 drop filter,您可以将它与 if 结合使用,以删除符合文档中此示例的条件的事件:

    filter {
      if [loglevel] == "debug" {
        drop { }
      }
    }
    

    除此之外,您还需要一种方法来检查事件的年龄。为此,您可以使用age filter。引用文档:

    此过滤器通过减去事件来计算事件的年龄 当前时间戳的时间戳。您可以将此插件与 删除过滤器插件以删除比某些更旧的 Logstash 事件 阈值。

    这个插件似乎直接与@timestamp 字段一起工作,所以你必须在你的字段周围做一些洗牌。

    祝你好运!

    【讨论】:

    • 谢谢菲利普,我发布了答案,但没有注意到你写的。您的方法是正确的,使用基于时间戳的年龄过滤器。感谢您的帮助
    【解决方案2】:

    所以,经过Logsatsh社区的调查和帮助,我设法处理了这个要求,如下所示

    1. 使用 mutate 插件将上次修改时间复制到时间戳

      变异{ 复制 => { "[@metadata][s3][last_modified]" => "@timestamp"} }

    2. 使用年龄插件根据更改的时间戳进行过滤

      年龄{} if [@metadata][age] > ${number in seconds} { 降低 {} }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多