一、需求

使用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. 了解mysql concat()函数

    concat(arg1,arg2,....):将形参对应字段的值组合成一个字符串 假设:现在有一张学生表(test_user) 将这三个字段组合成一个字符串作为第四个字段 select test_us ...

  2. FTP协议简介

    1. FTP协议概述 FTP协议的英文全称为File Transfer Protocol, 简称为FTP, 它是从一个主机向一个主机传输文件的协议. FTP协议中客户端和服务器进行文件交互的方式如下图 ...

  3. Ubuntu 引导修复

    Ubuntu 引导修复 前言 最近还在看 Docker 的教程,看到了"跨宿主机网络通信"的一节,于是想到去 Ubuntu 中 实践一番.结果发现 Ubuntu 进不去了.由于考虑 ...

  4. 物理机burp抓虚拟机包

    先设置网络连接为NAT模式. 这就相当于主机虚拟出一个网卡,虚拟机单独成为一个网段(相当于虚拟机为单独一台主机,物理机作为路由器网关使用),我将会在物理机,也就是这个"路由器"上设 ...

  5. scrum项目冲刺_day07总结

    摘要:今日完成任务. 1.短信服务正在进行 2.路线规划正在进行 总任务: 一.appUI页面(已完成) 二.首页功能: 1.图像识别功能(已完成) 2.语音识别功能(已完成) 3.垃圾搜索功能 4. ...

  6. mybatis一对多联表查询的两种常见方式

    1.嵌套结果查询(部分代码如下) sql语句接上: 注释:class表(c别名),student表teacher(t别名)teacher_id为class表的字段t_id为teacher表的字段,因为 ...

  7. Linux系列(13) - CentOs 8 配置静态IP

    step-1 vim etho的配置文件 [root#localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 step-2 新增修改以下 ...

  8. javascript 分时函数 分批次添加DOM节点 timeChunk

    创建1000个webqq的qq好友列表, 一个好友用一个节点来表示 * timeChunk var timeChunk = function(a, fn, sz, done) { var obj, t ...

  9. FormData上传文件 带进度条

    * jQuery ajax  FormData 上传文件 template $.ajax({ url: url, type: 'POST', data: new FormData(form), dat ...

  10. P2179-[NOI2012]骑行川藏【导数,二分】

    正题 题目链接:https://www.luogu.com.cn/problem/P2179 题目大意 给出\(E\)和\(n\)个\(s_i,k_i,u_i\)求一个序列\(v_i\)满足 \[\s ...