背景
隨著業(yè)務(wù)的快速發(fā)展槐瑞,各種服務(wù)和組件也要隨著增加或擴(kuò)容邑滨,服務(wù)器的臺(tái)數(shù)隨之增加诊霹,這樣給日志運(yùn)維帶來(lái)很大的問(wèn)題搀绣。如果你要查閱某個(gè)項(xiàng)目的日志,服務(wù)器數(shù)十上百臺(tái)的話陕悬,這將是一件非常繁瑣和低效的事习柠。另外疏魏,如果你想對(duì)這些日志進(jìn)行實(shí)時(shí)的分析統(tǒng)計(jì)蛉艾,也無(wú)從下手钳踊。因此,我們需要一種數(shù)據(jù)收集框架勿侯,它可以將不同服務(wù)器上的日志數(shù)據(jù)拓瞪,高效地收集匯總在一起,供在線或者離線查閱和分析助琐,并且還可以對(duì)系統(tǒng)實(shí)施監(jiān)控和故障告警吴藻。
本文檔通過(guò)介紹Flume NG、Scribe弓柱、Kafka沟堡、Chukwa和ELK的特點(diǎn),結(jié)構(gòu)模型矢空,使用時(shí)的優(yōu)勢(shì)和劣勢(shì)航罗,以及我們自定義的指標(biāo)項(xiàng)對(duì)比,最后得出它們各自的應(yīng)用場(chǎng)景屁药,為框架選型提供技術(shù)參考粥血。
數(shù)據(jù)收集系統(tǒng)
Flume NG
Flume NG的介紹
Flume NG 是Cloudera提供的分布式數(shù)據(jù)收集系統(tǒng),它能夠?qū)⒉煌瑪?shù)據(jù)源的海量日志數(shù)據(jù)進(jìn)行高效的收集酿箭、聚合复亏、移動(dòng),最后存儲(chǔ)到存儲(chǔ)中心缭嫡。Flume NG支持(故障轉(zhuǎn)移)failover和負(fù)載均衡缔御。
Flume NG的結(jié)構(gòu)
Flume NG傳輸數(shù)據(jù)的基本單元是event,如果是文件妇蛀,通常是一行記錄耕突。運(yùn)行的核心是Agent,包含三個(gè)核心組件评架,分別是Source眷茁、Channel和Sink,其結(jié)構(gòu)模型圖如下:
- Source:接收外部源發(fā)送過(guò)來(lái)的數(shù)據(jù)纵诞,支持Avro上祈、Thrift、JMS浙芙、Syslog登刺、Kafka和Http post(自己代碼實(shí)現(xiàn))等多種方式的日志接收。提供ExecSource以tail -f等命令的方式實(shí)現(xiàn)實(shí)時(shí)日志收集茁裙;提供SpoolSource以讀取新增的文件的方式實(shí)現(xiàn)低延時(shí)的日志收集塘砸。
- Channel:是一個(gè)存儲(chǔ)池,接收Source的輸出晤锥。有MemoryChannel掉蔬、JDBC Channel、MemoryRecoverChannel和FileChannel等主要類型矾瘾。其中MemoryChannel可以實(shí)現(xiàn)高速吞吐女轿,但無(wú)法保證數(shù)據(jù)的完整性。FileChannel能實(shí)現(xiàn)數(shù)據(jù)的完整性和一致性壕翩。Channel中的數(shù)據(jù)僅會(huì)在數(shù)據(jù)保存在下一個(gè)Channel或最終的存儲(chǔ)中心時(shí)蛉迹,才會(huì)被刪除。
- Sink:消費(fèi)Channel中的數(shù)據(jù)放妈,然后發(fā)送給數(shù)據(jù)存儲(chǔ)系統(tǒng)(HDFS北救、Elasticsearch或者HBase等)荐操。一個(gè)Agent可以存在多個(gè)Sink,Sink支持負(fù)載均衡和failover珍策。
Flume NG的結(jié)構(gòu)圖:
-
多個(gè)Agent順序連接:
最簡(jiǎn)單的部署方式托启,通過(guò)多個(gè)Agent連接,將原始數(shù)據(jù)傳送到下一個(gè)Agent或者是最終的存儲(chǔ)中心攘宙,適合初學(xué)者屯耸。
- 多個(gè)Agent的數(shù)據(jù)匯聚在同一個(gè)Agent中:
最常見(jiàn)的部署方式,比如在各個(gè)應(yīng)用服務(wù)器上部署Flume NG蹭劈,將原始數(shù)據(jù)同步到一臺(tái)agent上疗绣。
- 多路Agent連接:
包括分流和復(fù)制兩種方式,分流是根據(jù)header信息進(jìn)行數(shù)據(jù)的分類存儲(chǔ)數(shù)據(jù)铺韧,復(fù)制是將數(shù)據(jù)復(fù)制多份多矮。
- 負(fù)載均衡數(shù)據(jù)模型:
Agent1負(fù)責(zé)路由,每個(gè)Sink連接一個(gè)Agent祟蚀,Sink支持負(fù)載均衡和Failover工窍。
Flume NG的優(yōu)勢(shì)劣勢(shì)
- 優(yōu)勢(shì):Flume NG通過(guò)事務(wù)保證數(shù)據(jù)的完整性和一致性;支持負(fù)載均衡前酿;很容易進(jìn)行水平擴(kuò)展患雏;社區(qū)活躍度高;文檔資料比較豐富罢维;依賴第三方庫(kù)少淹仑;部署簡(jiǎn)單;支持多種存儲(chǔ)系統(tǒng)肺孵。
- 劣勢(shì):Flume NG需要自己實(shí)現(xiàn)客戶端代碼匀借;ExecSource方式會(huì)存在數(shù)據(jù)丟失的可能,SpoolSource方式做不到監(jiān)控文件的新增記錄平窘;對(duì)數(shù)據(jù)的過(guò)濾能力較差吓肋。
Scribe
Scribe介紹
Scribe是Facebook開(kāi)源的一個(gè)基于thrift框架的日志收集系統(tǒng),在facebook內(nèi)部已經(jīng)得到大量的應(yīng)用瑰艘。Scribe可以從不同數(shù)據(jù)源是鬼,不同機(jī)器上收集日志,然后將它們存入存儲(chǔ)中心紫新,目前Facebook已停止對(duì)Scribe的更新和維護(hù)均蜜。
Scribe結(jié)構(gòu)
- Scribe結(jié)構(gòu)圖:
- Scribe 客戶端:需要自己基于Thrift框架實(shí)現(xiàn),每條消息包含一個(gè)category和一個(gè)message信息芒率,Scribe Server根據(jù)category將數(shù)據(jù)存儲(chǔ)在不同的存儲(chǔ)系統(tǒng)囤耳。
- Scribe Server:根據(jù)配置,將各個(gè)category類型的日志發(fā)到不同的存儲(chǔ)系統(tǒng)。Scribe Server收集到數(shù)據(jù)后充择,將數(shù)據(jù)放到共享隊(duì)列德玫,然后Push到存儲(chǔ)中心,當(dāng)存儲(chǔ)中心出現(xiàn)故障時(shí)聪铺,Scribe 會(huì)將數(shù)據(jù)保存在本地文件中化焕,待存儲(chǔ)中心恢復(fù)后再Push數(shù)據(jù)。
- 存儲(chǔ)中心:包括HDFS铃剔、File和Scribe。
Scribe優(yōu)勢(shì)和劣勢(shì)
- 優(yōu)勢(shì):具有很高的容錯(cuò)性查刻;支持水平擴(kuò)展键兜;
- 劣勢(shì):依賴zookeeper或Hash等其他工具;需要自己實(shí)現(xiàn)客戶端代碼穗泵;社區(qū)活躍度低普气;文檔資料極少;依賴第三方庫(kù)多佃延;部署較為復(fù)雜现诀;存儲(chǔ)系統(tǒng)類型較少;數(shù)據(jù)過(guò)濾解析能力差履肃;Facebook公司已停止更新和技術(shù)支持仔沿。
Kafka
Kafka的介紹
Kafka 是一個(gè)基于分布式的消息系統(tǒng),開(kāi)發(fā)自 LinkedIn ['l??kt?n]尺棋,作為 LinkedIn 的活動(dòng)流和運(yùn)營(yíng)數(shù)據(jù)處理管道封锉。活動(dòng)流數(shù)據(jù)包括頁(yè)面訪問(wèn)量膘螟、被查看內(nèi)容方面的信息以及搜索情況等成福。運(yùn)營(yíng)數(shù)據(jù)指服務(wù)器的性能數(shù)據(jù),包括CPU荆残、IO使用率奴艾、請(qǐng)求時(shí)間、服務(wù)日志等内斯。
Kafka結(jié)構(gòu)模型:
- Producer:消息發(fā)送者蕴潦,負(fù)責(zé)發(fā)送消息給Broker。
- Kafka Cluster:由多個(gè)Kafka實(shí)例組成嘿期,每個(gè)實(shí)例(Server)成為Broker品擎。集群的搭建依賴Zookeeper。
- Consumer:消息消費(fèi)者备徐,從Kafka讀取消息萄传。
- Topic:一類消息,類似Queue的概念,Topic在物理上是分節(jié)點(diǎn)存儲(chǔ)秀菱。
- Consumer Group:實(shí)現(xiàn)一個(gè)Topic消息單播和廣播的一個(gè)手段振诬。要實(shí)現(xiàn)廣播,只要每個(gè)consumer有一個(gè)獨(dú)立的Group就可以衍菱。要實(shí)現(xiàn)單播赶么,只要所有的Consumer在同一個(gè)Group里即可。
Kafka的優(yōu)勢(shì)和劣勢(shì)
Kafka 通過(guò)系統(tǒng)解耦脊串、Partition(分片存儲(chǔ))辫呻、復(fù)制備份、持久化琼锋、緩存放闺、集群和異步通信等策略提供了一個(gè)高性能、高可靠缕坎、可擴(kuò)展的數(shù)據(jù)管道和消息系統(tǒng)怖侦。
- 優(yōu)勢(shì):高性能;高可靠谜叹;通過(guò)Kafka Conenector對(duì)接HDFS匾寝、Elasticsearch、JDBC等其它系統(tǒng)荷腊;支持水平擴(kuò)展艳悔;社區(qū)活躍度高;文檔資料豐富停局;依賴第三方庫(kù)較少很钓。
- 劣勢(shì):依賴Zookeeper;需要自己實(shí)現(xiàn)客戶端代碼董栽;數(shù)據(jù)過(guò)濾解析能力差码倦。
Chukwa
Chukwa的介紹
chukwa 是一個(gè)用于監(jiān)控大型分布式系統(tǒng)的數(shù)據(jù)收集系統(tǒng),構(gòu)建在 Hadoop 的 HDFS 和 map/reduce 框架之上的锭碳,繼承了 hadoop 的擴(kuò)展性和健壯性袁稽,還包含HICC,可用于展示擒抛、監(jiān)控和分析已收集的數(shù)據(jù)推汽。
Chukwa的結(jié)構(gòu)
- Agent:負(fù)責(zé)采集數(shù)據(jù),并發(fā)送給Collector歧沪。agent采用“watchdog”的機(jī)制歹撒,自動(dòng)重啟終止的數(shù)據(jù)采集進(jìn)程,防止數(shù)據(jù)丟失诊胞。
- Adaptor:直接采集數(shù)據(jù)的接口和工具暖夭,支持命令行,log文件和httpSender輸出,可以按自己的需求實(shí)現(xiàn)Adaptor,一個(gè)Agent可以管理多個(gè)Adaptor的數(shù)據(jù)采集迈着。
- Collectors:負(fù)責(zé)收集Agents發(fā)送過(guò)來(lái)的數(shù)據(jù)竭望,并定時(shí)寫(xiě)入集群。
- Map/Reduce jobs:定時(shí)啟動(dòng)裕菠,在此階段咬清,Chukwa提供了demux [d?m'ju:ks]和archive [?ɑ:ka?v]兩種內(nèi)置的作業(yè)類型,其中奴潘,demux作為負(fù)責(zé)對(duì)數(shù)據(jù)分類旧烧、排序、去重萤彩,archive作業(yè)負(fù)責(zé)把同類型的數(shù)據(jù)合并粪滤。
- HICC:負(fù)責(zé)數(shù)據(jù)的展示。
Chukwa的優(yōu)勢(shì)和劣勢(shì)
- 優(yōu)勢(shì):高可靠雀扶,易擴(kuò)展;社區(qū)活躍度較高肆汹;文檔資料較豐富愚墓;
- 劣勢(shì):依賴hadoop。
ELK
ELK的介紹
ELK 不是一款軟件昂勉,而是Elasticsearch浪册、Logstash和Kibana首字母的縮寫(xiě)。這三者是開(kāi)源軟件岗照,通常配合一起使用村象,而且先后歸于Elasic.co公司的名下,所以簡(jiǎn)稱ELK Stack攒至。根據(jù)Google Trend的信息顯示厚者,ELK已經(jīng)成為目前最流行的的集中式日志解決方案。
Elasticsearch:是一個(gè)分布式搜索和分析引擎迫吐,具有高可伸縮库菲、高可靠和易管理等特點(diǎn)≈景颍基于Apache Lucene構(gòu)建熙宇,能對(duì)大容量的數(shù)據(jù)進(jìn)行接近實(shí)時(shí)的存儲(chǔ)、搜索和分析操作溉浙。通過(guò)簡(jiǎn)單的配置烫止,Elasticsearch就會(huì)幫你管理集群、分片戳稽、故障轉(zhuǎn)移馆蠕、主節(jié)點(diǎn)選舉等,還提供集群狀態(tài)的監(jiān)控接口。
Logstash:數(shù)據(jù)收集引擎荆几。它支持從各種數(shù)據(jù)源收集數(shù)據(jù)吓妆,并對(duì)數(shù)據(jù)進(jìn)行過(guò)濾、分析吨铸、豐富行拢、統(tǒng)一格式等操作,然后存儲(chǔ)到用戶指定的位置诞吱。Logstash支持file舟奠、syslog、tcp房维、stdin沼瘫、redis和kafka等多種接收方式。支持elasticrsearch咙俩、email耿戚、exec、nagios阿趁、tcp膜蛔、hdfs等多種方式輸出。
Kibana:數(shù)據(jù)分析和可視化平臺(tái)脖阵。通常與Elasticsearch配合使用皂股,對(duì)其中的數(shù)據(jù)進(jìn)行搜索、分析并能以圖表的方式顯示命黔。
Filebeat:ELK協(xié)議棧的新成員呜呐,一個(gè)輕量級(jí)開(kāi)源日志文件數(shù)據(jù)搜集器。我們?cè)谛枰杉罩緮?shù)據(jù)的服務(wù)器上安裝Filebeat悍募,并指定日志目錄或日志文件后蘑辑,F(xiàn)ilebeat就能讀取數(shù)據(jù),迅速發(fā)送到Logstash進(jìn)行解析搜立,亦或直接發(fā)送到Elasticsearch進(jìn)行集中式存儲(chǔ)和分析以躯。FileBeat可以監(jiān)聽(tīng)指定目錄下是否新增文件,監(jiān)聽(tīng)文件是否新增記錄啄踊,文件在一定時(shí)間內(nèi)沒(méi)更新取消監(jiān)聽(tīng)忧设,支持批量數(shù)據(jù)傳送,支持負(fù)載均衡的方式傳送數(shù)據(jù)到Logstash或Elasticsearch颠通。支持SSL/TLS協(xié)議傳送址晕。
ELK的結(jié)構(gòu)
- 最簡(jiǎn)單的結(jié)構(gòu)模型:
這種結(jié)構(gòu)很簡(jiǎn)單,適合初學(xué)者顿锰。初學(xué)者可以搭建此結(jié)構(gòu)谨垃,了解ELK如何工作启搂。
- Logstash作為日志收集器:
這種結(jié)構(gòu)模型需要在各個(gè)應(yīng)用服務(wù)器上部署Logstash,但Logstash比較消耗CPU和內(nèi)存資源刘陶,所以比較適合資源豐富的服務(wù)器胳赌,否則可能會(huì)導(dǎo)致應(yīng)用服務(wù)器無(wú)法工作。
- Beats作為日志收集器匙隔,Beats包括四種:
- Packetbeat(搜集網(wǎng)絡(luò)流量數(shù)據(jù))
- Topbeat(搜集系統(tǒng)疑苫、進(jìn)程、文件系統(tǒng)級(jí)別的CPU和內(nèi)存使用情況等數(shù)據(jù))
- Filebeat(收集文件數(shù)據(jù))
- Winlogbeat(收集Window時(shí)間日志數(shù)據(jù))
這種結(jié)構(gòu)解決了Logstash在各服務(wù)器節(jié)點(diǎn)上占用資源高的問(wèn)題纷责。另外捍掺,數(shù)據(jù)格式規(guī)范的情況下,可以移出Logstash節(jié)點(diǎn),Beats直接發(fā)送數(shù)據(jù)到Elasticsearch再膳,解決Logstash占用資源高的問(wèn)題挺勿。
- 引入消息隊(duì)列機(jī)制
這種結(jié)構(gòu)適合日志規(guī)模比較大的情況。引入消息隊(duì)列喂柒,將上下游服務(wù)解耦不瓶,減輕下游服務(wù)的壓力,解決在巨量日志下灾杰,網(wǎng)絡(luò)阻塞延遲湃番、數(shù)據(jù)丟失的問(wèn)題,使得網(wǎng)絡(luò)傳輸更穩(wěn)定吭露、更高效,避免級(jí)聯(lián)效應(yīng)尊惰。在巨量日志的情況下讲竿,Logstash節(jié)點(diǎn)和Elasticsearch節(jié)點(diǎn)負(fù)荷比較重,可將它們配置成集群模式弄屡,分擔(dān)負(fù)荷题禀。在日志比較規(guī)范的情況下,可以去掉Logstash,Beats直接發(fā)送數(shù)據(jù)到Elasticsearch膀捷,解決Logstash占用資源高的問(wèn)題迈嘹。
ELK的優(yōu)勢(shì)和劣勢(shì)
- 優(yōu)勢(shì):提供一套完整的日志收集、分析全庸、存儲(chǔ)和數(shù)據(jù)展示的解決方案秀仲;Logstash支持集群部署和水平擴(kuò)展;Elasticsearch高可用壶笼,支持集群部署和水平擴(kuò)展神僵;社區(qū)活躍度高;文檔資料較豐富覆劈;部署簡(jiǎn)單保礼。
- 劣勢(shì):Logstash占用資源比較高沛励。
指標(biāo)項(xiàng)對(duì)比
結(jié)論
ELK告警策略
參考資料
Flume NG
http://blog.csdn.net/zhaodedong/article/details/52541688
http://www.gegugu.com/2016/04/11/5484.html
Scribe
http://www.itdadao.com/articles/c15a502872p0.html
http://www.36dsj.com/archives/66047
Kafka
http://www.cnblogs.com/likehua/p/3999538.html
http://www.infoq.com/cn/articles/kafka-analysis-part-1
Chukwa
http://www.it165.net/admin/html/201403/2507.html
http://f.dataguru.cn/thread-97612-1-1.html
ELK Stack 中文指南
http://kibana.logstash.es/content/
Logstash最佳實(shí)踐
http://udn.yyuap.com/doc/logstash-best-practice-cn/index.html
Elasticsearch 權(quán)威指南
Elasticsearche配置:
https://my.oschina.net/topeagle/blog/405149
https://my.oschina.net/Yumikio/blog/805877
Filebeat配置:
http://m.blog.csdn.net/article/details?id=53584173
http://michaelkang.blog.51cto.com/1553154/1864225
Search Guard:
https://github.com/floragunncom/search-guard-docs
http://www.cnblogs.com/Orgliny/p/6168986.html
http://kibana.logstash.es/content/elasticsearch/auth/searchguard-2.html