日志對于運(yùn)維的重要性
一個(gè)成功的軟件,全力開發(fā)的時(shí)間可能占其整個(gè)生命周期的1/4還不到,軟件發(fā)布后要運(yùn)維(Operation),運(yùn)維的視角和開發(fā)的視角是很不一樣的,但是有一點(diǎn),運(yùn)維的數(shù)據(jù)能反哺開發(fā),同時(shí),開發(fā)的時(shí)候也得考慮可運(yùn)維性,其中非常重要的一點(diǎn)是日志,沒有日志,運(yùn)維就瞎了大半。怎么寫日志,就得從運(yùn)維的需求來看了,通常會(huì)有以下一些常見的場景(已典型互聯(lián)網(wǎng)應(yīng)用為例):
1. 訪問來源,包括訪問量,訪問者數(shù)據(jù),如用戶名、IP等等。
2. 基于上一點(diǎn)細(xì)化,訪問的接口,讀、寫、刪……
3. 軟件系統(tǒng)內(nèi)部的核心鏈路,比如我這有個(gè)系統(tǒng)要在中美直接同步文件,那同步的情況運(yùn)維的時(shí)候就要掌握。
4. 軟件系統(tǒng)對其他所依賴系統(tǒng)的訪問情況,比如我這個(gè)系統(tǒng)依賴一個(gè)分布式緩存,那訪問緩存的量、是否超時(shí)等情況需要了解。
5. 系統(tǒng)異常,比如磁盤滿了。
記錄這些信息的目的大抵有:幫助分析系統(tǒng)容量方便擴(kuò)容;在系統(tǒng)某些部分工作不正常的時(shí)候及早發(fā)現(xiàn);發(fā)生嚴(yán)重故障后方面定位問題原因。認(rèn)識(shí)到這些需求后,下一步就是怎么實(shí)現(xiàn)的問題了。
前面提到的5點(diǎn),有些可以通過拋異常實(shí)現(xiàn),例如訪問分布式緩存超時(shí),有些則顯然不是異常,例如就是正常的緩存訪問。我覺得可以用一種統(tǒng)一、規(guī)范的方式記錄,這種方法就是打碼。我記得以前用Windows 98/2000的時(shí)候,經(jīng)常會(huì)遇到藍(lán)屏,藍(lán)屏上會(huì)有一堆我看不懂的英文,并且總是伴隨著一個(gè)錯(cuò)誤碼。
雖然我看這玩意兒沒一點(diǎn)好心情,但我相信微軟的工程師肯定能從那個(gè)奇怪的狀態(tài)碼上判斷出是哪里出了問題,硬盤壞道?光驅(qū)卡死?諸如此類……其實(shí)類似的做法數(shù)據(jù)庫也用,比如MySQL。
用統(tǒng)一的代碼表示錯(cuò)誤(也可以表示正常但核心的業(yè)務(wù)點(diǎn))***的好處就是便于搜索、統(tǒng)計(jì)和分析,在動(dòng)輒數(shù)以萬行記的日志文件中尋找感興趣的信息,一頁一頁翻看是不現(xiàn)實(shí)的,稍微做過點(diǎn)運(yùn)維的必然會(huì)用上 grep,awk,wc 等工具,這個(gè)時(shí)候如果信息都有代碼標(biāo)識(shí),那真是再方便不過了!例如,我用代碼 FS_DOWN_200 表示對系統(tǒng)的正常下載訪問,日志是寫在 monitor.log 文件中的,我就可以使用一行shell統(tǒng)計(jì)4月22號5點(diǎn)到6點(diǎn)之間的正常訪問量:
- $ grep FS_DOWN_200 monitor.log | grep "2014-04-22 05:" | wc -l
 
具體每條日志記錄什么,那就是更詳細(xì)的了,基本就是時(shí)間、日志編碼、額外的有用信息,如:
- 2014-04-22 05:06:18,561 - FS_DOWN_200 216 UT8TFSDXc8XXXagOFbXj.jpg
 
除了時(shí)間和日志編碼外,還有響應(yīng)時(shí)間(216ms)和具體訪問的文件名。
當(dāng)然如果你有日志監(jiān)控和分析系統(tǒng)就更棒了!你就可以在系統(tǒng)中錄入關(guān)鍵字監(jiān)控,比如每分鐘統(tǒng)計(jì)次數(shù),然后看一天、一周的訪問量趨勢圖。進(jìn)一步的,如果這個(gè)量發(fā)生異常,讓系統(tǒng)發(fā)出報(bào)警。如果沒有關(guān)鍵字,從海量日志中分析紛繁復(fù)雜形態(tài)各異的信息,再監(jiān)控,是非常難的一件事情。
為什么要把日志代碼設(shè)計(jì)成 FS_DOWN_200 這樣子的,下面稍微解釋下,這個(gè)代碼分成三段: 
1. FS: 表示我們的系統(tǒng),這是***的級別,公司中有很多系統(tǒng),那各自定義自己的標(biāo)識(shí)。 
2. DOWN: 表示我們系統(tǒng)中的一個(gè)核心業(yè)務(wù)點(diǎn)或者對其他依賴系統(tǒng)的訪問,還可以是UP(上傳),SYNC(同步),或者TAIR(對緩存系統(tǒng)訪問)。 
3. 200: 具體健康碼,參考HTTP規(guī)范,200表示OK,其他包括404(不存在),504(超時(shí))等等。
有了這些代碼,再結(jié)合公司的監(jiān)控系統(tǒng),我們做統(tǒng)計(jì)分析就非常方便了,每天多少下載、多少上傳、多少成功、多少失敗、對其他依賴系統(tǒng)訪問多少量、多少失敗率,一目了然。進(jìn)一步的加上監(jiān)控,當(dāng)某些值突然發(fā)生變化,比如下載量/上傳量暴跌、訪問其他系統(tǒng)依賴超時(shí)大量增多,就能及時(shí)響應(yīng)。
日志對于運(yùn)維實(shí)在太重要了,而如果不接觸運(yùn)維,又怎能理解其真正的需求,因此我說,不做運(yùn)維,不懂日志。
















 
 
 




 
 
 
 