减少 elasticsearch 的索引大小

Reducing elasticsearch's index size

我目前有大量的日志文件正在被 Logstash 分析,因此在 Elasticsearch 中使用了大量的 space。 然而,很多这些数据对我来说是无用的,因为所有的东西都没有显示在 Kibana 中。

所以我想知道:有没有一种方法可以使索引大小保持最小并且只存储匹配的事件?

编辑: 可能我不清楚我想要实现什么。我有几个属于不同类别的日志(因为它们的用途不同,构建方式也不同)。我创建了几个与这些不同类型的日志相对应的过滤器配置文件。

目前,我所有日志中的所有数据都存储在 Elasticsearch 中。例如,假设我正在我的一个日志中查找文本 "cat",将存储包含 "cat" 的事件,但其他 10,000 行也会存储。我想避免这种情况,只将这 1 个事件存储在 Elasticsearch 的索引中。

您并没有真正提供太多信息,但据我所知,您有 2 个选择,您可以更新您的 logstash 过滤器,以便只将您感兴趣的数据发送到 elasticsearch。您可以通过让 conditional logic to "drop {}" certain events. Or you could mutate { remove_field } 删除某些事件中的各个字段来做到这一点。

你的另一个选择是 close/delete elasticsearch 数据库中的旧索引,这将减少占用堆的信息量 space,并且会立即生效,而我的第一个选择是只影响未来的日志。 close/delete 旧索引的最简单方法是使用 curator.

编辑:

根据你的进一步问题,我建议:

  • 在您的输入中,为所有输入添加一个标签,例如 "drop"
  • 作为每个 grok 的一部分,您可以在成功匹配时删除标签,因此当 grok 工作时,删除删除标签
  • 作为输出的一部分,在输出周围放置条件逻辑,以便您只 保存记录时不带 drop 标签,例如:

output { if "drop" not in [tags] { etc } }