Logstash:使用Filebeat时如何从路径获取字段?

问题描述

Filebeat配置的必要部分:

filebeat.inputs:
- type: log
  paths:
    - C:\Program Files\Filebeat\test_logs\*.txt

发送到logstash和elasticsearch之后,将显示以下字段:

"log": {
          "offset": 117,"file": {
                "path": "C:\\Program Files\\Filebeat\\test_logs\\20200804_0929_logui.txt"
  }

我想将文件名称/文件名作为单独的字段获取,但是不知道如何。

已经尝试过这样的事情:

grok {
    match => { 'path' => '(C:\\Program Files\\Filebeat\\test_logs\\)%{GREEDYDATA:filename}\.txt' }
}

不幸的是,这不起作用。

请帮我弄清楚。

解决方法

尝试使用dissect filter更加容易:

  filter {
    dissect {
      mapping => {
        "[log][file][path]" => "C:\\Program Files\\Filebeat\\test_logs\\%{[log][file][name]}.txt"
      }
    }
  }