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