目前我正在使用文件输入插件来浏览我的日志存档,但文件输入插件对我来说不是正确的解决方案,因为文件输入插件固有地期望该文件是事件流而不是静态文件。现在,这对我造成了很大的问题,因为我的日志存档有100,000个日志文件,而logstash打开了所有这些永远不会改变的文件的句柄。
我正面临以下问题
1)Logstash因SO中提到的问题而失败 2)使用那些许多打开的文件句柄,日志存档存储变得非常慢。
是否有人知道让logstash知道静态处理文件或者处理文件后不保留文件句柄的方法。
在logstash Jira bug中,我被告知要编写自己的插件以及其他一些对我没有帮助的建议。
答案 0 :(得分:5)
Logstash文件输入可以处理静态文件。您需要添加此配置
file {
path => "/your/logs/path"
start_position => "beginning"
}
添加start_position
后,logstash从头开始读取文件。有关详细信息,请参阅here。请记住
此选项仅修改文件是新的以前未见过的“第一次联系”情况。如果之前已经看过某个文件,则此选项无效。否则您已将
sincedb_path
设置为/dev/null
。
对于第一个问题,我在评论中回答。请尝试添加打开的最大文件。 对于我的建议,您可以尝试编写脚本将日志文件复制到logstash监视器路径并将其不断移出。您必须估计logstash处理日志文件的时间。
答案 1 :(得分:1)
注意这一点,同时打开-v
和--debug
以获取logstash
{:timestamp=>"2016-05-06T18:47:35.896000+0530",
:message=>"_discover_file: /datafiles/server.log:
**skipping because it was last modified more than 86400.0 seconds ago**",
:level=>:debug, :file=>"filewatch/watch.rb", :line=>"330",
:method=>"_discover_file"}
解决方案是触摸文件或更改ignore_older设置