温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么用logstash的input file filter收集日志文件

发布时间:2021-06-26 09:18:13 来源:亿速云 阅读:407 作者:chen 栏目:编程语言

本篇内容介绍了“怎么用logstash的input file filter收集日志文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、需求

使用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 插件的部分参数解释:

  1. path:指定了从那个地方读取文件,使用的是glob匹配语法。

["/var/log/*.log"]  表示匹配的是 /var/log 目录下所有的以 .log 结尾的文件。

["/var/log/**/*.log"] 表示匹配的是 /var/log 目录下、以及它下方的子目录下所有的以 .log 结尾的文件。

["/var/log/{redis,springboot}/*.log"] 表示匹配的是 /var/log 目录下方 redis或springboot目录下方所有的以 .log 结尾的文件。
  1. exclue: 表示需要排除的文件。

  2. start_position:表示从那个地方开始读取文件

    1. beginning 表示从文件开头读取。

    2. end 表示从文件结尾读取。

  3. sincedb_path: sincedb数据库文件的位置,必须是一个文件,不可是目录。

    1. Error: Permission denied - Permission denied 
      Exception: Errno::EACCES Stack: org/jruby/RubyFile.java:1267:in `utime'


    2. 解决方案:将 sincedb_path的路径设置成一个具体的文件。

    3. 参考链接: https://discuss.elastic.co/t/logstash-permission-access-denied-error-for-stack-org-jruby-rubyfile-javain-utime/178016

    4. sincedb 这个记录了当前读取文件的inode、读取到文件字节的position位置、读取的是那个文件、文件最后修改的时候戳。

    5. 怎么用logstash的input file filter收集日志文件

    6. sincedb_path => /dev/null 开发时为了每次都能从文件的开头读取,设置成 /dev/null 可能会报如下错误。

  4. stat_interval: 定时监测文件是否有更新,单位是秒或者string_duration格式。

  5. discover_interval: 每隔多少时间监测是否有新的文件产生,单位是秒。

  6. mode:读取文件的模式,为tailread,默认是tail

    1. 当是read时,默认读取完这个文件后会删除这个文件。

  7. sincedb_write_interval: 多久将文件的position位置写入到sincedb文件中。

4、启动logstash

bin/logstash -f logstash/pipeline.conf/multi-input/multi-input.conf

5、测试

怎么用logstash的input file filter收集日志文件

三、参考链接

1、input file plugin 的使用

2、sincedb_path 设置成 /dev/null 可能报的一个错

“怎么用logstash的input file filter收集日志文件”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI