filebeat yaml使用索引中的当前文件名

时间:2016-09-28 10:09:31

标签: elasticsearch logstash filebeat

paths:
 - /var/log/*.log

我将此作为filebeat中用于发送日志的路径。 输出是elasticsearch。

output:
    elasticsearch:
        index: filebeat

日志已经格式化为JSON,我只想要索引来反映日志的来源。在我的场景中,任何人都可以将文件abcd.log放在logs文件夹中。我希望将这些日志发送到索引filebeat-abcd-19.05.2016或类似的东西。由于日志已预先格式化,我们不希望其间存在任何logstash。目前,它们采用filebeat-dd.mm.yyyy格式。基本上我想在两者之间包含文件名。没有logstash我该怎么做?

2 个答案:

答案 0 :(得分:0)

我对此用例的解决方案: filebeat(多个探矿者) - > logstash(多重过滤器) - > elasticsearch

答案 1 :(得分:0)

今天用Ingest Pipeline解决了这个问题。需要将处理器链接到类似的内容中:

{
  "grok": {
    "field": "_source.source",
    "patterns": [
      "/%{NOSLASH:index_name}.log"
    ],
    "pattern_definitions": {
      "NOSLASH": "[^/]+"
    }
  }
  }
},
{
  "date": {
    "field": "_source.@timestamp",
    "target_field": "index_date",
    "formats": [
      "yyyy-MM-dd'T'HH:mm:ss"
    ],
    "timezone": "your timezone if needed"
  }
},
{
  "gsub": {
    "field": "index_date",
    "pattern": "T.*",
    "replacement": ""
   }
},
{
  "set": {
    "field": "_index",
    "value": "filebeat-{{index_name}}-{{index_date}}"
  }
}

首先,从源路径中获取文件名,然后使用格式复制日期,然后使用gsub修剪日期中的时间,然后设置索引名称。

然后,您可以选择删除字段index_nameindex_date

还在output的{​​{1}}部分中,您需要将输出指向filebeat.yml而不是pipeline