logstash+elasticsearch+kibana搭建日誌收集分析系統

來源: http://blog.csdn.net/xifeijian/article/details/50829617css

 

 

日誌監控和分析在保障業務穩定運行時,起到了很重要的做用,不過通常狀況下日誌都分散在各個生產服務器,且開發人員沒法登錄生產服務器,這時候就須要一個集中式的日誌收集裝置,對日誌中的關鍵字進行監控,觸發異常時進行報警,而且開發人員可以查看相關日誌。logstash+elasticsearch+kibana3就是實現這樣功能的一套系統,而且功能更強大。html

logstash:是一個管理日誌和事件的工具,你能夠收集它們,解析它們,並存儲它們以供之後使用(例如日誌搜索),logstash有一個內置的web界面,用來搜索你的全部日誌。logstash在部署時有兩種運行模式:standalone和centralized:前端

   * standalone:standalone的意思是全部的事情都在一臺服務器上運行,包括日誌收集、日誌索引、前端WEB界面都部署在一臺機器上。java

   * centralized:就是多服務器模式,從不少服務器運輸(ship)日誌到一臺總的日誌(collector)服務器上用來索引和查找。nginx

    須要注意的是logstash自己並無什麼shipper和indexer這種說法,由於不管是運輸日誌的進程仍是聚集總的日誌的進程運行的都是同一個程序,只是使用的配置文件不一樣而已。web

elasticsearch:redis

    基於lucene的開源搜索引擎,是一個分佈式的搜索分析系統,主要特色有:real time data、real time analytics、distributed、high availability、multi-tenancy、full text search、document oriented、conflict management、schema free、restful api等等。編程

kibana3:json

    可視化日誌和數據系統,做爲WEB前端能夠很容易的和elasticsearch系統結合。kibana有版本2和版本3的區分,版本2採用ruby編寫,部署起來很麻煩,須要安裝不少ruby依賴包(目前網上可能是這個版本的部署),版本3採用純html+css編寫,所以部署起來很方便,解壓即用,目前已是kibana4了,建議你們使用最新版。api

出於性能及擴展性考慮,實際應用中logstash咱們必然採用centralized模式,最基本的結構圖以下:

 

 

一、安裝Redis,安裝過程簡單,這裏不作詳細說明。

二、安裝ElasticSearch(目前版本1.4)

 

[plain]  view plain  copy
 
  1. <span style="font-size:14px;">wget 'https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.7.tar.gz'  
  2. tar zxvf elasticsearch-0.90.7.tar.gz  
  3. cd elasticsearch-0.90.7/bin  
  4. #能夠在logstash agent啓動後再啓動  
  5. ./elasticsearch -f</span>  

 

三、啓動logstash shipper,定義配置文件logstash.conf,根據實際狀況定義,如下主要定義了input源爲文件,output到redis,啓動logstash shipper,例如:

 

[plain]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. <span style="font-family: 'Microsoft YaHei';"><span style="font-size:14px;">input {  
  2.         file {  
  3.                 type => "api_log"  
  4.                 path => "/home/jws/app/nginxserver/logs/apiaccess.log"  
  5.                 debug => true  
  6.         }  
  7.         file {  
  8.                 type => "cas_log"  
  9.                 path => "/home/jws/app/nginxserver/logs/casaccess.log"  
  10.                 debug => true  
  11.         }  
  12.         file {  
  13.                 type => "id_log"  
  14.                 path => "/home/jws/app/nginxserver/logs/idaccess.log"  
  15.                 debug => true  
  16.         }  
  17.         file {  
  18.                 type => "login_log"  
  19.                 path => "/home/jws/app/nginxserver/logs/loginaccess.log"  
  20.                 debug => true  
  21.         }  
  22.         file {  
  23.                 type => "proxy_log"  
  24.                 path => "/home/jws/app/nginxserver/logs/proxyaccess.log"  
  25.                 debug => true  
  26.         }  
  27. }  
  28. output {  
  29.         redis {  
  30.                 host => "10.20.164.121"  
  31.                 data_type => "list"  
  32.                 key => "logstash:redis"  
  33.         }  
  34.         redis {  
  35.                 host => "10.20.164.122"  
  36.                 data_type => "list"  
  37.                 key => "logstash:uop_file"  
  38.         }  
  39. }</span></span>  

 

啓動shipper:

Java -jar /home/jws/htdocs/logstash/lib/logstash.jar agent -f /home/jws/htdocs/logstash/conf/logstash.conf -l /home/jws/htdocs/logstash/logs/logstash.log

四、啓動logstash indexer
logstash的配置文件至關簡單,主要有三部分:inputs、filters、outputs。事件在配置文件中的出現是有順序的。在inputs、output、filter中,容許你設置配置插件,配置插件由一個插件名稱和緊跟在後面的插件配置代碼塊構成。插件中的值能夠是布爾值、字符串、數字、哈希、數組等,而且支持條件判斷(if...else)。

 

例如如下indexer中的配置,並啓動indexer:

 

[plain]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. <span style="font-size:14px;">input {  
  2.     file {  
  3.         path => "/home/rsyslog/asaserver/*/*/*/proxy.log.*"  
  4.         exclude => "*.bz2"  
  5.         type => "proxy"  
  6.     }  
  7. }  
  8.   
  9. filter {  
  10.     grok {  
  11.              match => [ "message", "%{APIPROXY}" ]  
  12.              patterns_dir => ["/home/jws/app/logstash/patterns"]  
  13.          }  
  14.     if [request_uripath_orig]{  
  15.         grok {  
  16.                 match => [ "request_uripath_orig", "%{NSSS}" ]  
  17.                 patterns_dir => ["/home/jws/app/logstash/patterns"]  
  18.         }  
  19.     }  
  20. }  
  21.   
  22. output {  
  23.     #stdout { codec =>"rubydebug"}  
  24.     elasticsearch_http {  
  25.         host => "10.20.161.36"  
  26.         flush_size => 500  
  27.         idle_flush_time => 3  
  28.         index => "logstash_pf_proxy-%{+YYYY.MM.dd.HH}"  
  29.         template => "/home/jws/app/logstash/template/t.json"  
  30.         template_overwrite => true  
  31.     }  
  32. }</span>  

 

 

五、安裝並啓動kibana3,安裝過程與普通軟件安裝無異,能夠配合nginx安裝,這裏不作描述,須要注意的是須要在kibana config.js中配置elasticSearch的地址與端口。

注意紅框中的內容,這只是kibana3的默認界面,須要咱們用logstash.json代替default.json界面,具體目錄源碼目錄下app/dashboards中。

例如項目中的一個例子,根據需求製做圖表(相似餅圖,柱狀圖,折線圖等),在筆者實際項目中,從日誌中分析數據,實現系統穩定性、響應時間、請求量、業務響應碼、HTTP狀態碼等等以kibana展示;

而且,elasticsearch的用途遠不如此,能夠用來作搜索數據源,ES提供了編程接口,可使用編程的方式獲取ES中的數據自定義開發監控程序,靈活且功能強大。

 

官方文檔(如今都整合在一塊兒了):

logstash:https://www.elastic.co/guide/en/logstash/current/index.html

elasticsearch:https://www.elastic.co/

kibana:https://www.elastic.co/

相關文章
相關標籤/搜索