天天看點

CENTOS6.5安裝日志分析ELK elasticsearch + logstash + redis + kibana

1、日志平台的工作流程

<a href="http://s3.51cto.com/wyfs02/M01/71/5F/wKioL1XNWHGwPB_ZAAErAE7qZjQ757.jpg" target="_blank"></a>

多個獨立的agent(Shipper)負責收集不同來源的資料,一個中心agent(Indexer)負責彙總和分析資料,在中心agent前的Broker(使用redis實作)作為緩沖區,中心agent後的ElasticSearch用于存儲和搜尋資料,前端的Kibana提供豐富的圖表展示。

Shipper表示日志收集,使用LogStash收集各種來源的日志資料,可以是系統日志、檔案、redis、mq等等;

Broker作為遠端agent與中心agent之間的緩沖區,使用redis實作,一是可以提高系統的性能,二是可以提高系統的可靠性,當中心agent提取資料失敗時,資料儲存在redis中,而不至于丢失;

中心agent也是LogStash,從Broker中提取資料,可以執行相關的分析和處理(Filter);

ElasticSearch用于存儲最終的資料,并提供搜尋功能;

Kibana提供一個簡單、豐富的web界面,資料來自于ElasticSearch,支援各種查詢、統計和展示;

2、機器的部署情況

192.168.1.140 # redis 伺服器,角色broker

192.168.1.140 # logstash 角色 indexer 伺服器,內建elasticsearch, kibana,必須有安裝web服務

192.168.1.132  # nginx伺服器,角色生産伺服器,logstash需要收集它的日志  

這裡選用的軟體的版本:

logstash-1.4.2   

elasticsearch-1.4.2

redis-2.6.16

kibana 是logstash内帶的

這些軟體之間有相容性問題,請用其他代替版本的同學注意。

2.1 安裝logstash-1.4.2

yum -y install java-1.7.0-openjdk    安裝logstash需要jdk的支援

wget https://download.elasticsearch.org/logstash/logstash/logstash-1.4.2.tar.gz

tar xzvf logstash-1.4.2.tar.gz -C /app/ &amp;&amp; mv /app/logstash-1.4.2 /app/logstash

mkdir  -p /app/logstash/conf

注:如果yum出現這樣的問題:

<a href="http://s3.51cto.com/wyfs02/M02/71/66/wKiom1XNmPGimkTjAAEhdUP90ls708.jpg" target="_blank"></a>

需要按照epel

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

測試安裝

cd /app/logstash/bin

./logstash -e 'input { stdin { } } output { stdout {} }'

輸入“good job”, 如果出現類似下圖,說明logstash正常工作

<a href="http://s3.51cto.com/wyfs02/M00/71/60/wKioL1XNY4WistO7AABZM1ME6tM652.jpg" target="_blank"></a>

2.2 安裝 elasticsearch-1.4.2

wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.4.2.tar.gz

tar xzvf  elasticsearch-1.4.2.tar.gz -C /app/

cd /app/elasticsearch-1.4.2/config

修改配置檔案elasticsearch.yml

discovery.zen.ping.multicast.enabled: false  #關閉廣播,如果區域網路有機器開9300 端口,服務會啟動不了

network.host: 192.168.1.140                 #指定主機位址,其實是可選的,但是最好指定因為後面跟kibana內建的時候會報http連接配接出錯(直覺展現好像是監聽了:::9200 而不是0.0.0.0:9200)

http.cors.allow-origin: "/.*/"              

http.cors.enabled: true                      #這2項都是解決跟kibana內建的問題,錯誤展現是 你的 elasticsearch 版本過低

啟動elasticsearch

cd /app/elasticsearch-1.4.2/bin

./elasticsearch   # 配置階段建議直接啟動,日志會輸出到stdout,-d 選項表示以daemon的方式啟動,如果沒有出現error ,表示服務正常啟動

測試logstash 跟elasticsearch資料互動

/app/logstash/bin/logstash -e 'input { stdin { } } output { elasticsearch { host =&gt; 192.168.1.140 } }'

輸入you know

 curl 'http://192.168.1.140:9200/_search?pretty' # 如果有輸出且沒有出現錯誤表示伺服器互動成功

