Logstash笔记(二) ----input插件

在"hello World" 示例中,我们已经见到并介绍了Logstash 的运行流程和配置的基础语法。 请记住一个原则:Logstash 配置一定要有一个 input 和一个 output。在演示过程中,如果没有写明 input,默认就会使用 "hello world" 里我们已经演示过的 input/stdin ,同理,没有写明的 output 就是 output/stdout

如果有什么问题的话,请查看该文档:http://udn.yyuap.com/doc/logstash-best-practice-cn/input/index.html。以下是input插件的具体解释:

(1),标准输入。type和tags是logstash事件中特殊的字段。 type 用来标记事件类型 —— 我们肯定是提前能知道这个事件属于什么类型的。而 tags 则是在数据处理过程中,由具体的插件来添加或者删除的

[[email protected] test]# vim stdin.conf 
input {
    stdin {
        add_field => {"key" => "value"}
        codec => "plain"
        tags => ["add"]
        type => "std-lqb"
    }
}
output {
     stdout {
                        codec => rubydebug
                }
}
[[email protected] logstash]# /usr/local/logstash/bin/logstash -f test/stdin.conf 
Settings: Default pipeline workers: 1
Logstash startup completed
hello world
{
       "message" => "hello world",
      "@version" => "1",
    "@timestamp" => "2017-05-24T08:11:45.852Z",
          "type" => "std-lqb",
           "key" => "value",
          "tags" => [
        [0] "add"
    ],
          "host" => "localhost.localdomain"
}
abclqb
{
       "message" => "abclqb",
      "@version" => "1",
    "@timestamp" => "2017-05-24T08:13:21.192Z",
          "type" => "std-lqb",
           "key" => "value",
          "tags" => [
        [0] "add"
    ],
          "host" => "localhost.localdomain"
}
#####对stdin进行修改,添加tags列
[[email protected] test]# vim stdin.conf 

