利用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中等,这些插件可以帮助我们省去很多麻烦,我们后面再聊。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值