首页 > 解决方案 > 如果我没有定义 start_position,Logstash 不会解析日志

问题描述

下面是我的代码。当我尝试运行此管道时。管道正在启动但未解析日志。我已经删除了 (data/plugins/inputs/file) 的 .sincedb 文件。

input {
    file {
        path => ".../directory/*.log"
    }
}
filter {
    
}
output { 
    stdout{
        codec => rubydebug
    }
}

但如果我说,

start_position => "beginning"

这样可行。但每次都是从头开始,而不是从哪里开始。如果我输入以下代码并删除 .sincedb 文件。它仍然没有解析。

start_position => "end"

在第一种情况下,我没有定义 start_position 或定义 start_position =>“end”。等待“成功启动 Logstash API 端点 {:port=>9601}” 但是这两种情况我都删除了 .sincedb 文件。我怎样才能让logstash继续它离开的地方?谢谢回答

标签: logstash

解决方案


如文件输入插件文档中所述,仅在第一次读取文件时才考虑start_position 。

所以它应该工作。使用 start_position => "beginning" 它应该从第一次开始并从 .sincedb 文件中写入的最后一个位置继续。

此选项仅修改文件是新文件且以前未见过的“第一次接触”情况,即没有记录在 Logstash 读取的 sincedb 文件中的当前位置的文件。如果文件之前已经看过,则此选项无效,将使用 sincedb 文件中记录的位置。

确保 logstash 具有对数据目录的写入权限。也尝试减少 sincedb_write_interval。

最后,如文档中所述,sincedb 记录可能会过期。如果您尝试读取许多文件,最好使用 filebeat 读取日志并将它们传递给 logstash,而不是使用 logstash 的文件输入插件和 sincedb。

sincedb 记录现在可以过期,这意味着旧文件的读取位置在一段时间后将不会被记住。文件系统可能需要为新内容重用 inode。理想情况下,我们不会使用旧内容的读取位置,但是我们没有可靠的方法来检测是否发生了 inode 重用。这与在 sincedb 中跟踪大量文件的读取模式更相关。但请记住,如果记录已过期,则会再次读取以前看到的文件


推荐阅读