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


一、日誌平臺的工做流程
php

wKioL1XNWHGwPB_ZAAErAE7qZjQ757.jpg

  • 多個獨立的agent(Shipper)負責收集不一樣來源的數據,一箇中心agent(Indexer)負責彙總和分析數據,在中心agent前的Broker(使用redis實現)做爲緩衝區,中心agent後的ElasticSearch用於存儲和搜索數據,前端的Kibana提供豐富的圖表展現。html

  • Shipper表示日誌收集,使用LogStash收集各類來源的日誌數據,能夠是系統日誌、文件、redis、mq等等;前端

  • Broker做爲遠程agent與中心agent之間的緩衝區,使用redis實現,一是能夠提升系統的性能,二是能夠提升系統的可靠性,當中心agent提取數據失敗時,數據保存在redis中,而不至於丟失;java

  • 中心agent也是LogStash,從Broker中提取數據,能夠執行相關的分析和處理(Filter);linux

  • ElasticSearch用於存儲最終的數據,並提供搜索功能;nginx

  • Kibana提供一個簡單、豐富的web界面,數據來自於ElasticSearch,支持各類查詢、統計和展現;git



二、機器的部署狀況github

192.168.1.140 # redis 服務器,角色broker
192.168.1.140 # logstash 角色 indexer 服務器,集成elasticsearch, kibana,必須有安裝web服務
192.168.1.132  # nginx服務器,角色生產服務器,logstash須要收集它的日誌  web


這裏選用的軟件的版本:redis

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/ && mv /app/logstash-1.4.2 /app/logstash

mkdir  -p /app/logstash/conf


注:若是yum出現這樣的問題:

wKiom1XNmPGimkTjAAEhdUP90ls708.jpg

須要按照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 -'input { stdin { } } output { stdout {} }'

輸入「good job」, 若是出現相似下圖,說明logstash正常工做


wKioL1XNY4WistO7AABZM1ME6tM652.jpg

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 => 192.168.1.140 } }'

輸入you know

 curl 'http://192.168.1.140:9200/_search?pretty' # 若是有輸出且沒有出現錯誤表示服務器交互成功


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

wKioL1XNisGzLrUOAAEiDE6asV0557.jpg

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  看到這樣的畫面


wKiom1XNiaXw_7aZAAUjnHG_bKg098.jpg

2.4安裝redis

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

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

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

 

若是出現以下報錯:

wKiom1XNir-wXt5zAAD5kpEPQzM970.jpg

能夠執行  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分配器,須要手動安裝。

 

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

 

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

 

         三、cd jemalloc-3.2.0

 

         四、./configure

 

         五、make && make install

 

         六、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,因此須要另外來安裝,過程詳見:

http://blog.nosqlfan.com/html/3490.html



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


#./src/redis-server redis.conf  # daemonize yes 使用默認的配置文件


2.5 集成logstash  redis

vim /app/logstash/conf/nginx_acces.conf  寫入以下內容

input {
    redis {
        host => '192.168.1.140'  # 我方便測試沒有指定password,最好指定password
        data_type => 'list'
        port => "6379"
        key => 'logstash:redis' #自定義
        type => 'redis-input'   #自定義
    }
}
output {
    elasticsearch {
        host => "192.168.1.140"   # 因爲redis和elasticsearch在一臺機器上因此IP是一個

        codec => "json"
        protocol => "http"  #版本1.0+ 必須指定協議http
    }
}


驗證配置文件

cd /app/logstash

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

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

wKiom1XNjf6B3KS5AAPw4h7mTzs310.jpg

啓動成功  有警告沒有管


2.6  日誌接入 另外一臺機器  安裝logstash 過程 跟上面同樣 可是  nginx_access.conf 配置以下


  1. input {

  2.     file {

  3.         type => "nginx_access"

  4.         path => "/var/log/nginx/access.log"  日誌的路徑

  5.     }

  6. }



  7. output {

  8.     stdout { codec => rubydebug }

  9.     redis {

  10.         host => '192.168.1.140'              對接的redisIP

  11.         data_type => 'list'

  12.         key => 'logstash:redis'

  13.     }

  14. }


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

刷新nginx日誌

而後在132上的logstash可以看到以下

wKioL1XNkrmQxXlcAAESfim6sK8002.jpg

而後在140端可以看到:


wKioL1XNk4bxLPYhAAJ_CHFHCws783.jpg

重點是訪問http://192.168.1.140/kibana/index.html  驗收最後的頁面


wKioL1XNk_DzfOBVAAUMo7CPb94248.jpg

這個是一個簡單的格式 已經設計好的 固然能夠本身定義了。

定義的方法:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&id=4938039&uid=24940078


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

wKioL1XNlOmTlnMVAAVLkn5PkRE466.jpg

3 安裝插件  安裝bigdesk

要想知道整個插件的列表,請訪問http://www.elasticsearch.org/guide/reference/modules/plugins/ 插件仍是不少的,我的認爲比較值得關注的有如下幾個,其餘的看你需求,好比你要導入數據固然就得關注river了。

該插件能夠查看集羣的jvm信息,磁盤IO,索引建立刪除信息等,適合查找系統瓶頸,監控集羣狀態等,能夠執行以下命令進行安裝,或者訪問項目地址:https://github.com/lukas-vlcek/bigdesk

 

先上一張效果圖:

wKiom1XNlJ3S54apAAQxjqyDg34123.jpg

這裏我是按照https://github.com/lukas-vlcek/bigdesk

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

首先確保安裝git

yum install -y git

而後將按照上面的命令作:

git clone https://github.com/lukas-vlcek/bigdesk.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/


而後就能夠訪問了

http://192.168.1.140/bigdesk

wKiom1XNlgzAotbkAAGnBUf5Pl4825.jpg

先修改host  而後鏈接  而後會出來一個小圖標(成果展現圖裏的) 點擊小圖標就能出現監控的選項了。


聲明:該文參考了以下幾位的博客,可是是我親自搭建了整個過程,對整個的流程進行了新的把控和優化。

http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=17291169&id=4898582

http://www.mamicode.com/info-detail-475881.html

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

相關文章
相關標籤/搜索