本篇内容介绍了“怎么用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 插件的部分参数解释:
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数据库文件的位置,必须是一个文件,不可是目录。Error: Permission denied - Permission denied Exception: Errno::EACCES Stack: org/jruby/RubyFile.java:1267:in `utime'
解决方案:将
sincedb_path
的路径设置成一个具体的文件。参考链接: https://discuss.elastic.co/t/logstash-permission-access-denied-error-for-stack-org-jruby-rubyfile-javain-utime/178016
sincedb 这个记录了当前读取文件的inode、读取到文件字节的position位置、读取的是那个文件、文件最后修改的时候戳。
sincedb_path => /dev/null
开发时为了每次都能从文件的开头读取,设置成 /dev/null 可能会报如下错误。stat_interval
: 定时监测文件是否有更新,单位是秒或者string_duration格式。discover_interval
: 每隔多少时间监测是否有新的文件产生,单位是秒。mode
:读取文件的模式,为tail
或read
,默认是tail
。当是
read
时,默认读取完这个文件后会删除这个文件。sincedb_write_interval
: 多久将文件的position位置写入到sincedb文件中。
4、启动logstash
bin/logstash -f logstash/pipeline.conf/multi-input/multi-input.conf
5、测试
三、参考链接
1、input file plugin 的使用
2、sincedb_path 设置成 /dev/null 可能报的一个错
“怎么用logstash的input file filter收集日志文件”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!
新闻名称:怎么用logstash的inputfilefilter收集日志文件
文章转载:http://scgulin.cn/article/iigihi.html