美文网首页
input -- File

input -- File

作者: 扳掘de | 来源:发表于2017-07-18 23:38 被阅读54次

    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库的行为:

    • type
      自定义类型为normallog,由用户任意填写。
    • codec
      设置读取文件的编码为GB2312,用户也可以设置为UTF-8等等
    • discover_interval
      logstash 每隔多久去检查一次被监听的path下是否有新文件。默认值是15秒。
    • exclude
      不想被监听的文件可以排除出去,这里跟path一样支持glob展开。
    • close_older
      一个已经监听中的文件,如果超过这个值的时间内没有更新内容,就关闭监听它的文件句柄。默认是3600秒,即一小时。
    • ignore_older
      在每次检查文件列表的时候,如果一个文件的最后修改时间超过这个值,就忽略这个文件。默认是86400秒,即一天。
    • sincedb_path
      设置记录源文件读取位置的文件,默认为文件所在位置的隐藏文件.sincedb
    • sincedb_write_interval
      logstash每隔多久写一次sincedb文件,默认是15秒。
    • stat_interval
      logstash 每隔多久检查一次被监听文件状态(是否有更新),默认是1秒。
    • start_position
      logstash从什么位置开始读取文件数据,默认是结束位置,也就是说logstash进程会以类似tail -F的形式运行。如果你要导入原有数据,可以把这个配置改成beginning,logstash进程就从头开始读取,有点类似cat,但是读到最后一行不会终止,而是继续变成tail -F

    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,则每次重启自动从头开始读)。

    相关文章

      网友评论

          本文标题:input -- File

          本文链接:https://www.haomeiwen.com/subject/gxrkkxtx.html