【问题标题】:Elasticsearch / Logstash define time or date when importing old log filesElasticsearch / Logstash 在导入旧日志文件时定义时间或日期
【发布时间】:2017-09-07 04:34:02
【问题描述】:

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

json文件中没有日期信息。

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

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

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

【问题讨论】:

  • 显然,在使用文件输入插件时,会创建一个path 字段,其中包含正在读取的文件的路径,请参阅此问题:stackoverflow.com/questions/22916200/…。不过,您仍然需要从路径中提取日期并完成剩下的工作。

标签: elasticsearch logstash logstash-configuration


【解决方案1】:

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

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

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

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

第三步是用零件组装一个日期字段。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多