利用Logstash plugins做更多的事情

Posted 杜先武博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用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中等,这些插件可以帮助我们省去很多麻烦,我们后面再聊。

以上是关于利用Logstash plugins做更多的事情的主要内容,如果未能解决你的问题,请参考以下文章

Logstash之Logstash inputs(file和redis插件)Logstash outputs和Filter plugins

ELK 做日志分析(filebeat+logstash+elasticsearch)配置

利用爬虫技术做些很酷很有趣很有用的事情

logstash filter plugin

利用开源架构ELK构建分布式日志系统

Logstash:Jdbc static filter plugin 介绍