input -- File

2017-07-18  本文已影响54人  扳掘de

Logstash使用一个名叫FileWatchRuby Gem库来监听文件变化。这个库支持 glob展开文件路径,而且会记录一个叫.sincedb的数据库文件来跟踪被监听的日志文件的当前读取位置。所以,不要担心logstash会漏过你的数据。

sincedb文件中记录了每个被监听的文件的inodemajor numberminor numberpos

配置示例:

input {
    file {
        type => "normallog"
        path => "/home/es/logs/trade.log*"
        discover_interval => 15
        start_position => "beginning"
        sincedb_path => "/home/es/logs/sincedb_trade.txt"
        sincedb_write_interval => 15
        codec => plain { charset => "UTF-8" }
    }    
}

具体配置项

可以用来指定FileWatch库的行为:

Note

  1. FileWatch只支持文件的绝对路径,而且不会自动递归目录。所以有需要的话,请用数组方式都写明具体哪些文件。
  2. LogStash::Inputs::File只是在进程运行的注册阶段初始化一个FileWatch对象。所以它不能支持类似fluentd那样的path => "/path/to/%{+yyyy/MM/dd/hh}.log"写法。为了达到相同目的,你只能写成path => "/path/to/*/*/*/*.log"FileWatch模块提供了一个稍微简
    单一点的写法: /path/to/**/*.log,用**来缩写表示递归全部子目录。
  3. start_position仅在该文件从未被监听过的时候起作用。如果sincedb文件中已经有这个文件的inode记录了,那么logstash依然会从记录过的pos开始读取数据。所以重复测试的时候每回需要删除 sincedb文件(官方博客上提供了另一个巧妙的思路:将sincedb_path定义为/dev/null,则每次重启自动从头开始读)。
上一篇下一篇

猜你喜欢

热点阅读