将Elasticsearch数据保留限制在磁盘空间以下

时间:2018-12-31 23:04:19

标签: elasticsearch elastic-stack

场景:

  • 我们使用Elasticsearch&logstash对流量适中的系统进行应用程序日志记录
  • 该系统每天产生约200gb的日志
  • 我们使用4个实例分片;并希望保留大约三天的日志记录
  • 因此,我们实施了每天运行的“清理”系统,该系统会删除所有3天之前的数据。

到目前为止,一切都很好。但是,几天前,某些子系统产生了持续不断的数据日志峰值,导致在几个小时内填满了所有可用磁盘空间,这使群集变成红色。这也意味着,由于磁盘已满,整个群集已关闭,因此清理系统无法连接到ES。这是非常棘手的问题,因为它限制了我们对正在发生的事情的可见性,并阻止了我们首先了解导致此问题的原因。

在这里进行根本原因分析,弹出一些问题:

  • 当群集状态为红色时,如何查看例如Kibana中的系统?
  • 如果没有更多空间,我们如何告诉ES丢弃(最早的)日志,而不是转到status = red?
  • 我们可以通过什么方式确保不再发生这种情况?

2 个答案:

答案 0 :(得分:1)

基于日期的索引模式在棘手的负载下非常棘手。有两件事可以将其结合起来以实现平滑的设置,而无需人工干预:

  1. 切换到rollover indices。然后,您可以定义要在现有索引达到X GB后创建新索引。然后,您不必再担心每天的日志量,而只需保留磁盘空间就可以保留尽可能多的索引(并保留一些缓冲区/微调watermarks)。
  2. 为了自动进行滚动,删除索引以及可选地设置别名,我们提供了Elastic Curator:

PS:很快将有另一个解决方案,称为索引生命周期管理。它是直接内置在Elasticsearch中的,可以通过Kibana进行配置,但是此刻就在眼前。

答案 1 :(得分:0)

当集群状态为红色时,如何查看例如Kibana中的系统?

如果Kibana已经关闭,则无法连接到ES。最好轮询集群运行状况API以获取集群的当前状态。

如果没有更多空间,而不是status = red,我们如何告诉ES丢弃(最早的)日志?

Elasticsearch中没有内置此选项。最好的方法是使用Watcher或其他工具监视磁盘空间,并在磁盘使用率低于指定阈值时让监视发送警报+触发清理旧日志的作业。

我们可以通过什么方式确保这种情况不再发生?

监视群集节点的磁盘空间。