注:可能出現如下錯誤資訊,我也不知道什麼原因,我沒有管  不過不耽誤後面的搭建  有誰知道這個是怎麼回事  或者怎麼解決的請留言 謝謝!!

<a href="http://s3.51cto.com/wyfs02/M00/71/61/wKioL1XNisGzLrUOAAEiDE6asV0557.jpg" target="_blank"></a>

2.3  安裝kibana

cd /app/logstash/vendor

vim kibana/config.js   #elasticsearch: "http://"+window.location.hostname+":9200",修改成"http://192.168.1.140:9200"

cp -Rv  kibana  /var/www/html       拷貝網頁的配置

/etc/init.d/httpd start  /  service httpd start

能夠通路url http://192.168.1.140/kibana/index.html  看到這樣的畫面

<a href="http://s3.51cto.com/wyfs02/M01/71/65/wKiom1XNiaXw_7aZAAUjnHG_bKg098.jpg" target="_blank"></a>

2.4安裝redis

#tar xzvf redis-2.6.16.tar.gz -C /app

#cd /app/redis-2.6.16 &amp;&amp; mkdir conf

#make target=linux26 (報錯 可能缺少一些編譯的工具,按照提示,yum安裝就行了   

如果出現如下報錯:

<a href="http://s3.51cto.com/wyfs02/M02/71/65/wKiom1XNir-wXt5zAAD5kpEPQzM970.jpg" target="_blank"></a>

可以執行  make MALLOC=libc

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

         原因:檢視redis的源碼 src/zmalloc.c可以看到如下代碼:

       #if defined(USE_TCMALLOC)

#define malloc(size) tc_malloc(size)

#define calloc(count,size) tc_calloc(count,size)

#define realloc(ptr,size) tc_realloc(ptr,size)

#define free(ptr) tc_free(ptr)

#elif defined(USE_JEMALLOC)

#define malloc(size) je_malloc(size)

#define calloc(count,size) je_calloc(count,size)

#define realloc(ptr,size) je_realloc(ptr,size)

#define free(ptr) je_free(ptr)

可以看到源碼中首先會判斷系統中是否存在tcmalloc記憶體配置設定器,如果沒有,則使用jemalloc記憶體配置設定器,如果連jemalloc配置設定器也沒有找到,就會報錯了。

本次現網部署Redis後,因為沒有jemalloc配置設定器,導緻碎片率達到了1.59,redis的記憶體占用率也就是實際記憶體占用的1.59倍,這個資料量是非常恐怖的,對記憶體資源是個相當大的損耗。

在現網環境的linux系統中,可能沒有預先安裝Jemalloc配置設定器,需要手動安裝。

         1、wget http://www.canonware.com/download/jemalloc/jemalloc-3.2.0.tar.bz2

         2、tar jxf jemalloc-3.2.0.tar.bz2  (tar.bz2的壓縮格式使用 tar jxf 解壓)

         3、cd jemalloc-3.2.0

         4、./configure

         5、make &amp;&amp; make install

         6、ldconfig

過程完成後,在切回到redis-2.6.14目錄中,重新執行make指令

當然如果不想使用jemalloc配置設定器,可以強制使用如下指令來安裝redis:

         make MALLOC=libc  (libc是預設的記憶體配置設定器,不過經過驗證,碎片率是最高的)

經現網驗證:

1)  使用libc記憶體配置設定器的話,記憶體碎片率可以達到1.6左右

2)  但是使用jemalloc,碎片率一般在1.1以内

3)  對于tcmalloc,和jemalloc的結果差不多,但是因為redis暫時還沒有內建tcmalloc,是以需要另外來安裝,過程詳見:

<a href="http://blog.nosqlfan.com/html/3490.html" target="_blank">http://blog.nosqlfan.com/html/3490.html</a>

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#./src/redis-server redis.conf  # daemonize yes 使用預設的配置檔案

2.5 內建logstash  redis

vim /app/logstash/conf/nginx_acces.conf  寫入如下内容

input {

    redis {

        host =&gt; '192.168.1.140'  # 我友善測試沒有指定password,最好指定password

        data_type =&gt; 'list'

        port =&gt; "6379"

        key =&gt; 'logstash:redis' #自定義

        type =&gt; 'redis-input'   #自定義

    }

}