input {
    stdin {
        add_field => {"key" => "value2222222222222222222222222222222222222222222
2"}
        codec => "plain"
        tags => ["add","xxyy","abc"]
        type => "std-lqb"
    }
}

output {
     stdout {
                        codec => rubydebug
                }
}
[[email protected] logstash]# /usr/local/logstash/bin/logstash -f test/stdin.conf 
Settings: Default pipeline workers: 1
Logstash startup completed
hello world
{
       "message" => "hello world",
      "@version" => "1",
    "@timestamp" => "2017-05-24T09:07:43.228Z",
          "type" => "std-lqb",
           "key" => "value22222222222222222222222222222222222222222222",
          "tags" => [
        [0] "add",
        [1] "xxyy",
        [2] "abc"
    ],
          "host" => "localhost.localdomain"
}

#########根据tags来进行判断:
[[email protected] test]# vim stdin_2.conf 

input {
  stdin {
  add_field =>{"key11"=>"value22"}
  codec=>"plain"
  tags=>["add","xxyy"]
  type=>"std"
 }
}

output {
if "tttt" in [tags]{
 stdout {
  codec=>rubydebug{}
   }
}
 else if "add" in [tags]{
 stdout {
  codec=>json
   }
}

}

[[email protected] logstash]# /usr/local/logstash/bin/logstash -f test/stdin_2.con
f 
Settings: Default pipeline workers: 1
Logstash startup completed
yyxxx
{"message":"yyxxx","@version":"1","@timestamp":"2017-05-24T09:32:25.840Z","type":"std","key11":"value22","tags":["add","xxyy"],"host":"localhost.localdomain"}
{"message":"","@version":"1","@timestamp":"2017-05-24T09:32:32.480Z","type":"std","key11":"value22","tags":["add","xxyy"],"host":"localhost.localdomain"}xxyy
{"message":"xxyy","@version":"1","@timestamp":"2017-05-24T09:32:42.249Z","type":"std","key11":"value22","tags":["add","xxyy"],"host":"localhost.localdomain"}

(2).读取文件。Logstash 使用一个名叫 FileWatch 的 Ruby Gem 库来监听文件变化。这个库支持 glob 展开文件路径,而且会记录一个叫 .sincedb 的数据库文件来跟踪被监听的日志文件的当前读取位置。所以,不要担心 logstash 会漏过你的数据.

[[email protected] test]# cat  log.conf
input {  
  file {  
   path =>"/usr/local/nginx/logs/access.log"
   type=>"system"  
  start_position =>"beginning"  
}  
}  
  
output {  
        stdout {  
                        codec => rubydebug  
                }   
}

[[email protected] logstash]# /usr/local/logstash/bin/logstash -f test/log.conf 
Settings: Default pipeline workers: 1
Logstash startup completed
{
       "message" => "192.168.181.231 - - [24/May/2017:15:04:29 +0800] \"GET / HTTP/1.1\" 502 537 \"-\" \"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\" \"-\"",
      "@version" => "1",
    "@timestamp" => "2017-05-24T09:39:16.600Z",
          "path" => "/usr/local/nginx/logs/access.log",
          "host" => "localhost.localdomain",
          "type" => "system"
}
{
       "message" => "192.168.181.231 - - [24/May/2017:15:04:32 +0800] \"GET / HTTP/1.1\" 502 537 \"-\" \"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\" \"-\"",
      "@version" => "1",
    "@timestamp" => "2017-05-24T09:39:16.614Z",
          "path" => "/usr/local/nginx/logs/access.log",
          "host" => "localhost.localdomain",
          "type" => "system"
}

解释:

有一些比较有用的配置项,可以用来指定 FileWatch 库的行为:

  • discover_interval

logstash 每隔多久去检查一次被监听的 path 下是否有新文件。默认值是 15 秒。

  • exclude

不想被监听的文件可以排除出去,这里跟 path 一样支持 glob 展开。

  • sincedb_path

如果你不想用默认的 $HOME/.sincedb(Windows 平台上在 C:\Windows\System32\config\systemprofile\.sincedb),可以通过这个配置定义 sincedb 文件到其他位置。

  • sincedb_write_interval

logstash 每隔多久写一次 sincedb 文件,默认是 15 秒。

  • stat_interval

logstash 每隔多久检查一次被监听文件状态(是否有更新),默认是 1 秒。

  • start_position

logstash 从什么位置开始读取文件数据,默认是结束位置,也就是说 logstash 进程会以类似 tail -F 的形式运行。如果你是要导入原有数据,把这个设定改成 "beginning",logstash 进程就从头开始读取,有点类似 cat,但是读到最后一行不会终止,而是继续变成 tail -F

注意

  1. 通常你要导入原有数据进 Elasticsearch 的话,你还需要 filter/date 插件来修改默认的"@timestamp" 字段值。稍后会学习这方面的知识。
  2. FileWatch 只支持文件的绝对路径,而且会不自动递归目录。所以有需要的话,请用数组方式都写明具体哪些文件。
  3. LogStash::Inputs::File 只是在进程运行的注册阶段初始化一个 FileWatch 对象。所以它不能支持类似 fluentd 那样的 path => "/path/to/%{+yyyy/MM/dd/hh}.log" 写法。达到相同目的,你只能写成 path => "/path/to/*/*/*/*.log"
  4. start_position 仅在该文件从未被监听过的时候起作用。如果 sincedb 文件中已经有这个文件的 inode 记录了,那么 logstash 依然会从记录过的 pos 开始读取数据。所以重复测试的时候每回需要删除 sincedb 文件。
  5. 因为 windows 平台上没有 inode 的概念,Logstash 某些版本在 windows 平台上监听文件不是很靠谱。windows 平台上,推荐考虑使用 nxlog 作为收集端

(3).TCP输入。未来你可能会用 Redis 服务器或者其他的消息队列系统来作为 logstash broker 的角色。不过 Logstash 其实也有自己的 TCP/UDP 插件,在临时任务的时候,也算能用,尤其是测试环境。

[[email protected] test]# cat tcp.conf 
input {  
 tcp {  
   port =>8888  
   mode=>"server"  
  ssl_enable =>false  
 }  
}  
  
output {  
        stdout {  
                        codec => rubydebug  
                }  
}
[[email protected] logstash]# /usr/local/logstash/bin/logstash -f test/tcp.conf 
Settings: Default pipeline workers: 1
Logstash startup completed
{
       "message" => "GET /jenkins/ HTTP/1.1\r",
      "@version" => "1",
    "@timestamp" => "2017-05-24T10:09:53.980Z",
          "host" => "192.168.181.231",
          "port" => 59426
}
{
       "message" => "Host: 192.168.180.9:8888\r",
      "@version" => "1",
    "@timestamp" => "2017-05-24T10:09:54.175Z",
          "host" => "192.168.181.231",
          "port" => 59426
}
{
       "message" => "Connection: keep-alive\r",
      "@version" => "1",
    "@timestamp" => "2017-05-24T10:09:54.180Z",
          "host" => "192.168.181.231",
          "port" => 59426
}

备注:先关闭8888端口的应用,再开启,会输出如下日志。

时间: 2024-10-10 11:05:39

Logstash笔记(二) ----input插件的相关文章

Logstash笔记(二)-----grok插件的正则表达式来解析日志

(一)简介: 丰富的过滤器插件的存在是 logstash 威力如此强大的重要因素.名为过滤器,其实提供的不单单是过滤的功能,它们扩展了进入过滤器的原始数据,进行复杂的逻辑处理,甚至可以无中生有的添加新的 logstash 事件到后续的流程中去! Grok 是 Logstash 最重要的插件.你可以在 grok 里预定义好命名正则表达式,在稍后(grok参数或者其他正则表达式里)引用它. 大多数Linux使用人员都有过用正则表达式来查询机器中相关文件或文件里内容的经历,在Grok里,我们也是使用正

Dynamic CRM 2013学习笔记(二)插件基本用法及调试

插件是可与 Microsoft Dynamics CRM 2013 和 Microsoft Dynamics CRM Online 集成的自定义业务逻辑(代码),用于修改或增加平台的标准行为.也可以将插件认为是针对 Microsoft Dynamics CRM 触发的事件的处理程序.您可以让插件订阅或注册已知事件集,以便在事件发生时运行您的代码.   一.基本用法 1. 要继承IPlugin,并实现Excute方法 ( 1- 3 行) 2. 从service provide 里获取执行上下文 (

《卓有成效的程序员》----读书笔记二

六大方面对比Launchy和TypeAndRun(TAR) 对于快速启动工具,很多人都有自己的偏好,多次听到朋友介绍Launchy的好,虽然自己一直在使用着TAR,还是克制不住对于好软件的渴求,下载Launchy进行试用.很多软件都是有一个试用期的,也许新的软件确实不错,但是你习惯了以前使用的那个软件.今天就比较客观的将Launchy和TAR进行一下对比,从界面.上手速度到功能.自定义,以及软件的稳定性.占用资源进行详细的比较. [界面美观]Launchy:毫无疑问这是它的强项.1.0正式版自带

2. 蛤蟆Python脚本学习笔记二基本命令畅玩

2. 蛤蟆Python脚本学习笔记二基本命令畅玩 本篇名言:"成功源于发现细节,没有细节就没有机遇,留心细节意味着创造机遇.一件司空见惯的小事或许就可能是打开机遇宝库的钥匙!" 下班回家,咱先来看下一些常用的基本命令. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/48092873 1.  数字和表达式 看下图1一就能说明很多问题: 加法,整除,浮点除,取模,幂乘方等.是不是很直接也很粗暴. 关于上限,蛤蟆不太清楚

JavaScript--基于对象的脚本语言学习笔记(二)

第二部分:DOM编程 1.文档象模型(DOM)提供了访问结构化文档的一种方式,很多语言自己的DOM解析器. DOM解析器就是完成结构化文档和DOM树之间的转换关系. DOM解析器解析结构化文档:将磁盘上的结构化文档转换成内存中的DOM树 从DOM树输出结构化文档:将内存中的DOM树转换成磁盘上的结构化文档 2.DOM模型扩展了HTML元素,为几乎所有的HTML元素都新增了innerHTML属性,该属性代表该元素的"内容",即返回的某个元素的开始标签.结束标签之间的字符串内容(不包含其它

webpy使用笔记(二) session/sessionid的使用

webpy使用笔记(二) session的使用 webpy使用系列之session的使用,虽然工作中使用的是django,但是自己并不喜欢那种大而全的东西~什么都给你准备好了,自己好像一个机器人一样赶着重复的基本工作,从在学校时候就养成了追究原理的习惯,从而有了这篇session的使用和说明. PS:其实有些总结的东西挺好的,想分享给大家看,而不是枯燥的代码,这东西说实话对其他人用处不大,但都被移除首页了~~ webpy中的session 下面为官方的例子,用session来存储页面访问的次数,

logstash学习2 - logstash中的redis插件

redis作为logstash中的官方broker,既有input插件,还有output插件. redis input插件 data_type属性: 有三种类型, list -> BLPOP --阻塞式列表弹出 channel -> SUBSCRIBE -- 指定订阅者 pattern_channel -> PSUBSCRIBE --多个订阅者,模糊匹配 input插件作为消息队列. 使用pattern_channel input { redis { data_type => &q

Android学习笔记二

17. 在ContentProvider中定义的getType()方法是定义URI的内容类型. 18. SQLiteDatabase类中的insert/delete/update/query方法其实也挺好用的,我在EquipmentProvider类中做了实现 19. Android专门有个单元测试项目(Android Test Project),在这个项目中,可以新建一个继承AndroidTestCase类的具体测试类来单元测试某个功能.我新建了一个AndroidTestProject项目,在

Ajax学习笔记(二)

二.prototype库详解 1.prototype库的使用 //导入下载好的prototype.js文件 <script type="text/javascript" src="prototype.js"></script> //在自己的js中直接使用Prototype对象 <script type="text/javascript"> document.writeln("Prototype库的版本