【问题标题】:Logstash doesn't parse logs if i don't define start_position如果我没有定义 start_position,Logstash 不会解析日志
【发布时间】:2021-03-02 07:48:28
【问题描述】:

下面是我的代码。当我尝试运行此管道时。管道正在启动但未解析日志。我已删除 (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


    【解决方案1】:

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

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

    此选项仅修改文件被保存的“第一次联系”情况 新的和以前没见过的,即没有当前位置的文件 记录在 Logstash 读取的 sincedb 文件中。如果一个文件已经 以前见过,这个选项没有效果,位置记录 在 sincedb 文件中将被使用。

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

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

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

    【讨论】:

    • 你的答案是正确的。谢谢回答。如果您喜欢这个问题,请随时投票 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多