ELK - 当系统一个日志输出一个文件时,如何收集日志?

ELK - How to collect logs when the system outputs one file per log?

假设我有一个系统,不是在给定的日志文件上附加日志行,而是为每个 'log event' 输出单独的文件。这些文件具有通用名称模式,但包含时间戳和另一个可变参数。

./log/202104231115012_SYSTEM_FOO.out
./log/202104231116452_SYSTEM_BAR.out
./log/202104231117568_SYSTEM_BAZ.out
./log/202104231120711_SYSTEM_FOO.out

Filebeat 或 Logstash 中是否有任何标准功能或配置来收集这些日志,或者首先我需要另一个后台进程(即 bash 脚本)将所有这些文件连续附加到一个全局 .log 文件中?

您可以使用 file input in read 模式。请注意,默认操作是读取文件后删除文件,但您可以将其更改为仅记录已读取文件。

filebeat 也可以基于通配符模式进行读取。它比 logstash 更轻量,因此如果您不在管道中进行其他处理,您可能更喜欢它。

有两种选择:

使用 Logstash 也会在输出格式方面为您提供最灵活的解决方案,但正如 Badger 所说,它对资源的要求更高一些。