Elasticsearch月度滚动指数

Jam*_*ang 6 elasticsearch logstash

我一直在使用logstash来提供elasticsearch中的每日滚动索引,就像这样

   output {

        elasticsearch {

                ....
                index: myindex-%{+YYYY.MM.DD}
       }
   }
Run Code Online (Sandbox Code Playgroud)

现在看来我需要使用每月滚动指数,看看http://logstash.net/docs/1.4.1/outputs/elasticsearch.html#index

但是我仍然感到困惑,所以答案就像使用一样简单myindex-%{+YYYY.MM},索引将在每个月末滚动?

更新:以下是"相同"事件(具有相同_id字段)在两个不同日期编制索引的示例

在第A天,这是索引

   {_id: 123, message: "old message}
Run Code Online (Sandbox Code Playgroud)

在第二天B,这被编入索引

   {_id: 123, message: "updated message} 
Run Code Online (Sandbox Code Playgroud)

因此,如果第A天和第B天属于两个单独的索引,如果我的查询回顾所有这些索引,我将有2个事件.为了消除重复,在索引事件B时,我将进行额外的检查_id并删除先前存在的事件A然后对B进行索引.如果它是每日索引,随着时间的推移,我担心我的_id搜索查询将是更贵,每月可以改善.最后但并非最不重要的,如果从我的支票中找到的事件存在于当前索引(今天到本月),它将不会删除该事件,但让elasticsearch执行此update操作_id(基本上它也是删除/创建,只是我我的代码中不需要这样做)

谢谢

Jet*_*die 6

您提供的配置会发生什么,即事件的时间戳.如果您没有执行其他配置,则会记录日志存储收到事件的时间.但是,获取事件本身内的时间戳通常很有用.比使用这个时间戳.下面是我经常使用的一些示例代码.

filter {
  date {
      match => ["timestamp" , "dd/MMM/yyyy:HH:mm:ss Z"]
  }
}
output {
  elasticsearch {
    protocal => "transport"
    host => "localhost:9300"
    cluster => "mycluster"
    index => "gridshore-logs-%{+YYYY.MM}"
  }
}
Run Code Online (Sandbox Code Playgroud)