所有的真相都在你的日誌中
因為工作涉及管理兩個企業內部的財務系統的運維工作,兩個業務系統都是面對企業內部員工的,企業有 1 萬多員工,所以日誌的數量雖然比不上互聯網應用的數量,但多台伺服器多個實例,要找日誌分析問題時,會有一些頭疼,總結了幾點經驗,用於以後的日誌管理工作。
TL;DR#
- 使用日誌聚合工具,將多個節點日誌聚合
- 使用 Logrotate
- 明確日誌的等級,warn,info,debug
- 與外部系統的交互都需要明確記錄
- 使用 TraceID 追蹤事件
使用日誌聚合工具#
黑匣子(black box),是飛機專用的電子記錄設備之一,又稱為航空飛行記錄器。裡面裝有飛行數據記錄器和艙聲錄音器,飛機各機械部位和電子儀器儀表都裝有傳感器與之相連。它能把飛機停止工作或失事墜毀前半小時的有關技術參數和駕駛艙內的聲音記錄下來,需要時把所記錄的參數重新放出來,供飛行實驗、事故分析之用。
當用戶量到達成一定量,業務系統非常關鍵時,一般會將應用運行多個節點,運行在不同伺服器中,做高可用,這樣日誌會分散在不同的伺服器上,如果要查找某條日誌,需要在多台伺服器中進行查找,非常麻煩,使用日誌聚合工具則可以解決這個問題。
目前使用Graylog來做多個日誌的聚合。Graylog 有個服務端,其他應用通過 API 將日誌發送過來,介面可以是 syslog 或者 graylog 提供的讀取文件日誌的程式,graylog-collector-sidecar,這樣現有的業務應用無需做任何變更。
使用 ElasticSearch 作為檔案存儲和搜索工具,使得日誌的檢索變得非常方便快捷,讓查找日誌變成一個非常輕鬆的活。
除了使用 Graylog,還有ELKstack
使用 Logrotate#
這裡的 Logrotate 既指 Linux 下的 logrotate 工具,也指日誌輪詢的方式,你可以在應用程式中輕鬆實現日誌的滾動,每當日誌檔案到達指定大小則將該日誌改名,創建新日誌檔案;只保留一定數量的日誌檔案在應用伺服器中,將歷史日誌檔案自動刪除。另外如果在 linux 伺服器中,也可以使用 Logrotate 命令來自動壓縮日誌檔案。
使用日誌等級#
打印日誌的時候,針對不同的事件重要性,區分打印不同的事物等級,在收集到 Graylog 中後,可以區分不同的事件等級後,可以發送郵件提醒相關操作,在檢索時也能快速定位。
記錄與外部系統的交互#
如果系統涉及與外部其他系統進行交互,做的介面需要記錄與其他系統交互的資訊,收到請求為什麼內容,響應是返回什麼內容,在後續追蹤排查問題時,才有蹤可查。
創建一個維護的 TraceID#
隨著微服務架構流行,一個事件需要涉及在系統多個組件中進行處理,那麼在事件發生時,創建一個唯一的 TraceID,在日誌收集完成後,根據這個 TraceID 可以在不同的組件中找到該事件的處理過程。