Logstash:如何将文件名添加为字段?

Logstash:如何将文件名添加为字段?,logstash,Logstash,我正在使用Logstash+Elasticsearch+Kibana对Tomcat日志文件进行概述 对于每个日志条目,我需要知道它来自的文件名。我想将其添加为一个字段。有办法吗? 我在谷歌上搜索了一下,只找到了答案,但答案不再是最新的 到目前为止,我看到的唯一解决方案是使用不同的“添加字段”为每个可能的文件名指定单独的配置,如下所示: 但是,每次有新的文件名时,我都需要重新配置logstash。 有更好的主意吗?嗨,我添加了一个grok过滤器来实现这一点。我只想要文件名而不是路径,但是你可以根据

我正在使用Logstash+Elasticsearch+Kibana对Tomcat日志文件进行概述

对于每个日志条目,我需要知道它来自的文件名。我想将其添加为一个字段。有办法吗? 我在谷歌上搜索了一下,只找到了答案,但答案不再是最新的

到目前为止,我看到的唯一解决方案是使用不同的“添加字段”为每个可能的文件名指定单独的配置,如下所示:

但是,每次有新的文件名时,我都需要重新配置logstash。
有更好的主意吗?

嗨,我添加了一个grok过滤器来实现这一点。我只想要文件名而不是路径,但是你可以根据需要更改它

filter {
  grok {
    match => ["path","%{GREEDYDATA}/%{GREEDYDATA:filename}\.log"]
  }
}

如果要在一个事件中组合消息和文件名:

filter {
grok {
    match => { 
        message => "ERROR (?<function>[\S]*)"
        }
}
grok {
    match => { 
        path => "%{GREEDYDATA}/%{GREEDYDATA:filename}\.log"
        }
}}  

感谢您的回答:)这不会在日志文件内容中查找文件名吗?不,通常您会在message字段上使用grok,但我使用path字段,这是logstash自动添加的一个特殊字段。非常感谢:)您的解决方案有效-在“{GREEDYDATA:filename}”之前添加百分号之后。请更新您的答案,我将接受它作为解决方案。我只是不知道“路径”字段的存在。很好的一个,去掉了一个字符,修复了它。@JettroCoenradie:And
grok
将被添加到过滤器下,但是如果我们想在
文件中输入它自己呢?
filter {
grok {
    match => { 
        message => "ERROR (?<function>[\S]*)"
        }
}
grok {
    match => { 
        path => "%{GREEDYDATA}/%{GREEDYDATA:filename}\.log"
        }
}}  
"_index": "logstash-2016.08.03",
    "_type": "logs",
    "_id": "AVZRyEI49-A6kyBCq6Yt",
    "_score": 1,
    "_source": {
      "message": "27/07/16 12:16:18,321 ERROR blaaaaaaaaa.internal.com",
      "@version": "1",
      "@timestamp": "2016-08-03T19:01:33.083Z",
      "path": "/home/admin/mylog.log",
      "host": "my-virtual-machine",
      "function": "blaaaaaaaaa.internal.com",
      "filename": "mylog"
    }