elasticsearch - ELK logstash 无法在 ES 中创建索引
问题描述
在遵循这个tuto(https://www.bmc.com/blogs/elasticsearch-logs-beats-logstash/)之后为了使用logstash分析一些日志文件,我的索引第一次创建得很好,然后我想要用新的过滤器和新的存储库重新索引新文件,所以我通过“curl XDELETE”删除了索引,现在当我重新启动logstash和filebeat时,不再创建索引。启动组件时我没有看到任何错误。我是否需要删除其他内容才能重新创建索引?
解决方案
好的,因为我的猜测(见评论)是正确的,这里是解释:
为了避免 filebeat 一遍又一遍地读取和发布文件的行,它使用注册表来存储收割机的当前状态:
注册表文件存储了 Filebeat 用来跟踪上次读取位置的状态和位置信息。
正如您所说,filebeat 成功收集了文件,将行发送到 logstash,logstash 将事件发布到创建所需索引的 elasticsearch。由于 filebeat 更新了它的注册表,因此不必再收集任何行,因此即使您删除了索引,也不会再次将事件发布到 logstash。当您插入一些新行时,filebeat 重新打开了harvester 并仅将新行(位于“注册表检查点”之后)发布到logstash。
注册表文件的默认位置是${path.data}/registry
(请参阅Filebeat 的目录布局概述)。
...也许 curl api 调用不是重新启动索引的最佳解决方案
这与删除索引无关。删除索引发生在 elasticsearch 内部。Filebeat 不知道您在 elasticsearch 中的操作。
问:有没有办法根据旧日志重新创建索引?
是的,您应该考虑一些方法:
- 您可以使用reindex API将文档从一个索引复制到另一个索引。您可以在将文档重新索引到新索引中的同时更新文档。
- 与 reindex 相比,您可以使用update by query API来更新将保留在原始索引中的文档。
- 最后,您当然可以删除注册表文件。但是,这可能会导致数据丢失。但出于开发目的,我想这很好。
希望我能帮助你。
推荐阅读
- python - 收缩数据框的连续两行,并将结果列值替换为连续行的平均值
- html - 创建单个元素而不是多个标签
- ios - 在 tableView 和 scrollView 之间连续滚动
- python - 使用 rcParams 更改 matplotlib 网格颜色
- google-apps-script - 对象不允许添加或更改属性 - 可安装的编辑触发器
- android - 一些参数被插入到 Firebase 实时数据库 Android Studio
- angular - 如果在 ngFor 中使用,如何获取 mat-checkbox 检查值
- node.js - 如何使用 parseInt() 函数将字符串转换为 bigint
- haskell - 在 Pipes 库中使用请求和响应进行双向通信
- python - 如何使用 ezdxf 查找镜像实体(如块/圆)的位置?