2

我是logstash的新手。我有一些日志存储在 AWS S3 中,我可以将它们导入到 logstash。我的问题是:是否可以使用 grok 过滤器根据文件名添加标签?我尝试使用:

grok { 
    match => {"path" => "%{GREEDYDATA}/%{GREEDYDATA:bitcoin}.err.log"}
    add_tag => ["bitcoin_err"]
    }

这是行不通的。我猜原因是“路径”仅适用于文件输入。

这是我的 S3 存储桶的结构:

my_buckets
    ----A
        ----2014-07-02
            ----a.log
            ----b.log
    ----B
        ----2014-07-02
            ----a.log
            ----b.log

我正在使用这个输入配置:

s3 {
    bucket => "my_buckets"
    region => "us-west-1"
    credentials => ["XXXXXX","XXXXXXX"]
    }

我想要的是,对于任何日志消息:

  • “A/2014-07-02/a.log”:它们将有标签 ["A","a"]。

  • “A/2014-07-02/b.log”:它们将有标签 ["A","b"]。

  • “B/2014-07-02/a.log”:它们会有标签 ["B","a"]。

  • “B/2014-07-02/b.log”:它们将有标签 ["B","b"]。

对不起我的英语......

4

3 回答 3

1

S3 输入中没有“路径”。我将 S3 存储安装在我的服务器上并使用文件输入。通过文件输入,我现在可以使用过滤器来匹配路径。

于 2014-07-07T18:41:51.100 回答
1

使用 Logstash 6.0.1,我能够从 S3 获取每个文件的密钥。在您的情况下,您可以在过滤器中使用此键(或路径)来添加标签。

例子:

input {
    s3 {
        bucket => "<bucket-name>"
        prefix => "<prefix>"
    }
}

filter {
    mutate {
        add_field => {
            "file" => "%{[@metadata][s3][key]}"
        }
    }
    ...
}

在过滤器中使用上面的文件字段来添加标签。

参考:

在这个问题中寻找eye8的答案

于 2017-12-14T15:09:35.960 回答
0

如果您想使用基于文件名的标签,我认为这会起作用(我还没有测试过):

filter {
  grok {
    match => [ "path", "%{GREEDYDATA:content}"]   
  }     
  mutate {
    add_tag => ["content"]
  }
}

“内容”标签将是文件名,现在由您来修改模式以使用文件名的特定部分创建不同的标签。

于 2014-07-04T08:36:58.597 回答