說道分析日誌,咱們知道的採集方式有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裏面建立索引就可了。