想分析日志價(jià)值廉嚼,你需要了解系統(tǒng)日志數(shù)據(jù)的重要性
與一個(gè)簡(jiǎn)單的算法不同药磺,一個(gè)合格的系統(tǒng)不僅僅要求具有運(yùn)行的高效和計(jì)算的準(zhǔn)確,同時(shí)又必須兼顧穩(wěn)定性舟舒、可靠性拉庶。其次,對(duì)于開發(fā)人員來說秃励,又必須具有可拓展性和可維護(hù)性氏仗。各方面都必須很完善,這樣的一個(gè)系統(tǒng)才能稱得上是一個(gè)合格完美的系統(tǒng)夺鲜。簡(jiǎn)單的站在開發(fā)人員的角度分析皆尔,比較重視的是系統(tǒng)的可維護(hù)性,畢竟開發(fā)人員直面的是系統(tǒng)的代碼實(shí)現(xiàn)币励。
一個(gè)代碼結(jié)構(gòu)冗雜慷蠕、模塊設(shè)計(jì)混亂、命名“異想天開”的系統(tǒng)對(duì)于開發(fā)者來說簡(jiǎn)直到了咬牙切齒的地步食呻!不能忍流炕!堅(jiān)決不能忍!所以在平時(shí)的開發(fā)過程中就要時(shí)刻注意著系統(tǒng)的實(shí)現(xiàn)機(jī)制仅胞,從宏觀設(shè)計(jì)和微觀實(shí)現(xiàn)上面同時(shí)進(jìn)行精雕細(xì)琢浪感。前幾天看到阿里巴巴出的《Java 開發(fā)規(guī)范》,建議大家看看饼问。
說到可維護(hù)性影兽,不得不涉及到系統(tǒng)監(jiān)控和Bug的快速定位。
在開發(fā)階段還比較容易對(duì)系統(tǒng)進(jìn)行監(jiān)控莱革,一般都會(huì)在本機(jī)上對(duì)系統(tǒng)的運(yùn)行進(jìn)行實(shí)時(shí)監(jiān)控峻堰。而對(duì)于bug的定位讹开,開發(fā)者都會(huì)熟練使用debug功能進(jìn)行bug定位,更有甚者通過多年的開發(fā)經(jīng)驗(yàn)根據(jù)系統(tǒng)的異常信息直接能分析出來Bug產(chǎn)生的原因捐名、位置以及解決方案旦万。但是,系統(tǒng)畢竟是人開發(fā)的镶蹋,我們無法預(yù)料到在運(yùn)行中會(huì)出行什么想不到的問題成艘,即使在各種測(cè)試中沒有出現(xiàn),但是也無法保證不會(huì)出現(xiàn)一些意想不到的問題贺归。那么在系統(tǒng)運(yùn)行期間如果產(chǎn)生問題出現(xiàn)異常且無法在測(cè)試環(huán)境中重現(xiàn)淆两,我們又該如何快速、準(zhǔn)確地對(duì)bug進(jìn)行定位分析和解決 呢拂酣?
舉個(gè)親身的例子吧:公司一套設(shè)備監(jiān)控系統(tǒng)秋冰,用來對(duì)上萬個(gè)節(jié)點(diǎn)進(jìn)行實(shí)時(shí)監(jiān)控,如果該節(jié)點(diǎn)有異常(比如溫度過高婶熬、電壓過高等)則向系統(tǒng)進(jìn)行發(fā)出告警信息剑勾。在開發(fā)環(huán)境中只有五十多個(gè)設(shè)備被安全(不會(huì)產(chǎn)生什么告警)的放在機(jī)房中供開發(fā)和測(cè)試使用,這種測(cè)試環(huán)境根本無法模擬實(shí)際環(huán)境赵颅。系統(tǒng)在測(cè)試中沒有出現(xiàn)過什么大的問題虽另。然而,在實(shí)際的運(yùn)行環(huán)境中饺谬,偶爾發(fā)現(xiàn)系統(tǒng)的一個(gè)模塊功能會(huì)喪失洲赵,失去告警接收的功能。在本地測(cè)試的時(shí)候從來沒有發(fā)現(xiàn)過類似問題商蕴,但是部署在實(shí)際環(huán)境中就會(huì)有發(fā)生。我們不可能實(shí)時(shí)的24小時(shí)對(duì)系統(tǒng)進(jìn)行人工監(jiān)控芝发,那么該如何定位功能喪失的原因呢绪商?這時(shí),對(duì)于系統(tǒng)日志來說就“是時(shí)候表演真正的技術(shù)了”(PS:肯定是個(gè)王者級(jí)別選手)辅鲸。
后來通過系統(tǒng)日志分析之后格郁,發(fā)現(xiàn)功能的喪失是由于大量的告警同時(shí)上報(bào),導(dǎo)致數(shù)據(jù)庫鏈接不夠用独悴,產(chǎn)生大量connectionTimeout進(jìn)而導(dǎo)致OOM異常,這個(gè)模塊徹底死了例书。可見刻炒,日志對(duì)于運(yùn)行環(huán)境中系統(tǒng)的監(jiān)控和問題定位是至關(guān)重要的决采,在系統(tǒng)設(shè)計(jì)、開發(fā)和實(shí)現(xiàn)的過程中必須時(shí)刻注意著log的輸出坟奥,這將會(huì)對(duì)于日后的系統(tǒng)監(jiān)控和異常分析起至關(guān)重要的作用树瞭!
那么拇厢,在系統(tǒng)日志實(shí)現(xiàn)上應(yīng)該注意哪些問題呢?如何做到不濫用日志晒喷、減少大量無用信息孝偎,讓日志記錄足夠精簡(jiǎn)明了?
第一:系統(tǒng)的哪些運(yùn)行信息凉敲,需要進(jìn)行日志記錄衣盾?
1、功能模塊的啟動(dòng)和結(jié)束(完整的系統(tǒng)由多個(gè)功能模塊組成爷抓,每個(gè)模塊負(fù)責(zé)不同的功能势决,因此需要對(duì)模塊的啟動(dòng)和結(jié)束進(jìn)行監(jiān)控。是否在需要的時(shí)機(jī)正常加載該模塊废赞?又是否在退出結(jié)束的時(shí)候正常完成結(jié)束操作徽龟,正常退出?)
2唉地、用戶的登錄和退出(哪位用戶在什么時(shí)間通過什么IP登錄或退出了系統(tǒng))
3据悔、系統(tǒng)的關(guān)鍵性操作(數(shù)據(jù)庫鏈接信息、網(wǎng)絡(luò)通信的成功與失敗等)
4耘沼、系統(tǒng)運(yùn)行期間的異常信息(NPE极颓、OOM以及其他的超時(shí)、轉(zhuǎn)換異常等)
5群嗤、關(guān)鍵性方法的進(jìn)入和退出(一些重要業(yè)務(wù)處理的方法菠隆,在進(jìn)入和結(jié)束的時(shí)候需要有日志信息進(jìn)行輸出)
……
……
第二:什么樣的日志格式,有助于開發(fā)者進(jìn)行明確的分析狂秘?
日志信息要求必須精簡(jiǎn)骇径,過多的無用信息不但對(duì)系統(tǒng)分析起不到什么作用,反而會(huì)增加系統(tǒng)的運(yùn)行壓力者春、消耗系統(tǒng)的運(yùn)行資源破衔。這里有個(gè)日志模板,可供參考钱烟。
時(shí)間-[線程名][日志等級(jí)]-日志輸出位置(全類名晰筛,可以精確到方法名):日志信息
2013-09-04 10:49:20.296-[Thread-initRedis21504][INFO]-com.shanghai.LoginController.initLogInfo:LingMing[User] is logining
日志信息的內(nèi)容可以根據(jù)不同的情況進(jìn)行設(shè)計(jì),但是前面的時(shí)間到日志輸出位置必須要保證完整性拴袭,這樣才有利于日志的分析读第。
第三:如何對(duì)不同的日志信息進(jìn)行等級(jí)劃分?
日志等級(jí)通常分為四種:DEBUG拥刻、INFO怜瞒、WARN、ERROR
DEBUG:系統(tǒng)調(diào)試信息般哼,通常用于開發(fā)過程中對(duì)系統(tǒng)運(yùn)行情況的監(jiān)控盼砍,在實(shí)際運(yùn)行環(huán)境中不進(jìn)行輸出尘吗。
INFO:系統(tǒng)運(yùn)行的關(guān)鍵性信息,通常用于對(duì)系統(tǒng)運(yùn)行情況的監(jiān)控浇坐。
WARN:告警信息睬捶,系統(tǒng)存在潛在的問題,有可能引起運(yùn)行異常近刘,但此時(shí)并未產(chǎn)生異常擒贸。
ERROR:系統(tǒng)錯(cuò)誤信息,需要進(jìn)行及時(shí)處理和優(yōu)化觉渴。
這里列出來了各種等級(jí)的日志信息介劫,在開發(fā)過程中哪些信息需要設(shè)置為哪種等級(jí)有賴于開發(fā)者的自己判斷,這里只是給個(gè)建議案淋。
日志的管理是系統(tǒng)很重要的一部分座韵,千萬不可忽略其重要性。完整的日志將會(huì)在系統(tǒng)維護(hù)中起著異常重要的作用踢京,就好像磨刀不誤砍柴工一樣誉碴。日志易 作為國內(nèi)實(shí)時(shí)的日志分析產(chǎn)品,支持本地化部署瓣距,可對(duì)系統(tǒng)進(jìn)行分析黔帕,靈活、強(qiáng)大蹈丸、便捷成黄。選擇專業(yè)的日志分析產(chǎn)品日志易,對(duì)系統(tǒng)分析起來就能達(dá)到事半功倍的效果逻杖。
開發(fā)者必須要明白日志的價(jià)值和意義奋岁,萬萬不可忽略和輕視,并且在系統(tǒng)設(shè)計(jì)之初就建議制定一份關(guān)于日志管理的說明規(guī)范荸百,明確哪些方法闻伶、操作必須進(jìn)行日志輸出,在進(jìn)行開發(fā)過程中也要嚴(yán)格遵守管搪。
至于日志輸出的實(shí)現(xiàn),不同的開發(fā)語言有不同的日志管理框架铡买,同一種語言也有很多不同的日志管理方案更鲁,這里就不再進(jìn)行贅述。本文目的就是想讓開發(fā)者看到日志的重要性奇钞。