在弹性索引名称中放置日期的原因和后果

时间:2018-11-16 17:40:44

标签: elasticsearch logstash kibana elastic-stack

我正在考虑通过FileBeat和Logstash将我的应用程序日志发送到Elastic (6.x)。如Configure the Logstash output中所述并在其他地方推荐,看来我需要在索引名称中添加日期。这样做的原因是,当需要删除旧数据时,按日期删除整个索引而不是单个文档要容易得多。这是真的?

如果我应该遵循将日期添加到索引名称的建议,我很好奇我还需要做些什么来确保无缝查询?我的意思是查询esp。例如在基巴纳在过去的一天中,需要查看今天的指数以及昨天的指数。

说到在Kibana中进行查询,有没有一种方法可以简单地使用没有日期戳的基本索引名称,即设置它以便我看不到或不必处理名为索引的日期?


编辑: Kamal 有一个很好的观点,就是我没有提供有关集群和需求的任何信息。以下是我正在使用的东西:

  

您每天的数据创建/预期数量是多少

我不确定。我希望每天不超过1 GB的数据,每天不超过20万个文档。由于这些是日志,因此我不希望在创建文档后对其进行任何更新。

  

未来(1年-5年)数据的增长率

目前,我看不到每天超过1 GB的增长率。

  

除了您的团队以外,还有多少团队在使用同一群集   任何

只有我的团队才能使用(实际查询)该群集。我们目前大约有5个用户,但我看不到超过10个用户(并且不是并发的,只是一天或一个月内)

  

使用模式,使用的查询类型等

我不确定,但是除了删除之外,肯定不会更新数据

  

硬件详细信息

我尚未与管理层达成共识。在大多数情况下,我希望有3个节点。同样,这也不是至关重要的,即,如果由于某种原因我们丢失了所有日志,我不会因此而失去睡眠。

2 个答案:

答案 0 :(得分:1)

在索引名称中包含日期是许多Elasticsearch用户实现的一种非常常见的用例。如您所述,它有助于归档/清除旧索引。您不需要执行任何其他操作即可查询。将索引基本名称设置为ex索引的索引模式。 logstash- *,您可以在Kibana中查询该特定索引模式。

答案 1 :(得分:1)

首先,您需要退后一步,了解您是否确实需要multiple indexsingle one,在使用特定日期的日期字段进行查询时,需要过滤文档)。

做出这样的决定之前,您必须要解决一些问题

  • 您每天的数据创建/预期数量是多少
  • 未来(1年-5年)数据的增长率
  • 如果有集群,除了您的集群之外,还有多少团队在使用同一集群
  • 使用模式,使用的查询类型等。
  • 硬件详细信息

优势

从某种意义上说,具有多个索引(以日期字段作为索引名称)会更有益。

  • 您可以删除旧索引而不影响新索引。
  • 如果必须更改映射,则可以使用新索引来执行,而不会影响旧索引。而对于单个索引而言,开销相对较小,因此您必须重新索引所有文档,如果尺寸很大,这将花费更多时间。而且如果这种情况不时发生,那么您将需要提出一个解决方案,在这种解决方案中,您必须在最少使用的情况下执行此类操作。这意味着它可能会损害生产率。
  • 使用多个索引进行搜索仍然很方便。
  • 不确定,但使用多个索引进行缩放更容易。

缺点是:

  • 为每个可能浪费一些存储空间的索引创建额外的碎片。
  • 由监视/运营团队维护多个索引的开销。
  • 有时会导致索引过度创建。
  • 没有映射更改,并且文档插入较少(100s或几百s),最好使用单个索引。

找出最佳方案的唯一方法和唯一正确方法是拥有一个与生产环境非常相似的集群,并且数据与生产环境过于相似,尝试各种配置并查看哪种解决方案最合适。

  

说到Kibana中的查询,有没有一种简单的方法可以与   没有日期戳的基本索引名称,即对其进行设置,以便   我看不到或不必处理名为索引的日期吗?

是的。如果索引的名称类似于logs-0001,logs-0002,则可以在查询时使用logs-*作为索引名。