前面两节已经介绍了Logstash以及常见的配置语法,这一节介绍一下input、output的配置,然后做个file输入输出的demo。这里我介绍的都是比较常见的插件,其他插件用法类似。

1、input配置

1)读取文件(file)

Logstash 使用一个名叫 FileWatch 路径,而且会记录一个 叫 .sincedb 漏过你的数据。sincedb 文件中记录了每个被监听的文件的 inode, major number, minor number 和 pos。

配置示例:

1. input {  
2.     file {  
3. "/var/log/*.log", "/var/log/message"] ## 读取文件的路径,可以一次读取多个文件,也可以写多个file读取多个文件  
4. "blog_test" ## 添加type字段  
5. "beginning" ## 读取文件记录的开始位置
6.     }  
7. }



其他一些比较有用的配置项:


    1. ## logstash 每隔多久去检查一次被监听的 path 下是否有新文件。默认值是 15 秒。  
    2. discover_interval  
    3.   
    4. ## 不想被监听的文件可以排除出去,这里跟 path 一样支持 glob 展开。  
    5. exclude  
    6.   
    7. ## 一个已经监听中的文件,如果超过这个值的时间内没有更新内容,就关闭监听它的文件句柄。默认是 3600 秒,即一小时。  
    8. close_older  
    9.   
    10. ## 在每次检查文件列表的时候,如果一个文件的最后修改时间超过这个值,就忽略这个文件。默认是 86400 秒,即一天。  
    11. ignore_older  
    12.   
    13. ## 如果你不想用默认的 $HOME/.sincedb(Windows 平台上在 C:\Windows\System32\config\systemprofile\.sincedb),可以通过这个配置定义 sincedb 文件到其他位置  
    14. sincedb_path  
    15.   
    16. ## logstash 每隔多久写一次 sincedb 文件,默认是 15 秒。  
    17. sincedb_write_interval  
    18.   
    19. ## logstash 每隔多久检查一次被监听文件状态(是否有更新),默认是 1 秒。  
    20. stat_interval  
    21.   
    22. ## logstash 从什么位置开始读取文件数据,默认是结束位置,也就是说 logstash 进程会以类似 tail -F 的形式运行。如果你是要导入原有数据,把这个设定改成 "beginning",logstash 进程就从头开始读取,类似 less +F 的形式运行。  
    23. start_position



    2) 读取redius

    还记得上一节的流程图吗,logstash可以通过redis来扩展,简单说说,就是可以将一个Logstash的输出通过redis作为消息 队列,作为另一个Logstash的输入。


    配置示例:


    1. input {  
    2.     redis {  
    3. "192.168.1.1" ## 从哪个主机读取redis数据  
    4. "6380" ## 相应的端口,默认为6379,我习惯用6380  
    5. "json" ## 读取的数据格式  
    6. "list" ## 读取的数据类型  
    7. "logstash:redis" ## 相应监听的keys  
    8. "123qwe" #如果有安全认证,此项为密码  
    9. #redis数据库的编号  
    10. #启用线程数量  
    11.     }  
    12. }


    3)从终端输入 —— 一般用来测试


      1. input {  
      2.     stdin {  
      3. "field_key" => "field_value"} ## 添加若干字段  
      4. "plain" ## 输出格式  
      5. "add"] ## 添加tags  
      6. "std" ## 添加类型字段  
      7.     }  
      8. }


      2、output配置

      1)输出到Elasticsearch

      ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。一般通过logstash将日志格式化后,

      输出到elasticSearch保存

      配置示例:

      1. elasticsearch {  
      2. "index"  ## 建立索引的动作,似乎可以省略  
      3. "192.168.1.1:9200"  ## elasticSearch所在的主机地址,默认端口一般为9200  
      4. "husen_test" ## 索引的名称  
      5. "json" ## 输出的codec格式,codec插件在后面会提到  
      6. }
      2)保存到文件

      将logstash解析后的JSON格式的日志保存到文件里


      1. output {  
      2.     file {  
      3. "/home/husen/result.log.gz" ## 保存文件的路径  
      4. "%{message}" ## 可选项 保存的格式,默认输出所有字段,此处只输出message字段的内容  
      5. true ## 可选项 是否压缩  
      6.     }  
      7. }


      3)输出到终端 —— 一般用来测试


        1. output {  
        2.     stdout {  
        3. ## 输出格式,此处为调试格式,即JSON  
        4. ##线程数,默认为系统核数  
        5.     }  
        6. }



        3、stdin->(file 和 stdout) demo演示

        演示环境:centos7 + logstash 5.5.1


        配置文件如下:


          1. input {  
          2. # 从终端输入  
          3.     stdin{}  
          4. }  
          5.   
          6. output{  
          7. # JSON格式输出到终端  
          8.     stdout{  
          9.         codec => rubydebug  
          10.     }  
          11.   
          12. # 保存到文件  
          13.     file{  
          14. "/home/husen/logstash_result/test_result.log"]  
          15.     }  
          16. }




          步骤:


          a.  打开终端,进入 /home/husen目录下,将事先写好的配置文件上传到该目录

          b. 输入以下命令运行


          1. ./logstash-5.5.1/bin/logstash -f in_out_test.conf




          logstash 从kafka消费数据 logstash kafka input_插件


          c. 运行成功之后,直接输入 hello world 并回车,终端上以JSON格式输出解析后的内容



          logstash 从kafka消费数据 logstash kafka input_elk_02



          d. crtl+c 退出,进入到配置文件里的保存日志日志的目录,查看结果


            1. ls  
            2. cd logstash_result/  
            3. ls  
            4. cat test_result.log  
            5.   
            6. ## 结果为,第一次把hello world 输错了,又重输了1次,所以有两行记录.....  
            7. {"@timestamp":"2017-09-13T03:25:20.937Z","@version":"1","host":"localhost.localdomain","message":"hello wprld"}  
            8. {"@timestamp":"2017-09-13T03:25:31.417Z","@version":"1","host":"localhost.localdomain","message":"hello world"}





            logstash 从kafka消费数据 logstash kafka input_Logstash_03