LOGSTASH文件同步

Logstash的文件同步,可以做到文件变更即触发同步数据到ES的机制,可以做到1秒触发1次。

可以监控文件的修改和目录下文件的新增。

input {
file {
  #监听文件的路径
  path => "E:/software/logstash-1.5.4/logstash-1.5.4/data/*"
    #path => ["E:/software/logstash-1.5.4/logstash-1.5.4/data/*","F:/test.txt"]
    #排除不想监听的文件
    exclude => "1.dat"
    
    #一个已经监听中的文件,如果超过这个值的时间内没有更新内容,就关闭监听它的文件句柄。默认是 3600 秒,即一小时
    close_older => 3600
    #在每次检查文件列表的时候,如果一个文件的最后修改时间超过这个值,就忽略这个文件。默认是 86400 秒,即一天
    ignore_older => 86400
    
    #添加自定义的字段
    add_field => {"test"=>"test"}
    #增加标签
    tags => "tag1"
    type => "index_a"
    
    #设置多长时间扫描目录,发现新文件
    discover_interval => 15
    #设置多长时间检测文件是否修改
    stat_interval => 1
    #监听文件的起始位置,默认是end
    start_position => beginning
    #监听文件读取信息记录的位置
    sincedb_path => "E:/software/logstash-1.5.4/logstash-1.5.4/test.txt"
    #设置多长时间会写入读取的位置信息
    sincedb_write_interval => 15
  }
}
filter {
if [type] == "index_a" {
  mutate {
    split => ["message",","]
      add_field => {"my_id" => "%{[message][0]}"}
      add_field => {"my_name" => "%{[message][1]}"}
      add_field => {"pkid" => "%{my_id}%{my_name}"}
      remove_field => ["message"]
    }
  }
}
output {
if [type] == "index_a" {
  ...
  }
}


其中值得注意的是:

1 path

是必须的选项,每一个file配置,都至少有一个path

2 exclude

是不想监听的文件,logstash会自动忽略该文件的监听。配置的规则与path类似,支持字符串或者数组,但是要求必须是绝对路径。

3 start_position

是监听的位置,默认是end,即一个文件如果没有记录它的读取信息,则从文件的末尾开始读取,也就是说,仅仅读取新添加的内容。对于一些更新的日志类型的监听,通常直接使用end就可以了;相反,beginning就会从一个文件的头开始读取。但是如果记录过文件的读取信息,这个配置也就失去作用了。

4 sincedb_path

这个选项配置了默认的读取文件信息记录在哪个文件中,默认是按照文件的inode等信息自动生成。其中记录了inode、主设备号、次设备号以及读取的位置。因此,如果一个文件仅仅是重命名,那么它的inode以及其他信息就不会改变,因此也不会重新读取文件的任何信息。类似的,如果复制了一个文件,就相当于创建了一个新的inode,如果监听的是一个目录,就会读取该文件的所有信息。

  • sincedb 文件中记录了每个被监听的文件的 inode, major number, minor number 和 pos。

  • 其中

  • inode为读取的audit.log或其它文件的inode值,inode为linux系统每个文件分配的一个记录值,每个文件的inode值都不同(硬连接文件除外),

  • major number:

  • minor number:

  • pos: 当前logstash读取到inode指定文件的位置(即读取的文件大小值:单位byte)


5 其他的关于扫描和检测的时间,按照默认的来就好了,如果频繁创建新的文件,想要快速监听,那么可以考虑缩短检测的时间。

6 add_field

就是增加一个字段

file {
     add_field => {"test"=>"test"}
        path => "D:/tools/logstash/path/to/groksample.log"
        start_position => beginning
    }

7 tags

用于增加一些标签,这个标签可能在后续的处理中起到标志的作用

8 delimiter

是事件分行的标志,如果配置成123,那么就会如下所示。这个选项,通常在多行事件中比较有用

9 discover_interval

这个值是一个倍数,需要跟stat_interval合用,最终是discover_interval*stat_interval,比如discover_interval=15,stat_interval=1,则最终是15*1=15s


LOGSTASH-FILE

LOGSTASH目录

{context}