Filebeat 和 Logstash 有时会读取旧文件

Filebeat and Logstash read old files sometimes

我有一个文件夹,其中包含 2016 年至今的日志文件,并使用 "ignore_older: 48h" 设置了 filebeat。所有文件都会轮换,因此 "log" 始终是新文件,"log.1" 是下一个,依此类推。 日志位于安装在 logstash 主机上的 linux NFS 分区上。

我希望 filebeat 只获取在过去 24 小时内发生更改的日志文件,而忽略较旧的文件。

上述情况会发生,但有时它也会以无特定顺序获取旧文件。

我对 2018 年的一个旧文件执行 运行 "stat" 命令,我看到以下内容:

Access: 2019-03-02 03:15:32.254460960 +0000
Modify: 2018-09-06 13:12:00.331460890 +0000
Change: 2019-02-28 03:34:33.946462475 +0000

我运行 filebeat 版本6.4.2

此数据是否混淆了 Logstash?检查文件是否已更改时,它实际上在看什么。我怎样才能阻止它获取旧文件。

更新:

我的 filebeat 配置如下所示:

- type: log
  enabled: true
  paths:
    - /path/to/my/log/file/log*
  fields:
    logname: "log.name"
  include_lines: ["SOME_TEXT"]
  ignore_older: 48h

日志为 CSV 格式。

在另一台主机上我也这样做但是直接使用 logstash,输入配置是这样的:

input {
  file {
    path => "/path/to/my/log/file/log*"
    mode => "tail"
    start_position => "beginning"
    close_older => "24h"
    ignore_older => "2w"
  }
}

我这里也有同样的问题。

你可以尝试做两件事,一是像这样在登录路径后去掉*

    - /path/to/my/log/file/log

因为 filebeat 将读取旋转的日志文件,即使它在移动到一定年龄之前也是如此。

或者对于 logstash,路径参数是一个数组,如果您知道文件轮换的频率,您可以创建要读取的文件列表:

    path => [ "path/to/my/log/file.log", "/path/to/my/log/file1.log", "path/to/my/log/file2.log"]