1
paths:
 - /var/log/*.log

我使用它作为filebeat运送日志的路径。输出是弹性搜索。

output:
    elasticsearch:
        index: filebeat

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

4

2 回答 2

0

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

于 2016-09-30T12:01:38.513 回答
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}}"
  }
}

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

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

同样在output部分中,filebeat.yml您需要将输出指向pipeline而不是index.

于 2018-08-29T06:05:33.343 回答