【问题标题】:Elasticsearch monthly rolling indicesElasticsearch 月度滚动索引
【发布时间】:2015-09-10 00:55:23
【问题描述】:

我一直在使用 logstash 在 elasticsearch 中提供每日滚动索引,类似这样

   output {

        elasticsearch {

                ....
                index: myindex-%{+YYYY.MM.DD}
       }
   }

在查看http://logstash.net/docs/1.4.1/outputs/elasticsearch.html#index 之后,我发现我需要使用每月滚动索引

但我还是觉得迷茫,那答案是不是就这么简单,改用myindex-%{+YYYY.MM},每个月底都会滚动索引?

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

在 A 天,这是索引

   {_id: 123, message: "old message}

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

   {_id: 123, message: "updated message} 

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

谢谢

【问题讨论】:

  • 是的,就是这么简单。
  • 感谢 Jettro,我能够在索引 2 个事件之间更改系统日期时间进行测试,并且可以看到正在创建的 2 个索引。
  • 我很好奇……为什么“需要”使用月度索引?
  • @AlainCollins 长强短,每天都有具有相同_id 和其他更新属性的事件,如果是每日滚动索引,与使用月度索引相比,我需要更频繁的唯一性检查 - 我仍然需要检查,但只能查询不是当前月份的索引
  • @JamesJiang 不确定你的意思是不是对你不起作用。如果这就是您的意思,您可以发布进入日志存储和配置的消息。可能是时间戳不符合您的预期,或者可能是另一个问题。我无法在评论中发布代码,所以我将其发布在答案中。

标签: elasticsearch logstash


【解决方案1】:

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

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}"
  }
}

【讨论】:

  • 这很有意义 Jettro,我们使用 Kibana 作为前面,我们通常设置我们想要采用的时间戳字段,因此它可以使用生成的 logstash @timestamp 来索引,但在仪表板上我们可以使用 @索引配置中的 987654323@ 字段 - 您也可以对直方图和表格执行相同操作。不过按照你的建议做还是不错的。
  • 存在语法错误:index => "gridshore-logs-%{+YYYY.MM} => index => "gridshore-logs-%{+YYYY.MM}"
猜你喜欢
  • 2016-07-02
  • 1970-01-01
  • 2021-09-08
  • 2022-10-08
  • 2016-03-01
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多