我们的服务器根据日期将日志文件存储在目录下,时间作为文件名。 e.g:
/2015.08.21/01.23
/2015.08.21/01.24
/2015.08.21/01.25
其中文件名遵循[小时]。[分钟]惯例。
如何配置Logstash以从最新文件中读取(通常的做法是什么)?
我将路径设置为:
path => ["/2015.08.21/*"]
Logstash打开了很多文件,直到logsource(linux)不允许它打开新文件。
使用rsync复制所有文件,并将它们合并为单个文件。
但是,我处理部分日志文件时遇到问题,例如,如果当前日志文件是11.12,并且仍在编写,我将只有部分数据。
定期创建指向最新文件的符号链接。我还没有尝试过这个,但我认为它应该可行,我需要弄清楚如何在linux中创建简单的调度程序。
我已尝试过第3次尝试,但我发现此方法存在一些缺点。
答案 0 :(得分:1)
第一次尝试运行此配置时,logstash想要打开大量文件似乎是合理的。在这种情况下,请考虑增加流程可用的打开文件数。
一旦处理完文件,它就会检测到它没有被写入并且不保持文件打开。它会定期检查文件,以确保没有写入任何新内容。所以,一旦你赶上了,它应该更友好。
为了帮助赶上初始运行,请尝试将模式设置为更小的值,例如:
path => ["/2015.08.21/01.*"]
应该只匹配60个文件。
您可能还会重新考虑每分钟有一个文件的设计;没有更多信息,似乎过度。