日志數據的重要性(轉自知乎:日志易)

想分析日志價值,你需要了解系統日志數據的重要性

與一個簡單的算法不同,一個合格的系統不僅僅要求具有運行的高效和計算的準確,同時又必須兼顧穩定性、可靠性。其次,對于開發人員來說,又必須具有可拓展性和可維護性。各方面都必須很完善,這樣的一個系統才能稱得上是一個合格完美的系統。簡單的站在開發人員的角度分析,比較重視的是系統的可維護性,畢竟開發人員直面的是系統的代碼實現。

一個代碼結構冗雜、模塊設計混亂、命名“異想天開”的系統對于開發者來說簡直到了咬牙切齒的地步!不能忍!堅決不能忍!所以在平時的開發過程中就要時刻注意著系統的實現機制,從宏觀設計和微觀實現上面同時進行精雕細琢。前幾天看到阿里巴巴出的《Java 開發規范》,建議大家看看。

說到可維護性,不得不涉及到系統監控和Bug的快速定位。

在開發階段還比較容易對系統進行監控,一般都會在本機上對系統的運行進行實時監控。而對于bug的定位,開發者都會熟練使用debug功能進行bug定位,更有甚者通過多年的開發經驗根據系統的異常信息直接能分析出來Bug產生的原因、位置以及解決方案。但是,系統畢竟是人開發的,我們無法預料到在運行中會出行什么想不到的問題,即使在各種測試中沒有出現,但是也無法保證不會出現一些意想不到的問題。那么在系統運行期間如果產生問題出現異常且無法在測試環境中重現,我們又該如何快速、準確地對bug進行定位分析和解決 呢?

舉個親身的例子吧:公司一套設備監控系統,用來對上萬個節點進行實時監控,如果該節點有異常(比如溫度過高、電壓過高等)則向系統進行發出告警信息。在開發環境中只有五十多個設備被安全(不會產生什么告警)的放在機房中供開發和測試使用,這種測試環境根本無法模擬實際環境。系統在測試中沒有出現過什么大的問題。然而,在實際的運行環境中,偶爾發現系統的一個模塊功能會喪失,失去告警接收的功能。在本地測試的時候從來沒有發現過類似問題,但是部署在實際環境中就會有發生。我們不可能實時的24小時對系統進行人工監控,那么該如何定位功能喪失的原因呢?這時,對于系統日志來說就“是時候表演真正的技術了”(PS:肯定是個王者級別選手)。

后來通過系統日志分析之后,發現功能的喪失是由于大量的告警同時上報,導致數據庫鏈接不夠用,產生大量connectionTimeout進而導致OOM異常,這個模塊徹底死了。可見,日志對于運行環境中系統的監控和問題定位是至關重要的,在系統設計、開發和實現的過程中必須時刻注意著log的輸出,這將會對于日后的系統監控和異常分析起至關重要的作用!

那么,在系統日志實現上應該注意哪些問題呢?如何做到不濫用日志、減少大量無用信息,讓日志記錄足夠精簡明了?

第一:系統的哪些運行信息,需要進行日志記錄?

1、功能模塊的啟動和結束(完整的系統由多個功能模塊組成,每個模塊負責不同的功能,因此需要對模塊的啟動和結束進行監控。是否在需要的時機正常加載該模塊?又是否在退出結束的時候正常完成結束操作,正常退出?)

2、用戶的登錄和退出(哪位用戶在什么時間通過什么IP登錄或退出了系統)

3、系統的關鍵性操作(數據庫鏈接信息、網絡通信的成功與失敗等)

4、系統運行期間的異常信息(NPE、OOM以及其他的超時、轉換異常等)

5、關鍵性方法的進入和退出(一些重要業務處理的方法,在進入和結束的時候需要有日志信息進行輸出)

……

……

第二:什么樣的日志格式,有助于開發者進行明確的分析?

日志信息要求必須精簡,過多的無用信息不但對系統分析起不到什么作用,反而會增加系統的運行壓力、消耗系統的運行資源。這里有個日志模板,可供參考。

時間-[線程名][日志等級]-日志輸出位置(全類名,可以精確到方法名):日志信息

2013-09-04 10:49:20.296-[Thread-initRedis21504][INFO]-com.shanghai.LoginController.initLogInfo:LingMing[User] is logining

日志信息的內容可以根據不同的情況進行設計,但是前面的時間到日志輸出位置必須要保證完整性,這樣才有利于日志的分析。

第三:如何對不同的日志信息進行等級劃分?

日志等級通常分為四種:DEBUG、INFO、WARN、ERROR

DEBUG:系統調試信息,通常用于開發過程中對系統運行情況的監控,在實際運行環境中不進行輸出。

INFO:系統運行的關鍵性信息,通常用于對系統運行情況的監控。

WARN:告警信息,系統存在潛在的問題,有可能引起運行異常,但此時并未產生異常。

ERROR:系統錯誤信息,需要進行及時處理和優化。

這里列出來了各種等級的日志信息,在開發過程中哪些信息需要設置為哪種等級有賴于開發者的自己判斷,這里只是給個建議。

日志的管理是系統很重要的一部分,千萬不可忽略其重要性。完整的日志將會在系統維護中起著異常重要的作用,就好像磨刀不誤砍柴工一樣。日志易 作為國內實時的日志分析產品,支持本地化部署,可對系統進行分析,靈活、強大、便捷。選擇專業的日志分析產品日志易,對系統分析起來就能達到事半功倍的效果。

開發者必須要明白日志的價值和意義,萬萬不可忽略和輕視,并且在系統設計之初就建議制定一份關于日志管理的說明規范,明確哪些方法、操作必須進行日志輸出,在進行開發過程中也要嚴格遵守。

至于日志輸出的實現,不同的開發語言有不同的日志管理框架,同一種語言也有很多不同的日志管理方案,這里就不再進行贅述。本文目的就是想讓開發者看到日志的重要性。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容