日志處理
日志處理是一個很重要的概念,我們將嘗試其中一些工具,比如ELK( Elasticsearch、Logstash和Kibana)。
傳統(tǒng)意義上的日志只是在代碼中使用簡單的打印語句來追蹤代碼中的事件。有時候這被叫作打印式調(diào)試(print-style debugging),因為跟蹤代碼行為而不是使用常規(guī)的調(diào)試器。
下面是一個C語言風(fēng)格的簡單例子。目的是為了知道當(dāng)我們輸入函數(shù)fn (x)時,傳入的參數(shù)x值是什么:
void fn ( char *x) {
printf ("DEBUG entering fn, x is ooSIl", X) ;}
從控制臺的調(diào)試追蹤可以知道程序表現(xiàn)的行為和我們開發(fā)時期望的一樣。
當(dāng)然,你也希望看到程序中是否發(fā)生了什么嚴(yán)重的事情,并且以較高的優(yōu)先級去匯報:
printf ("ERROR x cant be an empty string
");這種風(fēng)格的調(diào)試有幾個問題。在你想知道程序行為時它是有用的,但是在你完成代碼后想要部署時就沒有那么有用了。
目前,有大量基于上述實踐考驗的框架,支持不同的日志方式。
日志框架比打印風(fēng)格的日志有更多的價值,尤其是在定義標(biāo)準(zhǔn)和提供改進(jìn)的功能上,如以下這些:
國 不同的日志優(yōu)先級,比如Debug、Warning、Trace和Error。
。 過濾不同優(yōu)先級的日志信息。你不可能對所有的調(diào)試信息有興趣,但是一定會對錯誤感興趣。
。 將日志記錄在固定的目的地,比如文件、數(shù)據(jù)庫或者網(wǎng)絡(luò)進(jìn)程。這包括我們稍后會了解的ELK。
。 日志文件的輪替和歸檔。老的日志文件可以被歸檔。
時不時地就會有新的日志框架出現(xiàn),所以即使在如今,曰志問題領(lǐng)域看上去也還遠(yuǎn)遠(yuǎn)沒有到令人滿意的地步。這種趨勢是可以理解的,因為處理得當(dāng)?shù)娜罩究梢詭椭銣?zhǔn)確判斷一個不再運行的網(wǎng)絡(luò)服務(wù)的失敗原因,或者你不經(jīng)常管理的復(fù)雜服務(wù)。日志也很難做好,因為過度的日志會降低服務(wù)的性能,日志太少又不能幫你診斷失敗的原因。因此,曰志系統(tǒng)盡力去在日志的不同特性間達(dá)到一個平衡。