在Mac平台上安装配置ELK时的一些总结

1、前言

大数据处理是流行的一些表现,在不断壮大的数据处理中,怎么样处理数据才是咱们继续作好开发的正道。本文章来自网络,不敢原创,可是也有很大借鉴。
 

2、MAC安装ELK

 

首先是安装elasticsearch,这个很简单:php

brew install elasticsearch 

可是这里就遇到了问题,个人java是1.6的,而elasticsearch须要1.7如下版本,因此还须要安装java 1.7而要安装java 1.7,用简单的brew又不行,还须要先安装cask,因此最后的步骤就变成了这样:css

brew install brew-cask brew update brew cask install caskroom/versions/java7 java -version 

能够看到java版本已是1.7了。接下来:java

brew install elasticsearch elasticsearch --version 

证实elasticsearch已经安装好了。之后要启动或者中止elasticsearch服务就执行如下命令:nginx

brew services start elasticsearch brew services stop elasticsearch 

下面安装logstash:sql

brew install logstash logstash --version 

logstash已经安装好了。而后安装kibana,kibana的安装不用brew,直接下载解压以后,进到解压目录里:apache

./kibana

接下来是配置logstash,在这里我遇到了大麻烦。从头提及,先要创建一个logstash的conf文件,以便于后期调试:ruby

mkdir logstash cd logstash 

生成一个logstash.conf文件,在这里咱们准备处理apache的log网络

input {
    file {
        path => "/private/var/log/apache2/www.myserver.com-access_log" start_position => beginning ignore_older => 0 sincedb_path => "/dev/null" } } filter { grok { match => { "message" => "%{IPORHOST:clientip} - %{USER:auth} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-)"} } date { match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss +0800" ] } } output { elasticsearch {} stdout {} } 

为了这个配置文件,费了很大精力,网上不少教程都和个人实际状况不相符合。关键点说明以下:
start_position => beginning告诉logstash从个人log文件的头部开始往下找,不要从半中间开始。
ignore_older => 0告诉logstash不要管个人log有多古老,一概处理,不然logstash缺省会从今天开始,就无论老日志了。
sincedb_path => "/dev/null"这句话也很关键,特别是当你须要反复调试的时候,由于logstash会记住它上次处理到哪儿了,若是没有这句话的话,你再想处理同一个log文件就麻烦了,logstash会拒绝处理。如今有了这句话,就是强迫logstash忘记它上次处理的结果,从头再开始处理一遍。
filter下面的grok里面的match,网上教程通常是这么写的:app

match => { "message" => "%{COMBINEDAPACHELOG}" } 

可是当我这么写的时候,老是处理不了个人log,个人log其实就长这个样子:curl

127.0.0.1 - - [02/May/2016:22:11:28 +0800] "GET /assets/aa927304/css/font-awesome.min.css HTTP/1.1" 200 27466 

查源代码,官方是这么写的:

COMMONAPACHELOG %{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes}|-) COMBINEDAPACHELOG %{COMMONAPACHELOG} %{QS:referrer} %{QS:agent} 

后面的combined引用前面的common,而问题就出在这个USER:ident上。
我在https://grokdebug.herokuapp.com/反复验证,最后发现只要把这个USER:ident改为-就好了,因此就有了我上面的写法。
接下来用了一个date filter,这是由于若是不用这个date filter的话,它会把处理log的时间认为是用户访问网页的时间来产生表格,这样在kibana里看上去怪怪的,因此加这么一个filter,但就是加这么一个简单的filter,也出现了问题,处理失败,由于网上的教程里通常都是这么写的:

date {
    match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ] } 

区别就在最后一个Z上,个人时区字符串是+0800,怎么也匹配不上这个Z,索性一怒之下直接用+0800代替,也就过关了。
过程当中不停地访问以下网址验证elasticsearch的结果:
http://localhost:9200/logstas...
注意URL中那个时间,一开始的时候咱们就用处理日志的时间访问就能够,但当加上date filter后就不同了,若是你还用当前日期的话,会一无所获,改为log里的时间才会看到结果,由于index日期变了。
而后就是你须要一遍一遍地清空elasticsearch里的数据,进行调试:

curl -XDELETE 'http://localhost:9200/_all' 

清空完了之后你再执行logstash,就把新数据又灌进去了:

logstash agent -f ~/logstash/logstash.conf 

最后,经过kibana窗口观察你的结果:
http://localhost:5601
一开始是在setting页面,要你指定访问的index,这里就用缺省的logstash-*就好了,而后就是页面右上角有个时间限制,把它改为Year to date,不然有可能什么数据也看不到。

相关文章
相关标签/搜索