output {

    elasticsearch {

        host =&gt; "192.168.1.140"   # 由于redis和elasticsearch在一台機器上是以IP是一個

        codec =&gt; "json"

        protocol =&gt; "http"  #版本1.0+ 必須指定協定http

    }

驗證配置檔案

cd /app/logstash

#bin/logstash -f ./conf/nginx_access.conf -t  # 無誤後啟動

#bin/logstash -f ./conf/nginx_access.conf  --verbose # 要檢查錯誤 --debug

<a href="http://s3.51cto.com/wyfs02/M00/71/65/wKiom1XNjf6B3KS5AAPw4h7mTzs310.jpg" target="_blank"></a>

啟動成功  有警告沒有管

2.6  日志接入 另一台機器  安裝logstash 過程 跟上面一樣 但是  nginx_access.conf 配置如下

    file {

        type =&gt; "nginx_access"

        path =&gt; "/var/log/nginx/access.log"  日志的路徑

    }

    stdout { codec =&gt; rubydebug }

    redis {

        host =&gt; '192.168.1.140'              對接的redisIP

        data_type =&gt; 'list'

        key =&gt; 'logstash:redis'

到此配置告一段落,下面驗收成果

重新整理nginx日志

然後在132上的logstash能夠看到如下

<a href="http://s3.51cto.com/wyfs02/M00/71/62/wKioL1XNkrmQxXlcAAESfim6sK8002.jpg" target="_blank"></a>

然後在140端能夠看到:

<a href="http://s3.51cto.com/wyfs02/M02/71/62/wKioL1XNk4bxLPYhAAJ_CHFHCws783.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M02/71/62/wKioL1XNk_DzfOBVAAUMo7CPb94248.jpg" target="_blank"></a>

這個是一個簡單的格式 已經設計好的 當然可以自己定義了。

點進去以後的界面是這樣的:

<a href="http://s3.51cto.com/wyfs02/M02/71/62/wKioL1XNlOmTlnMVAAVLkn5PkRE466.jpg" target="_blank"></a>

3 安裝插件  安裝bigdesk

要想知道整個插件的清單,請通路http://www.elasticsearch.org/guide/reference/modules/plugins/ 插件還是很多的,個人認為比較值得關注的有以下幾個,其他的看你需求,比如你要導入資料當然就得關注river了。

先上一張效果圖:

<a href="http://s3.51cto.com/wyfs02/M02/71/66/wKiom1XNlJ3S54apAAQxjqyDg34123.jpg" target="_blank"></a>

上面的第二種  git clone的方式做的(第一種沒成功。。。)

首先確定安裝git

yum install -y git

然後将按照上面的指令做:

cd bigdesk/

git tag

   [... some tags left out for brevity ....]

   v2.2.2

   v2.2.3

   v2.4.0

git checkout v2.4.0

然後将整個bigdesk目錄拷貝到http下

cp -ar bigdesk /var/www/html/

然後就可以通路了

<a href="http://192.168.1.140/bigdesk" target="_blank">http://192.168.1.140/bigdesk</a>

<a href="http://s3.51cto.com/wyfs02/M01/71/66/wKiom1XNlgzAotbkAAGnBUf5Pl4825.jpg" target="_blank"></a>

先修改host  然後連接配接  然後會出來一個小圖示(成果展示圖裡的) 點選小圖示就能出現監控的選項了。

聲明:該文參考了如下幾位的部落格,但是是我親自搭建了整個過程,對整個的流程進行了新的把控和優化。

<a href="http://blog.chinaunix.net/xmlrpc.php?r=blog/article&amp;uid=17291169&amp;id=4898582" target="_blank">http://blog.chinaunix.net/xmlrpc.php?r=blog/article&amp;uid=17291169&amp;id=4898582</a>

<a href="http://www.mamicode.com/info-detail-475881.html" target="_blank">http://www.mamicode.com/info-detail-475881.html</a>

http://nkcoder.github.io/blog/20141031/elkr-log-platform-deploy/

本文轉自    憬薇   51CTO部落格,原文連結:http://blog.51cto.com/welcomeweb/1684696