logstash - 如果我没有定义 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继续它离开的地方?谢谢回答
解决方案
如文件输入插件文档中所述,仅在第一次读取文件时才考虑start_position 。
所以它应该工作。使用 start_position => "beginning" 它应该从第一次开始并从 .sincedb 文件中写入的最后一个位置继续。
此选项仅修改文件是新文件且以前未见过的“第一次接触”情况,即没有记录在 Logstash 读取的 sincedb 文件中的当前位置的文件。如果文件之前已经看过,则此选项无效,将使用 sincedb 文件中记录的位置。
确保 logstash 具有对数据目录的写入权限。也尝试减少 sincedb_write_interval。
最后,如文档中所述,sincedb 记录可能会过期。如果您尝试读取许多文件,最好使用 filebeat 读取日志并将它们传递给 logstash,而不是使用 logstash 的文件输入插件和 sincedb。
sincedb 记录现在可以过期,这意味着旧文件的读取位置在一段时间后将不会被记住。文件系统可能需要为新内容重用 inode。理想情况下,我们不会使用旧内容的读取位置,但是我们没有可靠的方法来检测是否发生了 inode 重用。这与在 sincedb 中跟踪大量文件的读取模式更相关。但请记住,如果记录已过期,则会再次读取以前看到的文件
推荐阅读
- android - 当第二个应用程序运行时,GPS 高度的波动停止
- ios - 在 Xcode 项目和 Swift 包之间共享包
- css - 我怎样才能让物品在包装前变大?
- powerbi - 用于 Power Bi DAX 的多个表和一个日历表
- javascript - 将模式中的jquery datepicker设置为事件开始和结束日期(FullCalendar)
- php - 如何使用 Kohana 添加管理页面?
- java - 如何在单个 X 窗口 (Java) 中动态更改哪个客户端处理事件?
- windows - Windows In Box / Hello Credential Provider api
- unit-testing - TypeError:无法读取 Vue Jest 测试中未定义的属性“getters”
- android - 使用 Visual Studio 2019 将 Android 密钥库转换为 pem 格式