【问题标题】:ELK logstash cant create index in ESELK logstash 无法在 ES 中创建索引
【发布时间】:2020-01-02 21:53:13
【问题描述】:

在遵循这个教程 (https://www.bmc.com/blogs/elasticsearch-logs-beats-logstash/) 之后,为了使用 logstash 分析一些日志文件,我的索引第一次创建得很好,然后我想用新的过滤器和新的存储库重新索引新文件,所以我通过“curl XDELETE”删除了索引,现在当我重新启动 logstash 和 filebeat 时,不再创建索引。启动组件时我没有看到任何错误。 我是否需要删除其他内容才能重新创建索引?

【问题讨论】:

  • 请尝试以下操作:当 Logstash 和 Filebeat 正在运行时,在您希望 filebeat 读取的文件中插入几行新行(似乎来自 /home/bitnami/logs/log/ *.log) 并告诉我索引是否已创建。
  • @apt-get_install_skill 感谢现在确实创建了索引:) 有没有办法根据旧日志重新创建索引?也许 curl api 调用不是重启索引的最佳解决方案
  • 嗨。自从我发布答案以来已经有一段时间了。如果对您有帮助,您会考虑接受我的回答吗?我真的很感激! :-)

标签: elasticsearch logstash filebeat


【解决方案1】:

好吧,因为我的猜测(见 cmets)是正确的,下面是解释:

为了避免 filebeat 一遍又一遍地读取和发布文件的行,它使用注册表来存储收割机的当前状态:

注册表文件存储了 Filebeat 用来跟踪上次读取位置的状态和位置信息。

正如您所说,filebeat 成功收集了文件,将行发送到 logstash,logstash 将事件发布到创建所需索引的 elasticsearch。由于 filebeat 更新了它的注册表,因此不必再收集任何行,因此即使您删除了索引,也不会再次将事件发布到 logstash。当您插入一些新行时,filebeat 会重新打开收割机并仅将新行(位于“注册表检查点”之后)发布到 logstash。

注册表文件的默认位置是${path.data}/registry(参见Filebeat's Directory Layout Overview)。

...也许 curl api 调用不是重启索引的最佳解决方案

这与删除索引无关。删除索引发生在 elasticsearch 内部。 Filebeat 不知道您在 elasticsearch 中的操作。

问:有没有办法根据旧日志重新创建索引?

是的,您应该考虑一些方法:

  • 您可以使用reindex API 将文档从一个索引复制到另一个索引。您可以在将文档重新编入新索引的同时更新文档。
  • 与重新索引相比,您可以使用update by query API 更新将保留在原始索引中的文档。
  • 最后你当然可以删除注册表文件。但是,这可能会导致数据丢失。但出于开发目的,我想这很好。

希望我能帮到你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    相关资源
    最近更新 更多