線上日誌集中化可視化管理:ELK


本文來自網易雲社區

做者:王貝node


爲何推薦ELK:linux

當線上服務器出了問題,咱們要作的最重要的事情是什麼?當須要實時監控跟蹤服務器的健康狀況,咱們又要拿什麼去分析?你們必定會說,去看日誌,去分析日誌。是的,日誌對於服務器開發人員來說是最親密的夥伴了,基本上天天都會去看各類類型的海量的日誌去定位問題,去作統計分析等等。最多見的查看日誌的狀況,好比線上出了bug,咱們ssh到線上服務器,cd到服務器的日誌目錄,而後less一下當天的日誌文件,執行shift+G,?error,n,一系列操做以後找到對應的異常狀況,查出異常緣由。但是,這樣好low啊,效率好低啊,爲何呢?首先,咱們要登陸到服務器,線上基本上都是服務器集羣,少則十幾臺,多則上百臺,光這一臺一臺的服務器去登陸就是一個巨大而又繁瑣的工做,其次,咱們有時還要各類聚合(好比對比多臺機器同一時間點的日誌),或者基於異常多個關鍵詞的搜索,並有且,或,交,並,差,補,排序等一些操做,並且相應速度必須給力,那這個時候不管怎麼grep awk估計都無濟於事了。面對服務集羣,面對海量日誌,沒有一個集中化可視化的日誌管理,程序猿GG估計真的要跪了。爲了解放衆多webserver程序猿,爲了解放生產力提升效率,爲了更精準實時的查看分析線上日誌,業界放了一個大招:用強強聯手的ELK日誌分析平臺實現集中化可視化日誌管理。若是線上環境出了故障,可以馬上準肯定位,ELK就是高手,在百萬大軍中取上將首級,猶如探囊取物,因此這時候ELK就很是適合了,固然除此以外,ELK也常常在運維工做中大放光彩,在應用級別的實時監控,很是適合一些重要核心服務的預警。  
web

先簡單上兩個例子顯示一下ELK的強大:apache

(1)根據過濾規則,生成24小時內全部服務器的ERROR比例餅狀圖,監控服務器的健康程度。(目前GACHA項目7臺server接入了ELK平臺正在試用,這張圖是這七臺server過去24小時的異常比例)vim

             

(2)生成24小時內每一個時間範圍內的異常數量柱狀圖,點擊柱狀圖下面能夠看到具體異常堆棧狀況(柱狀圖統計的是GACHA項目服務器集羣過去24小時每一個時間段的異常數量,柱狀圖下面是異常列表,第一張圖左側能夠選擇添加異常列表展現項,第二張圖就是選擇了展現host,priority,stack trace,message這些項的結果,第三張圖是點擊能夠看到的具體異常堆棧詳情)。瀏覽器

           


好了,看到這些,是否是心略有所動呢,其實ELK的強大還遠不止於此呢,打個雞血繼續往下看吧。服務器

ELK簡介:restful

ELK由ElasticSearch、Logstash和Kiabana三個開源工具組成。官方網站:   https://www.elastic.co/products 網絡

(1)Elasticsearch是個開源分佈式搜索引擎,它的特色有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。app

(2)Logstash是一個徹底開源的工具,他能夠對你的日誌進行收集、過濾,並將其存儲供之後使用(如,搜索)。

(3)Kibana 也是一個開源和免費的工具,它Kibana能夠爲 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,能夠幫助您彙總、分析和搜索重要數據日誌。

由此能夠看到,ELK組合其實能夠當作一個MVC模型,logstash接收應用服務器的日誌傳輸請求收集日誌,至關於控制層controller,ElasticSearch用於數據源存儲,搜索等,至關於Model,而Kibana提供友好的 Web 界面,至關於View。


ELK 搭建:

接下來,我走一下ELK整個搭建流程:

第一步:搭建ElasticSearch

(1)首先下載ElasticSearch(先安裝jdk1.7,整個就不細說了),這裏我用的是Elasticsearch 2.4.1版本:

wget   https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.4.1/elasticsearch-2.4.1.tar.gz

(2)解壓:

tar -zxvf elasticsearch-2.4.1.tar.gz

(3)配置:

cd elasticsearch-2.4.1

vim config/elasticsearch.yml

             

#ES的集羣名稱

cluster.name : es_cluster

#當前該節點名

node.name : node0

#當前節點是否容許被選舉爲master節點

#node.master: true  

#當前節點是否容許存儲數據

node.data: true  

#索引分片個數

index.number_of_shards: 5 

#索引副本個數

index.number_of_replicas: 1 

#索引數據存儲路徑,

path.data : /home/hzwangbei/elasticsearch/data

path.logs : /tmp/elasticsearch/logs

#讀取配置文件路徑,默認ES根目錄config路徑

#path.conf: /path/to/conf  

#ES插件存儲路徑,默認ES根目錄plugins路徑

#path.plugins: /path/to/plugins 

#當前hostname或IP,這是ES用來監聽的,網易雲主機最好配置0.0.0.0,這樣私有ip和機房ip均可以監聽到。

network.bind_host: 0.0.0.0

#設置其它節點和該節點交互的ip地址。網易雲主機這裏配置機房ip

#network.publish_host:0.0.0.0

network.port : 9200

#indexcache過時時間

#index.cache.field.expire:100m

#默認類型爲resident, 字面意思是常駐(居民), 一直增長,直到內存 耗盡。 改成soft就是當內存不足的時候,先clear掉 佔用的,而後再往內存中放。設置爲soft後,至關於設置成了相對的內存大小。resident的話,除非內存夠大。 

index.cache.field.type: soft 

#默認是3s,這是設置集羣中自動發現其它節點時ping鏈接超時時間。

