按日期在 elasticsearch 中为每个日志文件创建一个新索引

Create a new index in elasticsearch for each log file by date

目前
我已经通过使用一个日志文件完成了上述任务,并将带有 logstash 的数据传递到 elasticsearch 中的一个索引:

yellow open logstash-2016.10.19 5 1 1000807 0 364.8mb 364.8mb

我真正想做的事

如果我有以下根据年月日命名的日志文件

MyLog-2016-10-16.log
MyLog-2016-10-17.log
MyLog-2016-10-18.log
MyLog-2016-11-05.log
MyLog-2016-11-02.log
MyLog-2016-11-03.log

我想告诉 logstash 按年、月和日读取并创建以下索引:

yellow open MyLog-2016-10-16.log
yellow open MyLog-2016-10-17.log
yellow open MyLog-2016-10-18.log
yellow open MyLog-2016-11-05.log
yellow open MyLog-2016-11-02.log
yellow open MyLog-2016-11-03.log

请问我需要如何做这件事?

谢谢你

也很简单:

 output {
   elasticsearch {
      hosts => ["localhost:9200"]
      index => "MyLog-%{+YYYY-MM-DD}.log"
   }
 }

如果文件中的行包含日期时间信息,您应该使用 date{} 过滤器根据该值设置 @timestamp。如果这样做,您可以使用@Renaud 提供的输出格式,"MyLog-%{+YYYY.MM.dd}".

如果这些行不包含日期时间信息,您可以使用输入的路径作为索引名称,例如“%{小路}”。仅获取路径的基本名称:

mutate {
    gsub => [ "path", ".*/", "" ]
}

输出部分中的此配置是否足以满足您的目的??

output {
    elasticsearch {
        embedded => false
        host => localhost
        port => 9200
        protocol => http
        cluster => 'elasticsearch'
        index => "syslog-%{+YYYY.MM.dd}"
    }
}