分布式日志收集系統(tǒng): Facebook Scribe

以下是我在公司內(nèi)部分享的關(guān)于分布式日志收集系統(tǒng)的PPT內(nèi)容,現(xiàn)在與大家分享,希望對于需要使用的人能夠起到基本的入門作用或是了解!

1.分布式日志收集系統(tǒng):背景介紹

許多公司的平臺每天會產(chǎn)生大量的日志(一般為流式數(shù)據(jù),如,搜索引擎的pv,查詢等),處理這些日志需要特定的日志系統(tǒng),一般而言,這些系統(tǒng)需要具有以下特征:

(1) 構(gòu)建應(yīng)用系統(tǒng)和分析系統(tǒng)的橋梁,并將它們之間的關(guān)聯(lián)解耦;

(2) 支持近實時的在線分析系統(tǒng)和類似于Hadoop之類的離線分析系統(tǒng);

(3) 具有高可擴展性。即:當(dāng)數(shù)據(jù)量增加時,可以通過增加節(jié)點進行水平擴展。


2.分布式日志收集系統(tǒng):Facebook Scribe主要內(nèi)容

(1)Scribe簡介及系統(tǒng)架構(gòu)

(2)Scribe技術(shù)架構(gòu)

(3)Scribe部署結(jié)構(gòu)

(4)Scribe主要功能和使用方案

(5)Scribe的具體應(yīng)用實例

(6)Scribe的擴展

(7)Scribe研究體會


3.Scribe簡介

Scribe是facebook開源的日志收集系統(tǒng),在facebook內(nèi)部已經(jīng)得到大量的應(yīng)用。 Scribe是基于一個使用非阻斷C++服務(wù)器的thrift服務(wù)的實現(xiàn)。它能夠從各種日志源上收集日志,存儲到一個中央存儲系統(tǒng) (可以是NFS,分布式文件系統(tǒng)等)上,以便于進行集中統(tǒng)計分析處理。它為日志的“分布式收集,統(tǒng)一處理”提供了一個可擴展的,高容錯的方案。


4.Scribe的系統(tǒng)架構(gòu)

如上圖所示:Scribe從各種數(shù)據(jù)源上收集數(shù)據(jù),放到一個共享隊列上,然后push到后端的中央存儲系統(tǒng)上。當(dāng)中央存儲系統(tǒng)出現(xiàn)故障時,scribe可以暫時把日志寫到本地文件中,待中央存儲系統(tǒng)恢復(fù)性能后,scribe把本地日志續(xù)傳到中央存儲系統(tǒng)上。


5.Scribe的技術(shù)架構(gòu)

如上圖所示:Scribe服務(wù)器底層數(shù)據(jù)通信框架是Thrift,Thrift也是Facebook開源的,并得到了廣泛的使用。也用到了C++的準(zhǔn)標(biāo)準(zhǔn)庫boost,主要使用共享指針和文件相關(guān)的功能。Thrift也用到了libevent開發(fā)庫和socket編程技術(shù)。


6.Scribe部署結(jié)構(gòu)


7.Scribe的主要功能

1.支持多種存儲類型:7種并且可擴展

2.日志自動切分功能:按文件大小和時間切分

3.靈活的客戶端:

(1)支持多種常用語言(Thrift提供支持);

(2)可與應(yīng)用系統(tǒng)集成;可以作實現(xiàn)獨立客戶端

4.支持日志分類功能(Facebook有上百種日志分類)

5.其他功能

(1)連接池

(2)靈活的日志緩存大小

(3)多線程功能(消息隊列)

(4)scribe服務(wù)器之間可以轉(zhuǎn)發(fā)日志

6.以上功能都是可以通過配置文件來靈活配置


8.Scribe使用方案

(1)和產(chǎn)生日志文件的應(yīng)用系統(tǒng)集成

scribe能夠和各種應(yīng)用系統(tǒng)很好的集成是因為它提供幾乎所有的開發(fā)語言的開發(fā)包

(2)應(yīng)用系統(tǒng)在本地產(chǎn)生日志文件,使用一個獨立運行的客戶端程序同樣,獨立的客戶端也可以采用各種語言開發(fā),我們采用的是python來開發(fā)客戶端


9.Scribe的具體應(yīng)用實例

