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

Reasons & Consequences of putting a Date in Elastic Index Name

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

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

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


编辑: Kamal 提出了一个很好的观点,我没有提供关于我的集群和我的需求的任何信息。以下是我正在处理的内容:

What is your daily data creation/expected count

我不确定。我预计每天不会超过 1 GB 的数据,每天不会超过几个 100K 文档。由于这些是日志,我不希望文档创建后有任何更新。

Growth rate of the data in the future (1 year - 5 years)

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

How many teams are using the same cluster apart from yours if there is any

集群将仅由我的团队使用(实际上是查询)。我们现在大约有 5 个,但我没有看到超过 10 个用户(而且这不是并发的,仅仅超过一天或一个月)

Usage patterns, type of queries used etc.

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

Hardware details

我还没有与管理层解决这个问题。在大多数情况下,我希望有 3 个节点。这也不是关键,即如果我们由于某种原因丢失了所有日志,我不会为此失眠。

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

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

在你做出这样的决定之前你必须要问的一些问题

  • 你每天的数据是多少creation/expected count
  • 未来(1年-5年)数据的增长率
  • 有多少团队在使用与您不同的集群(如果有的话)
  • 使用模式、使用的查询类型等。
  • 硬件详细信息

优势

在某种程度上,拥有多个索引(以日期字段作为其索引名称)会更有益。

  • 您可以删除旧索引而不影响新索引。
  • 万一你必须改变映射,你可以用新的索引来做而不影响旧的。相对较少的开销,而对于单个索引,您必须重新索引所有文档,如果大小非常大,这将花费更多时间。如果这种情况时不时地发生,您将需要提出解决方案,您必须在使用最少的时候执行此类操作。这意味着,它会损害生产力。
  • 使用多个索引搜索仍然很方便。
  • 不太确定,但使用多个索引更容易扩展。

缺点是:

  • 为每个可能浪费一些存储空间的索引创建额外的分片 space。
  • monitoring/operations 团队维护多个索引的开销。
  • 有时会导致过度创建索引。
  • 没有映射变化和较少的文档插入(在100秒或几百秒内),最好使用单一索引。

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

Speaking of querying in Kibana, is there a way of simply working with the base index name without the date stamp i.e. setting it up so that I do not see or have to deal with the date named indexes?

是的。如果你有类似logs-0001、logs-0002这样的索引,你可以在查询的时候使用logs-*作为indexname。