linux - Filebeat 和 Logstash 有时会读取旧文件

标签 linux logging logstash filebeat inode

我有一个文件夹,其中包含 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"]

关于linux - Filebeat 和 Logstash 有时会读取旧文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55026642/

相关文章:

linux - httpd 没有在进程列表中列出,尽管它运行没有任何问题

linux - cmake源码和源码外导航

logging - 将 Linux 内核日志缓冲区扩大到 2M 以上

java - log4j - 如何以编程方式从日志记录中排除某些类

amazon-web-services - 如何将 logstash 日志缓冲到 Elasticsearch

r - 无法通过CRAN安装opencpu

mysql - 按数据库记录 MySQL 查询

elasticsearch - 在 Elasticsearch 中使用GET API进行搜索查询

elasticsearch - 多行正则表达式不适用于filebeat,但可以在goplay测试器中使用

linux - Qt Creator 无法在 Linux 上设置断点