【问题标题】:Limiting Elasticsearch data retention below disk space将 Elasticsearch 数据保留限制在磁盘空间以下
【发布时间】:2019-01-02 11:28:56
【问题描述】:
场景:
- 我们使用 Elasticsearch 和 logstash 为中等高流量系统执行应用程序日志记录
- 该系统每天生成约 200GB 的日志
- 我们使用 4 个分片实例;并希望保留大约最近 3 天的日志
- 因此,我们实施了一个“清理”系统,每天运行,它会删除所有超过 3 天的数据
到目前为止一切顺利。然而,几天前,一些子系统产生了持续的数据日志峰值,导致在几个小时内填满了所有可用磁盘空间,从而使集群变红。这也意味着,清理系统无法连接到 ES,因为整个集群因磁盘已满而关闭。这是非常有问题的,因为它限制了我们对正在发生的事情的可见性 - 并且阻碍了我们首先看到导致这种情况的原因的能力。
在这里进行根本原因分析,弹出几个问题:
- 当集群状态为红色时,我们如何查看例如 Kibana 中的系统?
- 如果没有更多空间,我们如何告诉 ES 丢弃(最旧的优先)日志,而不是设置 status=red?
- 我们可以通过哪些方式确保不再发生这种情况?
【问题讨论】:
标签:
elasticsearch
elastic-stack
【解决方案1】:
基于日期的索引模式对于尖峰负载很棘手。有两件事可以将其结合起来,无需人工干预即可顺利设置:
- 切换到rollover indices。然后,您可以定义要在现有索引达到 X GB 时创建新索引。这样您就不再关心每天的日志量,但您可以简单地保留与磁盘空间一样多的索引(并留下一些缓冲区/微调watermarks)。
- 为了自动化翻转、删除索引和可选地设置别名,我们有 Elastic Curator:
PS:很快就会有另一个解决方案,称为索引生命周期管理。它直接内置在 Elasticsearch 中,可以通过 Kibana 进行配置,但目前只是指日可待。
【解决方案2】:
集群状态为红色时,我们如何查看例如 Kibana 中的系统?
如果 ES 已经关闭,Kibana 将无法连接到 ES。最好轮询集群健康 API 以获取集群的当前状态。
如果没有更多空间,我们如何告诉 ES 丢弃(最旧的优先)日志,而不是变为 status=red?
此选项未内置在 Elasticsearch 中。最好的方法是使用 Watcher 或其他工具监控磁盘空间,如果磁盘使用量低于指定阈值,则让您的监控发送警报 + 触发清理旧日志的作业。
我们可以通过什么方式确保不再发生这种情况?
监控集群节点的磁盘空间。