圈子里關(guān)于大數(shù)據(jù)、云計算相關(guān)文章和討論是越來越多,愈演愈烈。行業(yè)內(nèi)企業(yè)也爭前恐后,群雄逐鹿。而在大數(shù)據(jù)時代的運維挑站問題也就日漸突出,任重而道遠了。本文旨在針對復(fù)雜的大數(shù)據(jù)運維系統(tǒng)推薦一把利器,達到拋磚引玉的效果,如果文中出現(xiàn)任何紕漏和錯誤的地方,懇請指正,歡迎討論,希望大家不吝賜教。
眾所周知,大數(shù)據(jù)平臺組件是很復(fù)雜的。筆者之前接觸的一個大數(shù)據(jù)平臺解決方案,僅平臺組件就達20多個,這還沒有加上物聯(lián)網(wǎng)系統(tǒng)各組件。而這龐大的系統(tǒng)整合問題,對于運維來說是很頭疼的。所以,在大數(shù)據(jù)時代下的運維問題是日漸尖銳。
有人把運維比作醫(yī)生給病人看病,那么日志則是病人對自己的陳述。所以只有在海量分布式日志系統(tǒng)中有效的提取關(guān)鍵信息,才能對癥下藥。如果能把這些日志集中管理,并提供全文檢索功能,不僅可以提高診斷的效率,同時可以起到實時系統(tǒng)監(jiān)測、網(wǎng)絡(luò)安全、事件管理和發(fā)現(xiàn)bug等功能?;诖耍疚南虼蠹彝扑]一款開源利器——ELK組件(Apache 2.0 License),提供分布式的實時日志(數(shù)據(jù))搜集和分析的監(jiān)控系統(tǒng)。
ELK多種架構(gòu)及優(yōu)劣
既然要談ELK在大數(shù)據(jù)運維系統(tǒng)中的應(yīng)用,那么ELK架構(gòu)就不得不談。本章節(jié)引出四種筆者曾經(jīng)用過的ELK架構(gòu),并討論各種架構(gòu)所適合的場景和優(yōu)劣供大家參考。
先大致介紹ELK組件。ELK是Elasticsearch、Logstash、Kibana的簡稱,這三者是核心套件,但并非全部。后文的四種基本架構(gòu)中將逐一介紹應(yīng)用到的其它套件。
Elasticsearch是實時全文搜索和分析引擎,提供搜集、分析、存儲數(shù)據(jù)三大功能;是一套開放REST和JAVA API等結(jié)構(gòu)提供高效搜索功能,可擴展的分布式系統(tǒng)。它構(gòu)建于Apache Lucene搜索引擎庫之上。
Logstash是一個用來搜集、分析、過濾日志的工具。它支持幾乎任何類型的日志,包括系統(tǒng)日志、錯誤日志和自定義應(yīng)用程序日志。它可以從許多來源接收日志,這些來源包括 syslog、消息傳遞(例如 RabbitMQ)和JMX,它能夠以多種方式輸出數(shù)據(jù),包括電子郵件、websockets和Elasticsearch。
Kibana是一個基于Web的圖形界面,用于搜索、分析和可視化存儲在 Elasticsearch指標(biāo)中的日志數(shù)據(jù)。它利用Elasticsearch的REST接口來檢索數(shù)據(jù),不僅允許用戶創(chuàng)建他們自己的數(shù)據(jù)的定制儀表板視圖,還允許他們以特殊的方式查詢和過濾數(shù)據(jù)。
我們先談?wù)劦谝环NELK架構(gòu),如圖1,這是最簡單的一種ELK架構(gòu)方式。優(yōu)點是搭建簡單,易于上手。缺點是Logstash耗資源較大,運行占用CPU和內(nèi)存高。另外沒有消息隊列緩存,存在數(shù)據(jù)丟失隱患。建議供學(xué)習(xí)者和小規(guī)模集群使用。
此架構(gòu)首先由Logstash分布于各個節(jié)點上搜集相關(guān)日志、數(shù)據(jù),并經(jīng)過分析、過濾后發(fā)送給遠端服務(wù)器上的Elasticsearch進行存儲。Elasticsearch將數(shù)據(jù)以分片的形式壓縮存儲并提供多種API供用戶查詢,操作。用戶亦可以更直觀的通過配置Kibana Web Portal方便的對日志查詢,并根據(jù)數(shù)據(jù)生成報表(詳細過程和配置在此省略)。

圖1 ELK架構(gòu)一
第二種架構(gòu)(圖2)引入了消息隊列機制,位于各個節(jié)點上的Logstash Agent先將數(shù)據(jù)/日志傳遞給Kafka(或者Redis),并將隊列中消息或數(shù)據(jù)間接傳遞給Logstash,Logstash過濾、分析后將數(shù)據(jù)傳遞給Elasticsearch存儲。最后由Kibana將日志和數(shù)據(jù)呈現(xiàn)給用戶。因為引入了Kafka(或者Redis),所以即使遠端Logstash server因故障停止運行,數(shù)據(jù)將會先被存儲下來,從而避免數(shù)據(jù)丟失。

圖2 ELK架構(gòu)二
這種架構(gòu)適合于較大集群的解決方案,但由于Logstash中心節(jié)點和Elasticsearch的負荷會比較重,可將他們配置為集群模式,以分擔(dān)負荷,這種架構(gòu)的優(yōu)點在于引入了消息隊列機制,均衡了網(wǎng)絡(luò)傳輸,從而降低了網(wǎng)絡(luò)閉塞尤其是丟失數(shù)據(jù)的可能性,但依然存在Logstash占用系統(tǒng)資源過多的問題。
第三種架構(gòu)(圖3)引入了Logstash-forwarder。首先,Logstash-forwarder將日志數(shù)據(jù)搜集并統(tǒng)一發(fā)送給主節(jié)點上的Logstash,Logstash分析、過濾日志數(shù)據(jù)后發(fā)送至Elasticsearch存儲,并由Kibana最終將數(shù)據(jù)呈現(xiàn)給用戶。