閱讀25 返回首頁    go 阿裏雲 go 技術社區[雲棲]


轉|解讀係統日誌的重要性

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

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

可視化1.jpg

看暈

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

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

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

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

圖片.jpg

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

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

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:係統錯誤信息,需要進行及時處理和優化。

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

互聯網+.jpg

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

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

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

背景1.jpg

日誌易的核心價值:

日誌易產品做得像Google搜索引擎一樣強大、靈活、易用,實現對運維日誌及業務日誌進行實時采集、搜索、分析及可視化等,用於運維監控、安全審計、業務數據分析,最終發掘出數據價值。目前,日誌易產品已成功應用於金融、能源、運營商及互聯網等諸多行業。

移除點擊此處添加圖片說明文字

本文來自:https://blog.csdn.net/huaishuming/article/details/51900525

如有版權問題,可私信小編哦~

最後更新:2017-08-13 22:29:17

  上一篇:go  嵌入式ARM11處理器特點分析
  下一篇:go  物聯網消費時代 車載穿戴將實現人車合一