代码之家  ›  专栏  ›  技术社区  ›  Giacomo1968

Logstash 6.4.1(及更高版本)使用读取模式的Logstash输入文件在macOS上未按预期/所需工作

  •  1
  • Giacomo1968  · 技术社区  · 6 年前

    直截了当。

    cat 将行记录到目标路径,以便Logstash唤醒并拾取这些新行,即使我指定了新的 read 模式。

    最后,这个设置不需要 sincedb 总是

    细节和发现。

    我使用的Logstash设置只是对Apache日志进行一些过滤以获取输入。我使用的输入配置如下:;请注意,为了隐私起见,文件路径稍微做了一些调整,但实际上正是我现在使用的,并且在过去一年左右一直在使用,没有任何问题:

    input {
    
      file {
        path => "/opt/logstash/coolapp/access_log*"
        exclude => "*.gz"
        start_position => "beginning"
        sincedb_path => "/dev/null"
        ignore_older => 0
        close_older => 3600
        stat_interval => 1
        discover_interval => 15
      }
    
    }
    

    /opt/logstash/coolapp/

    然后当我通过命令行启动Logstash时 -f coolapp-apache.conf

    logstash -f coolapp-apache.conf
    

    Logstash在本地启动,发出所有一堆启动状态消息,直到最后一条消息:

    [2018-09-24T12:40:09,458][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}
    

    对我来说,这表明它完全启动和运行,并检查我的数据采集输出显示,如果它是一个数据流涌入工作,但当使用Logstash 6.4.1我看不到任何数据流入。

    tail 模式。

    查看文件输入插件(v4.1.5)的最新更新文档 there is a new mode option 有一个 阅读 模式。知道默认模式是 在启动本地Logstash调试设置之后,我通过执行以下操作来测试设置。首先我复制了 access_log 具体如下:

    cp /opt/logstash/coolapp/access_log /opt/logstash/coolapp/access_log_BAK
    

    然后我把主要的 访问日志 :>

    :> /opt/logstash/coolapp/access_log
    

    最后我跑了 并将复制的文件数据附加到原始文件中,如下所示:

    cat /opt/logstash/coolapp/access_log_BAK > /opt/logstash/coolapp/access_log
    

    当我第二次这么做的时候,你瞧,数据开始像预期的那样流动了!我想新的文件输入插件主要是 tailing a file more than 阅读?不管怎样,这是有效的,但显然是恼人的。我不是这样发展的。我需要Logstash来读取文件并解析它们。

    文件输入插件无法使用 阅读 模式。

    所以我试着使用下面的设置来读取文件 based on what I saw in the official Logstash file input mode documentation

    input {
    
      file {
        path => "/opt/logstash/coolapp/access_log"
        mode => "read"
        file_completed_action => "log"
        file_completed_log_path => "/Users/jakegould/Desktop/access_log_foo"
      }
    
    }
    

    当然是这样 access_log_foo 只是为了验证测试的概念文件名,但当所有的说和做这一切 阅读 模式在macOS上完全不起作用。我甚至试过换衣服 path 我想是埃德吧?

    所以知道这些:

    总是 从文件的开头读取数据,不管它曾经在Logstash版本6.3.2和以前版本中毫不费力地做过什么?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Giacomo1968    6 年前

    好吧,我知道了。我现在使用Logstash 6.5,我的原始配置如下:

    input {
    
      file {
        path => "/opt/logstash/coolapp/access_log*"
        exclude => "*.gz"
        start_position => "beginning"
        sincedb_path => "/dev/null"
        ignore_older => 0
        close_older => 3600
        stat_interval => 1
        discover_interval => 15
      }
    
    }
    

    当我把它扔掉的时候 ignore_older 以及调整 close_older stat_interval 使用 string_duration 一切又如期开始。

    input {
    
      file {
        path => "/opt/logstash/coolapp/access_log*"
        exclude => "*.gz"
        start_position => "beginning"
        sincedb_path => "/dev/null"
        close_older => "1 hour"
        stat_interval => "1 second"
        discover_interval => 15
      }
    
    }
    

    我的假设是logstash6.3.2 忽略旧的 0 作为 false 从而禁用 忽略旧的 但在版本6.4和更高版本中,该值现在被解释为以秒为单位的实际时间值?我还没有深入研究源代码,但我所经历的一切都表明这就是问题所在。

    不管怎样,这个配置现在可以工作了,我在macosmojave(10.14.1)上运行logstash6.5,没有任何问题。