Elasticsearch / Logstash 在导入旧日志文件时定义时间或日期

Elasticsearch / Logstash define time or date when importing old log files

我有一些旧的日志文件(每天一个文件)。 日志-2017.09.01.json 日志-2017.09.02.json 等等

json 文件中没有日期信息。

默认情况下,索引的时间戳是索引的创建日期。

我正在尝试为这些日志文件中的每一个创建一个索引,并且我希望对应于每个日志文件的索引的时间戳与文件名定义的时间戳相同。 即,我想要一个时间戳为 2017.09.01 的索引 "log-2017.09.01" 和另一个时间戳为 2017.09.02

的索引 "log-2017.09.02"

有谁知道如何简单地做到这一点?

这里没有简单的,但是可以做到的。需要几个步骤。

第一步,从文件路径中获取日期。

filter {
  grok {
    match => { "path", "^log-%{DATA:date_partial}$" }
  }
}

第二步是从日志行中提取时间戳数据。我假设您知道该怎么做。

第三步是assemble一个日期字段分出部分。

filter {
  mutate {
    add_field => { "full_timestamp", "%{date_partial} %{date_hour}:%{date_minute}" }
  }
}

最后一步是在构建的字段上使用 date{} 过滤器。

filter {
  date {
    match => [ "full_timestamp", "yyyy.MM.dd HH:mm" ]
  }
}

这应该让您了解所需的技术。