1.Facebook肯定大量的使用,主要用于處理Facebook級別日志,一旦有新的日志分類生成,Scribe將自動處理。(Facebook有上百個日志分類)。

2. Twitter:一款分布式實時統(tǒng)計系統(tǒng)Rainbird使用了scribe

3.我的公司:

(1)*****

(2)*****

(3)*****

(4)*****

(5)*****

(6)*****

4.其他


10.Scribe的擴展:存在的問題

雖然scribe系統(tǒng)是如此的優(yōu)秀,但是也存在著一些不足和問題,針對存在的問題我們對scribe進行擴展。我們發(fā)現(xiàn)scribe存在的主要問題如下:

1、單點故障問題

有三個地方存在單點故障:

(1)中心服務(wù)器

(2)本地服務(wù)器

(3)收集日志的客戶端程序

2、日志丟失問題

當(dāng)日志文件發(fā)生切分的時候可能導(dǎo)致日志丟失

3、歷史日志收集問題

4、scribe服務(wù)器掛了沒有及時通知


11.Scribe的擴展:問題解決方案

針對上面我們提出的問題,主要提供如下相應(yīng)的解決方案:

1.中心服務(wù)器單點故障

可以部署多個中心服務(wù)器,然后本地服務(wù)器通過配置文件可以自動在這些服務(wù)器之間進行切換

2.其余的問題我們都是通過自己寫的python客戶端解決的

python客戶端我們是基于一個開源的項目進行二次開發(fā)的,因為開源的python客戶端功能很簡單,只是跟蹤一個日志文件并把日志文件的數(shù)據(jù)讀取導(dǎo)入到scribe本地服務(wù)器


12.Scribe的擴展:python客戶端

我們開發(fā)的python客戶端主要實現(xiàn)了如下功能:

1、解決本地scribe服務(wù)器的單點故障

我們可以通過配置多個本地scribe服務(wù)器(通過配置文件配置,相當(dāng)?shù)撵`活),python腳本會根據(jù)配置的這些服務(wù)器自動切換(當(dāng)一個scribe掛掉之后自動切換,如果掛掉本地scribe服務(wù)器重新啟動以后又會自動切換回去。

2、解決日志丟失的問題

開源的python客戶端是按照固定的時間間隔掃描日志文件是否有變化,如果在這個時間段內(nèi)發(fā)生日志切換會導(dǎo)致日志丟失。我們同樣是采用這個方式去檢測日志文件,不過我們在發(fā)生日志切分的時候會再次去檢測被切分走得日志文件是否已經(jīng)收集完畢。

3、解決歷史日志收集

如果在我們運行python客戶端以前已經(jīng)產(chǎn)生了日志,這部分的日志收集也是我們新增的一個功能

4、解決自身的單點故障問題

不排除我們的python客戶端也會掛掉的時候,當(dāng)我們下次啟動怎樣保證我們收集的日志不重復(fù)不丟失是需要解決的問題。我們的解決方案就是對已經(jīng)收集的日志文件的各種信息做序列化(主要是已經(jīng)收集日志文件的位置)

5、收集日志文件怎樣保證按照日志生成的順序收集

日志的生成順序就是跟他們文件的建立時間是相關(guān)的,通過這一點我們可以實現(xiàn)。

6、及時通知機制

為了及時的通知到scrib服務(wù)器掛掉的信息到相關(guān)人員,我們開發(fā)了郵件通知機制,就是當(dāng)某一個本地scribe服務(wù)器掛掉以后會觸發(fā)郵件發(fā)送


13.Scribe研究體會

怎樣從我們工作的內(nèi)容深入學(xué)習(xí)?

1.每個人在公司負(fù)責(zé)開發(fā)的內(nèi)容都是很有限的,怎樣從我們開發(fā)的內(nèi)容入手深入研究和學(xué)習(xí)更多的知識?

2.Scribe研究的例子!


14.總結(jié):以上內(nèi)容有一些是來至互聯(lián)網(wǎng),在加入了自己的一些理解,希望對需要的人有所幫助!

文末也給大家,分享主要有C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒體,CDN,P2P,K8S,Docker,TCP/IP,協(xié)程,DPDK技術(shù),面試技巧方面的資料技術(shù)討論。

感興趣的朋友可以加群:812855908

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容