分布式日志收集系統: 非死book Scribe之日志收集方案

寫入日志到Scribe的解決方案

1.概述

Scribe日志收集服務器只負責收集主動寫入它的日志,它本身不會去主動抓取某一個日志,所以為了把日志寫入到 scribe服務器,我們必須主動向scribe服務器發送日志信息。由于scribe服務器是基于thrift框架實現的,并且thrift支持多種編程語言的通信,所以對于寫入scribe服務器的客戶端實現也可以使用多種語言,這就為把寫入日志的客戶端集成到各種應用系統中提供了很好的支持。把寫入日志到scribe服務器的功能集成到應用系統是一種可行的解決方案,但是不是唯一的解決方案,我們還可以現實一個單獨的客戶端,專門用來抓取應用系統生成的日志文件,然后寫入到scribe服務器。下面就針對這兩種方案具體說明。

2.scribe日志寫入與應用系統集成

(1)與java應用系統集成

與java系統集成有兩種解決方案,一是通過scribe提供的開發API自己開發,另一種是通過與log4j集成(網上有開源的實現)。

對應用系統的影響:因為這種方式是作為應用系統的一個功能模塊加入,所以需要加入額外的jar和需要額外的占用應用系統開銷,除了這些還需要考慮scribe服務器不能正常鏈接時的異常處理。

(2)與C#應用系統集成

與C#系統集成是通過把scribe提供的開發API封裝到一個dll文件里面,然后C#應用系統導入dll文件,利用提供的API開發寫入scribe日志的功能模塊。

對應用系統的影響:需要導入dll文件,增加應用系統的額外執行開銷,存在鏈接scribe服務器的異常處理。

(3)與其他應用系統集成

由于thrift框架支持多做語言,而且scribe是基于thrift實現的,所以只要thrift支持的開發語言都可以與相應的應用系統集成開發。

3.單獨的抓取日志文件的客戶端

寫一個單獨的客戶端是一種適用于任何應用系統的解決方案,前提是應用系統需要產生相應的日志文件。這個單獨的客戶端可以用thrift支持的任何一種語言實現,不過通常采用python實現,方便修改、擴展和部署。

這種解決方案實現的方式有兩種:一是循環的去檢測日志文件或文件夾,如果有新的日志生成就讀取日志文件并上傳到scribe服務器;二是通過事件響應的機制來監控文件或文件夾。

4.兩種解決方案的比較

首先可以肯定的是兩種解決方案都能夠達到向scribe寫入日志的目的。

兩者的區別就是:

(1)與應用系統集成的方案寫入日志的效率更高,因為不需要在通過一個轉發的環節,通過應用系統直接寫入,而且這種方案降低了出錯的可能性,不需要單獨去維護一個程序了。但是這種解決方案會對應用系統有一定的影響,前面以前描述具體的影響,還有就是不具有通用性,每一個應用系統需要單獨開發一個這樣的功能模塊(開發的思路和方法基本相同)。

(2)單獨的抓取日志文件客戶端:具有很好的通用性,不需要每一個應用系統單獨開發日志寫入模塊,只需要應用系統生成日志文件。而且這種方案對應用系統沒有影響。當然這種解決方案的效率會低一些,因為需要通過一個文件來中轉日志信息,還會因為單獨的程序也可能會掛掉。

5.兩種方案都需要解決的問題

(1)單點故障問題

(2)日志丟失問題

作者獨立博客網址是:http://wuyouqiang.sinaapp.com/

作者的新浪微博:http://weibo.com/freshairbrucewoo

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!