说道分析日志,咱们知道的采集方式有2种:html
第一种方式是不怎么推荐使用的,除非是在日志量比较小的场景才推荐使用。由于grok很是影响性能的,且不够灵活,除非你很懂ruby。
第二种方式是 咱们一直推荐使用的架构,讲究松耦合关系。node
下面咱们仍是说说第一种方式,而后再说第二种方式。python
grok模块是做用在filter里面的,它是个能够分析任意文本内容和重构内容的模块。它是当前最好的模块在logstash上处理糟糕,乱序的日志数据,能够把这些数据分析成有序,可查询的。而且,它能够很好的处理syslog,apache 和其余的webserver,mysql logs等日志。一般来讲,对于咱们使用者(不是计算机,是人类)来讲,任何日志格式均可以被写入的。
因此这里咱们让grok结合apache的日志作分析。mysql
咱们打开apache的日志配置选项,能够看到linux
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
参数解释:web
更多资料,能够参考:http://www.jinbuguo.com/apache/menu22/logs.htmlredis
下面看看grok的使用,能够参考官网地址:https://www.elastic.co/guide/en/logstash/2.3/plugins-filters-grok.html#plugins-filters-grok
logstash的一些核心模块在这里面:/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.5/patterns
咱们参考官网的例子来作下:
首先配置logstash。sql
[root@linux-node1 conf.d]# cat apache.conf input { stdin { } } filter { grok { match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" } # 这些IP,WORD等等都是logstash内部设定好的匹配。 } } output{ stdout { codec => rubydebug } }
确认无误后启动,输入一列信息:apache
[root@linux-node1 conf.d]# /opt/logstash/bin/logstash -f apache.conf Settings: Default pipeline workers: 2 Pipeline main started 55.3.244.1 GET /index.html 15824 0.043 { "message" => "55.3.244.1 GET /index.html 15824 0.043", "@version" => "1", "@timestamp" => "2016-12-11T04:36:26.387Z", "host" => "linux-node1", "client" => "55.3.244.1", "method" => "GET", "request" => "/index.html", "bytes" => "15824", "duration" => "0.043" }
上面可得,logstash是正常工做的,filter里面可以识别对应的信息。下面就开始真正分析apache的日志。vim
咱们使用logstash自带的apache日志分析模块来使用,模块位于这下面:
[root@linux-node1 conf.d]# vim /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.5/patterns/grok-patterns '''''' 93 COMMONAPACHELOG %{IPORHOST:clientip} %{HTTPDUSER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpvers ion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes}|-) # 第93行 94 COMBINEDAPACHELOG %{COMMONAPACHELOG} %{QS:referrer} %{QS:agent} # 第94行 ''''''
这个文件里有不少模块可使用,能够根据本身的需求来调用。
根据上面提供的模块,咱们能够直接配置在logstash里面,以下所示:
[root@linux-node1 conf.d]# cat /etc/logstash/conf.d/apache.conf input { file { path => "/var/log/httpd/access_log" start_position => "beginning" } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}"} # 调用刚才找到的模块 } } output{ stdout { codec => rubydebug } }
确认配置没有问题,那么就启动logstash
[root@linux-node1 conf.d]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/apache.conf
此时咱们能够在head上看到apache的日志索引了。。。而后老套路,在kibana里面建立索引就可了。