Logstash:如何读取按日期/时间创建的日志

时间:2015-08-21 19:55:23

标签: logstash logstash-file

我们的服务器根据日期将日志文件存储在目录下,时间作为文件名。 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,并且仍在编写,我将只有部分数据。

  • 第3次尝试:

定期创建指向最新文件的符号链接。我还没有尝试过这个,但我认为它应该可行,我需要弄清楚如何在linux中创建简单的调度程序。

  • 更新

我已尝试过第3次尝试,但我发现此方法存在一些缺点。

  1. 如果Logstash花费超过1分钟来处理文件,它将无法处理整个文件,因为符号链接指向下一个文件。
  2. 最后1或2个事件可能无法处理。

1 个答案:

答案 0 :(得分:1)

第一次尝试运行此配置时,logstash想要打开大量文件似乎是合理的。在这种情况下,请考虑增加流程可用的打开文件数。

一旦处理完文件,它就会检测到它没有被写入并且不保持文件打开。它会定期检查文件,以确保没有写入任何新内容。所以,一旦你赶上了,它应该更友好。

为了帮助赶上初始运行,请尝试将模式设置为更小的值,例如:

path => ["/2015.08.21/01.*"]

应该只匹配60个文件。

您可能还会重新考虑每分钟有一个文件的设计;没有更多信息,似乎过度。