zoukankan      html  css  js  c++  java
  • 利用Logstash plugins做更多的事情

    1. 引言

    之前一篇文章《Logstash 介绍及linux下部署》,我们实现了logstash的安装以及简单的控制台标准输入输出测试,那么logstash能不能做更多的事情呢?答案是肯定的,logstash就是为了处理日志数据而生的。一个最直接的应用是,我们从事web开发,将应用放到apache中,apache会生成大量的访问日志,那么如何实现对大量访问日志的搜集、处理、分析呢?logstash里面各种优秀的插件可以帮我们做这些事情。

    2. logstash插件管理

    在logstash的目录下,通过命令:

    bin/logstash-plugin -h

    我们可以看到logstash plugin管理的命令帮助

    Usage:
        bin/logstash-plugin [OPTIONS] SUBCOMMAND [ARG] ...
    
    Parameters:
        SUBCOMMAND                    subcommand
        [ARG] ...                     subcommand arguments
    
    Subcommands:
        list                          List all installed Logstash plugins
        install                       Install a Logstash plugin
        remove                        Remove a Logstash plugin
        update                        Update a plugin
        pack                          Package currently installed plugins, Deprecated: Please use prepare-offline-pack instead
        unpack                        Unpack packaged plugins, Deprecated: Please use prepare-offline-pack instead
        generate                      Create the foundation for a new plugin
        uninstall                     Uninstall a plugin. Deprecated: Please use remove instead
        prepare-offline-pack          Create an archive of specified plugins to use for offline installation
    
    Options:
        -h, --help                    print help

    比较常用的有:

    bin/logstash-plugin list                    #查看已安装插件列表
    bin/logstash-plugin install plugin_name     #安装插件
    bin/logstash-plugin update plugin_name      #卸载插件
    bin/logstash-plugin uninstall plugin_name   #卸载插件
    

    我们通过list命令查看插件列表时候,无非下列三种类型的插件:

    logstash-codec-*    #编码解码插件
    logstash-filter-*   #数据处理插件
    logstash-input-*    #输入插件
    logstash-output-*   #输出插件
    

    这里需要完善上一篇文章的一个概念。Logstash 不只是一个input | filter | output 的数据流,而是一个 input | decode | filter | encode | output 的数据流!上面插件中的codec 就是用来 decode、encode 事件的。

    3. 利用logstash-filter-grok完成Apache访问日志处理

    logstash 给我们提供了很多插件,上一篇文章中也提到了Grok 目前是logstash最好的方式对非结构化日志数据解析成结构化和可查询化 ,那么我们今天就用Grok来处理apache的访问日志。

    为了说明该插件的作用,一切从简,我们只是从标准输入输入一条Apache的访问日志,然后通过grok插件处理,然后输出到控制台。

    3.1 新建配置文件apache.conf

    input {
        stdin {}
    }
    
    filter {
        grok {
            match => { "message" => "%{COMBINEDAPACHELOG}"}
        }
    }
    
    output {
        stdout{codec=>rubydebug}
    }
    

    3.2 启动logstash

    bin/logstash -f tomcat.conf

    3.3 测试数据

    测试数据为:

    83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-search.png HTTP/1.1" 200 203023 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"

    等待logstash启动完成后,我们输入测试数据到控制台中,看到logstash的输出如下:

    {
            "request" => "/presentations/logstash-monitorama-2013/images/kibana-search.png",
              "agent" => ""Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"",
               "auth" => "-",
              "ident" => "-",
               "verb" => "GET",
            "message" => "Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-search.png HTTP/1.1" 200 203023 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"",
           "referrer" => ""http://semicomplete.com/presentations/logstash-monitorama-2013/"",
         "@timestamp" => 2017-09-15T08:17:55.133Z,
           "response" => "200",
              "bytes" => "203023",
           "clientip" => "83.149.9.216",
           "@version" => "1",
               "host" => "yangyue",
        "httpversion" => "1.1",
          "timestamp" => "04/Jan/2015:05:13:42 +0000"
    }
    

    截图如下: 
    这里写图片描述

    从处理结果我们可以看到,referrer、时间、请求ip、相应状态码等都被切割出来了,这非常方便我们之后使用ElasticSearch进行搜索。当然,logstash还有很多其他优秀的插件,大家可以多试试。比如从kafka中接收输入,数据定向到ElasticSearch或kafka中等,这些插件可以帮助我们省去很多麻烦,我们后面再聊。

    我的网站 http://www.a-du.net
  • 相关阅读:
    [vue]vue路由篇vue-router
    [vue]spa单页开发及vue-router基础
    [css]table的拆分
    [sh]md5sum接变量,find排除,sh判断文件存在
    [vue]通过watch实现数据双向绑定
    [django]form不清空问题解决
    [vue]实现父子组件数据双向绑定
    springboot2.0 如何异步操作,@Async失效,无法进入异步
    kafka搭建笔记
    Springboot2.x+shiro+redis(Lettuce)整合填坑
  • 原文地址:https://www.cnblogs.com/a-du/p/8242123.html
Copyright © 2011-2022 走看看