discovery.zen.ping.timeout: 40s #設置是否打開多播發現節點,默認是true。 #discovery.zen.ping.multicast.enabled: false

#指明集羣中其它可能爲master的節點ip,以防es啓動後發現不了集羣中的其餘節點。

#discovery.zen.ping.unicast.hosts:["節點1的 ip","節點2 的ip","節點3的ip"]

(4)插件安裝

安裝head插件:

./bin/plugin install mobz/elasticsearch-head

(5)啓動ES

./bin/elasticsearch

不幸的是報錯了,後來在一個國外的論壇上看到ES啓動時的用戶和組不能和當前目錄所屬用戶和組一致,我比較了一下,果真,我以root用戶啓動ES,而當前目錄所屬用戶正好是root,找到緣由了,那就換個用戶啓動吧。

 

能夠看到,ES成功啓動,好,到此,咱們成功邁的向ELK邁出了一步。

打開連接:   http://localhost:9200/_plugin/head/

能夠看到node0這個節點中有兩個索引(前提條件已經新建索引且有數據了):applog .kibana,而後點擊數據瀏覽,選中applog索引,能夠看到applog索引下存儲的日誌。

             

好了,到此爲止,你必定在想,這些數據從哪裏來的吧,文章前面講過,ES是一個model層,那麼數據固然就是從controller層即logstash收集過來的。lets開始咱們的第二步,搭建logstash。

第二步:安裝logstash

logstash功能模塊圖

 

其實它就是一個收集器而已,咱們須要爲它指定Input和Output(固然Input和Output能夠爲多個)。因爲咱們須要把Java代碼中Log4j的日誌輸出到ElasticSearch中,所以這裏的Input就是Log4j,而Output就是ElasticSearch。  

(1)下載logstash

wget   https://download.elastic.co/logstash/logstash/logstash-2.4.0.tar.gz

(2)解壓

tar -zxvf   logstash-2.4.0.tar.gz

(3)根目錄下建立config文件夾,而後建立log4j_to_es.conf文件

cd logstash-2.4.0
mkdir config
vim log4j_to_es.conf

input {
log4j {
mode => "server"
host => "localhost" //網易雲主機機房ip
port => 4567
}
}
filter {
#Only matched data are send to output.
}
output {
elasticsearch {
action => "index" #The operation on ES
hosts => "localhost:9200" #ElasticSearch host, can be array.
index => "applog" #The index to write data to.
}
}

(4)啓動logstash

./bin/logstash agent -f config/log4j_to_es.conf

到此,logstash安裝成功,logstash是一個收集器,剛剛咱們在配置文件裏配置了log4j的收集配置,因此,在咱們的項目裏,把log4j的配置加一個socket appender就能夠了

# appender socket
log4j.rootLogger=${log4j.level}, stdout,socket
log4j.appender.socket=org.apache.log4j.net.SocketAppender
log4j.appender.socket.Port=4567
#log4j.appender.socket.Threshold=ERROR
log4j.appender.socket.RemoteHost=localhost
log4j.appender.socket.layout=org.apache.log4j.PatternLayout
log4j.appender.socket.layout.ConversionPattern=%d %-5p %c%x - %m%n
log4j.appender.socket.ReconnectionDelay=10000

好了,到此,ES和logstash搭建完畢,基本上能夠實現日誌的收集和存儲了。但是這還不夠,文章開頭,咱們舉了餅狀圖和柱狀圖的兩個例子,那麼這兩種圖是怎麼生成的呢?那就看一下咱們的view層kibana,開始咱們的第三步:安裝kibana。

第三步:kibana安裝

(1)下載kibana

wget   https://download.elastic.co/kibana/kibana/kibana-4.6.1-linux-x86_64.tar.gz  

這裏要注意下,kibana的版本不少,下載的時候要參考ES的版本,因爲咱們的ES安裝的是2.4.1,因此咱們這裏使用Kibana4.6.1,選擇kibana版本時必定要保證和ES版本的兼容。

             

(2)解壓kibana

tar -zxvf kibana-4.6.1-linux-x86_64.tar.gz

(3)配置kibana

root@wangbei-ThinkPad-E560:/usr/local/elk# cd kibana-4.6.1-linux-x86_64
root@wangbei-ThinkPad-E560:/usr/local/elk/kibana-4.6.1-linux-x86_64# vim config/kibana.yml

server.port: 5601
server.host: "localhost"
elasticsearch.url: http://localhost:9200
kibana.index: ".kibana"

(4)啓動kibana

root@wangbei-ThinkPad-E560:/usr/local/elk/kibana-4.6.1-linux-x86_64# ./bin/kibana

             

好了,到此,大功告成,瀏覽器打開:   http://localhost:5601


爲了後續使用Kibana,須要配置至少一個Index名字或者Pattern,它用於在分析時肯定ES中的Index。這裏我輸入以前配置的Index名字applog,Kibana會自動加載該Index下doc的field,並自動選擇合適的field用於圖標中的時間字段:


建立完索引以後,你就能夠領略ELK的強大啦!

 


 


快捷的搜索方式,強大好用的搜索語法,牛叉的圖形繪製,簡直碉堡!

最主要的仍是將日誌集中化管理,可視化呈現,實時化監控!

還有之後不再用苦逼的ssh less grep了,那些複雜的日誌分析也迎刃而解啦!

不得不感嘆,大好福利真的來啦!

注意:

ELK線上的使用還要注意ES的內存配置,網絡設置等等因素。


網易雲免費體驗館,0成本體驗20+款雲產品! 

更多網易研發、產品、運營經驗分享請訪問網易雲社區

相關文章:
【推薦】 掃臉動畫

相關文章
相關標籤/搜索