監控和日志


為什么監控和日志很重要?

監控(Monitoring)和日志(Logging)是大型分布式系統中最關鍵的基礎設施(infrastructure)之一,因為沒有監控,就沒辦法知曉服務的運行情況,就沒辦法知道集群中有沒有Down機,機器的CPU使用率、負載是否正常,網站的Traffic是否正常,服務的出錯率是不是在可容忍范圍之內。 簡而言之,監控使得我們可以實時的了解網站的運營情況和可用性(Availability)情況。


監控通常是從整體上了解網站的情況,需要具備實時性。而日志則是詳盡的記錄着系統運行情況,每一次service的調用,每一次數據庫的訪問,都應該寫進日志,特別是當系統出現問題時,我們希望日志系統能為我們提供完整的錯誤堆棧(Exception Stack) 和盡可能完備的上下文(Context),為系統維護提供支持。日志可以容忍一定程度的延遲,不需要實時性,特別是基於日志的報表,因為分析日志需要一定的時間,也沒辦法做到實時。


監控和日志有時候是可以互相協作的,例如,日志中所攜帶的大量系統信息(客戶端IP,運行Transaction所需時間,SQL的利用率(Use Ratio,在一個Transaction中,use ratio>1的話,說明有問題),等一切用戶願意寫入日志的信息)本身就可以為監控提供信息來源(Source),實際上除了監控,利用日志信息我們還可以做很多和業務相關的事情,比如分析用戶的行為,統計系統的使用情況,不過因為日志信息體量巨大,也就是我們通常說的大數據,像ebay每天的日志信息在幾十個TB,對如此龐大的數據進行存儲和分析,可不是一件容易的事情,通常我們需要借助於FDMS和Hadoop等技術手段。


監控和日志系統架構

縱觀所有的監控和日志系統,無外乎就是下面三步

1.  在業務系統中埋點。
     此處需要注意的是,對一些公共組件,例如SOA framework,我們希望在日志中記錄每個到達SOA Service的request以及request的payload, 那么這個點應該設在framework中,而不是具體的SOA service中,從而起到一個AOP(Aspect Oriented Programming)的效果,並且確保了記錄該信息的風格統一。(前些天,和同事討論到這個AOP,他說對於這個統一打印log的功能,要留一個后門,因為對一些敏感信息,如信用卡卡號,我們需要Mask然后再輸出,也有道理,但是這個后門要怎么設計呢? 各位有沒有好的思路?)

2. 將日志 \ 監控信息發送到日志系統后端
     這個發送的過程應該遵循一個高性能的設計原則,因為寫日志的地方會很多,因此對整個業務系統的影響也就非常大,所以一定要高效。例如在eBay CAL系統中,其采用的手段就是:內存中收集日志信息並緩存,當緩存到達2K時,通過Socket通信,異步的發送到日志系統后端。利用緩存+Socket+異步,使得寫一條日志的過程占用正常業務處理的時間是降到極低,不到1MS

3. 日志系統存儲、分析日志信息,對外提供日志檢索,日志瀏覽、視圖展現等服務
    對海量日志的存儲和搜索,可以采用上文提到的Hadoop技術,對於日志瀏覽(LogView)服務,需要注意的一點是,我們應該用REST的GET方法提供服務,一個很實際的需求就是,員工之間通常需要傳遞LogView的URL來進行溝通,典型情況是QA會發送一個出錯日志的URL給PD,說看一下是什么地方出了錯,因為GET的所有參數都在URL中,所以PD點擊URL就能瀏覽到相應的日志了。 還有就是Access LogView的不一定都是人,也可能是另一個程序,那么日志系統可以保持REST的接口不變,而對不同的客戶端(瀏覽器,或Java Client)提供不同Format的response(HTML,或JSON,XML)

A log view REST URL sample for eBay CAL

http://hostname/logviewui/environment/raptorqasql/pool/r1pgwpmtsoa-envhu4744im8fv4q/machine/phx5qa01c-83ea.stratus.phx.qa.ebay.com/eventDetail?datetime=2014/05/13%2019:43&thread=0x9e&evt=1400035419680


監控和日志系統詳細設計

如果深入到Detail,還是有很多技術細節的,特別是日志的存儲和分析,更是涉及到現在的熱門技術,大數據和Hadoop這兩位好兄弟,有時間再詳細趴吧,暫時先放一些公司的技術文檔,以備不時之需:


關於eBay CAL 更多細節,請閱讀: http://server.dzone.com/articles/monitoring-ebay-big-data

點評的集中式日志: http://www.docin.com/p-737666327.html

點評開源: https://github.com/dianping/cat


Hawkeye


Sherlock



Log sending sequence


版權聲明:本文為博主原創文章,未經博主允許不得轉載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM