Logstash 日志文件输入插件

Logstash 日志文件输入插件,logstash,Logstash,目前,我正在使用文件输入插件查看我的日志归档,但文件输入插件不是适合我的解决方案,因为文件输入插件固有地期望文件是事件流,而不是静态文件。现在,这给我带来了很大的问题,因为我的日志存档有100000多个日志文件,而我的logstash在所有这些文件上打开了一个永远不会更改的句柄 我面临以下问题 1) 日志存储失败,出现了 2) 有了这些打开的文件处理,日志归档存储变得非常缓慢 有没有人知道如何让logstash知道静态地处理文件,或者一旦处理了文件,就不必保持文件句柄 在logstash,我被告

目前,我正在使用文件输入插件查看我的日志归档,但文件输入插件不是适合我的解决方案,因为文件输入插件固有地期望文件是事件流,而不是静态文件。现在,这给我带来了很大的问题,因为我的日志存档有100000多个日志文件,而我的logstash在所有这些文件上打开了一个永远不会更改的句柄

我面临以下问题

1) 日志存储失败,出现了
2) 有了这些打开的文件处理,日志归档存储变得非常缓慢

有没有人知道如何让logstash知道静态地处理文件,或者一旦处理了文件,就不必保持文件句柄


在logstash,我被告知写我自己的插件和一些其他的建议,这对我没有多大帮助

日志存储文件输入可以处理静态文件。您需要添加此配置

file {
     path => "/your/logs/path"
     start_position => "beginning"
}
添加
start\u位置后,logstash从头开始读取文件。有关更多信息,请参阅。请记住,此选项仅修改“首次接触”的情况,即文件是新的,以前从未见过。如果以前已看到文件,则此选项无效。否则,您已将
sincedb\u路径设置为
/dev/null

关于第一个问题,我在评论中有答案。请尝试添加打开的最大文件数。
根据我的建议,您可以尝试编写一个脚本,将日志文件复制到日志存储监视器路径,并不断将其移出。您必须估计logstash处理日志文件的时间

注意这一点,同时打开日志存储的
-v
-debug

{: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"}

解决方案是触摸文件或更改“忽略旧设置”

我非常确定logstash确实处理静态文件,我所说的静态文件是指,logstash不应该对它处理过一次的文件保持句柄。因为它有句柄,我不得不将Linux机器上的打开文件句柄限制提高50000。它正在恶化linux和存储的性能。我的问题更多的是——是否有必要让logstash知道,一旦文件被处理/解析并推送到ES,就忘了它。不要让文件句柄保持打开状态,不要期望它会更新。或者是否有任何自定义插件可以完成这项工作?没有。到目前为止,logstash无法满足您的需要。正如我在最后的回答中所说,您必须编写一个脚本,将文件从monitor目录移出。否则你必须修改文件插件代码,我不认为logstash真的能容纳所有的文件描述符。我观察到的是logstash只是不断地打开和关闭它们。至少在版本1.4.2中,我确信我看到logatash打开了数千个文件句柄。现在,可能是logstash让它们打开了一段时间,但考虑到我拥有的文件数量,它试图一次打开所有文件,并达到了操作系统的最大文件描述符限制。我的最大文件描述符限制是5000。我使用logstash监视文件夹中的所有15000个文件。它没有问题,至少在1.4.2中是这样。我还使用了
lsof
来查看logstash打开了多少文件,它只是显示了一些logstash文件。我还使用strace进行监控,我可以看到logstash快速打开和关闭文件。我不知道logstash实现中真正的内容是什么。我也希望我所观察到的是真实的。也许你可以试着将max open file descriptor limit设置为一个高值,然后运行。我看到logstash 1.4.2在ubuntu上打开了大约35k个文件句柄。因为我的案例是日志存档,我必须保存所有日志,所以我写了一个快速插件来处理这个案例,它复制文件,读取它,然后删除原始文件的副本。它解决了我的问题