一、需求

使用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. sincedb 这个记录了当前读取文件的inode、读取到文件字节的position位置、读取的是那个文件、文件最后修改的时候戳。

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

      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. 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、测试

三、参考链接

1、input file plugin 的使用

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

使用logstash的input file filter收集日志文件的更多相关文章

  1. 第八章·Logstash深入-通过TCP/UDP收集日志

    1.收集TCP/UDP日志 通过logstash的tcp/udp插件收集日志,通常用于在向elasticsearch日志补录丢失的部分日志,可以将丢失的日志通过一个TCP端口直接写入到elastics ...

  2. 如何用一张图片代替 'input:file' 上传本地文件??

    今天去面试,碰到了一道题,也许是因为紧张或者喝水喝多了,一时竟然没有转过弯来,回来之后一细想原来这么简单,哭笑不得,特此记录一下! 原题是这样的:  如何用一张图片代替 'input:file' 上传 ...

  3. ie8及其以下版本兼容性问题之input file隐藏上传文件

    文件上传时,默认的file标签很难看,而且每个浏览器下都有很大差距.因此我们基本都把真正的file标签给隐藏,然后创建一个标签来替代它.但是由于IE出于安全方面的考虑上传文件时必须点击file的浏览按 ...

  4. 将input file的选择的文件清空的两种解决方案

    <input type="file" id="fileupload" name="file" /> 上传文件时,选择了文件后想清 ...

  5. input file禁用手机本地文件选择,只允许拍照上传图片

    <input type="file" accept="image/*" capture="camera"> 会有个问题,上传的图 ...

  6. html input file accept 上传文件类型限制格式 MIME 类型列表

    例: <input type="file" accept="application/vnd.openxmlformats-officedocument.spread ...

  7. input file 上传 判断文件类型、路径是否为空

    <html> <body bgcolor="white"> <TABLE cellSpacing=0 cellPadding=0 width=&quo ...

  8. [转]将input file的选择的文件清空

    本文转自:http://hi.baidu.com/xiongshihu/item/125c79b47632e794194697f5 上传文件时,选择了文件后想清空文件路径的两种办法: JS代码 < ...

  9. input file限制上传文件类型

    http://www.cnblogs.com/haocool/p/3431181.html http://www.haorooms.com/post/input_file_leixing http:/ ...

随机推荐

  1. 图像处理之Canny边缘检测(一)

    一:历史 Canny边缘检测算法是1986年有John F. Canny开发出来一种基于图像梯度计算的边缘 检测算法,同时Canny本人对计算图像边缘提取学科的发展也是做出了很多的贡献.尽 管至今已经 ...

  2. hyperf从零开始构建微服务(二)——构建服务消费者

    阅读目录 构建服务消费者 安装json rpc依赖 安装JSON RPC客户端 server配置 编写业务代码 编写服务消费者类 consumer配置 配置 UserServiceInterface ...

  3. ldconfig与 /etc/ld.so.conf

    现在我们知道了动态与静态函数库,也知道了当前的Linux大多是将函数库做成动态函数库,下面来讨论增加函数库读取性能的方法.我们知道,内存的访问速度是硬盘的好几倍,所以,如果将常用的动态函数库加载到内存 ...

  4. vscode中tab键无法触发emmet

    在用户自定义处加上一个设置"emmet.triggerExpansionOnTab":true

  5. ecshop调用指定广告的方法

    在include/lib_goods.php文件下面新增:function getads($cat,$num){ $time = gmtime();$sql = "SELECT * FROM ...

  6. Groovy系列(5)- Groovy IO操作

    IO操作 Groovy为I/O操作提供了许多帮助方法,虽然你可以在Groovy中用标准Java代码来实现I/O操作,不过Groovy提供了大量的方便的方式来操作File.Stream.Reader等等 ...

  7. Docker系列(1) - Centos8.X安装Docker

    环境准备 需要会Linux的基础 Centos8.x 使用Xshell连接远程服务器 环境查看 #系统内核是4.18以上 [root@localhost ~]# uname -r 4.18.0-305 ...

  8. 学习laravel总结中...

    1,安装homestead :mac环境 https://learnku.com/docs/laravel-development-environment/5.5/development-enviro ...

  9. shell 脚本获取数组字符串长度

    #!/bin/sh source /etc/init.d/functions funOne() { array=(I am dfh kjlhfjksdf sdfj jdkfhaskl mjjoldfu ...

  10. linux 修改文件名称的三中方法

    一:rename "old.html" "oldd.HTML" *html参数.有什么.改为什么 ,目标文件: 二 : #!/bin/sh Dirname=&q ...