0

我们的服务器根据日期将日志文件存储在目录下,文件名是时间。例如:

/2015.08.21/01.23
/2015.08.21/01.24
/2015.08.21/01.25

其中文件名遵循 [hours].[minutes] 约定。

如何配置 Logstash 从最新文件中读取(一般做法是什么)?

  • 第一次尝试:

我将路径设置为:

path => ["/2015.08.21/*"]

Logstash 打开了很多文件,直到 logsource (linux) 不允许它打开新文件。

  • 第二次尝试:

使用 rsync 复制所有文件,并将它们合并为单个文件。

但是,我在处理部分日志文件时遇到了问题,例如,如果当前日志文件是 11.12,并且仍在写入,我将只有部分数据。

  • 第三次尝试:

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

  • 更新

我已经尝试了第三次尝试,但我发现这种方法有一些缺点。

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

1 回答 1

1

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

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

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

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

应该只匹配 60 个文件。

您还可以重新考虑每分钟拥有一个文件的设计;没有更多信息,这似乎是多余的。

于 2015-08-22T18:15:37.207 回答