一、需要
应用logstash读取本地磁盘上的文件,并通过规范输入输入进去。
二、实现步骤
1、前置常识
1、读取本地磁盘文件?
能够通过 input file plugin 来实现。
2、如何保障文件的每一行只读取一次?
这个是通过 sincedb
来保障的。
2、编写pipeline文件
vim multi-input/multi-input.conf
# input { file { path => ["/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-input/redis.log"] start_position => "beginning" sincedb_path => "/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-input/sincedb.db" type => "redis" mode => "read" stat_interval => "1 second" discover_interval => 15 sincedb_write_interval => 15 add_field => { "custom_mode" => "tail" } } file { path => ["/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-input/springboot.log"] start_position => "end" sincedb_path => "/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-input/sincedb.db" mode => "tail" type => "springboot" }}# 过滤数据filter { }# 输入output { # 如果type的值是redis则应用 rubydebug 输入。 type的值是在 input阶段制订的。 if [type] == 'redis' { stdout { codec => rubydebug { } } } if [type] == 'springboot' { stdout { codec => line { charset => "UTF-8" } } }}
3、Input 中 file 插件的局部参数解释:
path
:指定了从那个中央读取文件,应用的是glob匹配语法。
["/var/log/*.log"] 示意匹配的是 /var/log 目录下所有的以 .log 结尾的文件。["/var/log/**/*.log"] 示意匹配的是 /var/log 目录下、以及它下方的子目录下所有的以 .log 结尾的文件。["/var/log/{redis,springboot}/*.log"] 示意匹配的是 /var/log 目录下方 redis或springboot目录下方所有的以 .log 结尾的文件。
exclue
: 示意须要排除的文件。start_position
:示意从那个中央开始读取文件- beginning 示意从文件结尾读取。
- end 示意从文件结尾读取。
sincedb_path
: sincedb数据库文件的地位,必须是一个文件,不可是目录。- sincedb 这个记录了以后读取文件的inode、读取到文件字节的position地位、读取的是那个文件、文件最初批改的时候戳。
sincedb_path => /dev/null
开发时为了每次都能从文件的结尾读取,设置成 /dev/null 可能会报如下谬误。Error: Permission denied - Permission denied
2. 解决方案:将 `sincedb_path`的门路设置成一个具体的文件。 3. 参考链接: [https://discuss.elastic.co/t/logstash-permission-access-denied-error-for-stack-org-jruby-rubyfile-javain-utime/178016](https://discuss.elastic.co/t/logstash-permission-access-denied-error-for-stack-org-jruby-rubyfile-javain-utime/178016)
stat_interval
: 定时监测文件是否有更新,单位是秒或者string_duration格局。discover_interval
: 每隔多少工夫监测是否有新的文件产生,单位是秒。mode
:读取文件的模式,为tail
或read
,默认是tail
。- 当是
read
时,默认读取完这个文件后会删除这个文件。
- 当是
sincedb_write_interval
: 多久将文件的position地位写入到sincedb文件中。4、启动logstash
## 5、测试# 三、参考链接1、[input file plugin 的应用](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-file.html)