将文件名传递给匹配插​​件

时间:2014-07-30 16:06:57

标签: elasticsearch fluentd

我正在设置一个流利/弹性搜索/ kibana堆栈,我想在文档中注册我获得该事件的文件名。

这是我的配置:

<source>
  type tail_ex
  path /tmp/data/access
  pos_file /tmp/data/log.pos
  format /^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[\
^\"]*)" "(?<agent>[^\"]*)")?/
  time_format %d/%b/%Y:%H:%M:%S %z
  tag front.nginx.access
  refresh_interval 1800
</source>

此刻,我明白了:

{
    _index: logstash-2014.07.21
    _type: nginx
    _id: 0Wct7JCkT3qu7G79-cH4uw
    _version: 1
    _score: 1
    _source: {
        host: X.X.X.X
        user: -
        method: GET
        path: /acl/yyy/2/service/1/sss?index=100&num=100
        code: 200
        size: 153750
        referer: -
        agent: -
        @timestamp: 2014-07-21T03:00:14+02:00
    }
}

我想有这个领域:

  

路径:/ tmp / data / access

在我的ES文档中

我会提供一些帮助

1 个答案:

答案 0 :(得分:0)

实际上,您需要使用tail_ex插件并使用文件名

重命名标记
<source>
  type tail_ex
  log_level fatal
  path /tmp/data/FILERS/cda_logs_sas1/*/*/logs/access*, /tmp/data/FILERS/cda_logs_sas1/*/*/logs/archives/access.*
  pos_file /tmp/data/log.pos
  format /^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?/ 
  time_format %d/%b/%Y:%H:%M:%S %z 
  tag front.nginx.access.*
</source>

然后使用record_reformer捕获标记并提取文件名并使用它创建一个新密钥(log_file $ {tag_suffix [3]})

<match front.nginx.access.**>
  type record_reformer
  log_level fatal
  enable_ruby false
  <record>
    log_file ${tag_suffix[3]}
  </record>
  tag filtered.front.nginx.access
</match>

然后查看结果

<match filtered.front.nginx.access>
    type stdout
</match>