【问题标题】: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】:

    基于日期的索引模式对于尖峰负载很棘手。有两件事可以将其结合起来,无需人工干预即可顺利设置:

    1. 切换到rollover indices。然后,您可以定义要在现有索引达到 X GB 时创建新索引。这样您就不再关心每天的日志量,但您可以简单地保留与磁盘空间一样多的索引(并留下一些缓冲区/微调watermarks)。
    2. 为了自动化翻转、删除索引和可选地设置别名,我们有 Elastic Curator:

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

    【讨论】:

      【解决方案2】:

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

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

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

      此选项未内置在 Elasticsearch 中。最好的方法是使用 Watcher 或其他工具监控磁盘空间,如果磁盘使用量低于指定阈值,则让您的监控发送警报 + 触发清理旧日志的作业。

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

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

      【讨论】:

        猜你喜欢
        • 2015-06-06
        • 1970-01-01
        • 2017-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-01
        相关资源
        最近更新 更多