概述
背景:在互聯網的應用中,日志是個非常重要的數據,因為互聯網項目往往是要求 7*24 不間斷運行的,所以能獲取到監控系統運行的相關日志數據並進行分析就顯得很有必要。
日志的種類:
- 系統日志:也就是由開發人員在系統后台代碼中加入的日志輸出語句,如果是JAVA語言,通常都是采用log4j的框架技術進行一些日志語句的輸出。這類日志對了解系統的運行情況有一定的幫助,當系統出現異常情況,能借助這些信息來分析問題。但這類日志信息的輸出內容是由開發人員通過編寫相應輸出代碼產生的,並不是一種架構級的日志輸出方案。所以這類輸出信息並不全面,不能細致地把系統的運行信息進行輸出。
- 埋點日志:簡單來說日志埋點就是在現有的系統中集成相應的代碼,捕獲系統特定的事件,輸出一些相關的信息 。
根據目前實際的使用來看,系統日志一般是開發人員比較關注,多用於代碼優化和調試。而網站運營人員和業務人員更關注的數據是通過埋點產生的日志分析出來的。所以也應運而生了這一類的網站日志分析系統。由於互聯網的網站的訪問量都比較大,所以這類日志的采集和處理往往采用大數據的一些處理技術。
系統架構
從架構的角度來看主要從兩個方面進行分析
一. 日志埋點的方式
- 客戶端(前端):支持 iOS、安卓、Web/H5、微信小程序,主要用於分析 UV、PV、點擊量等基本指標。例:下圖是Web端的埋點技術圖:
- 服務器日志:采集后端業務服務器打印的日志。更強的采集能力,更好的支撐精細化分析場景。
現在的網站系統大都采用微服務架構,如下圖:
從這樣的架構中,能看到每次請求是通過一個調用鏈才能完成,所以運維人員會關注每個鏈的調用執行時間,通過這個可以了解系統后台的一些性能情況,通常會采用一些中間件來完成這些性能數據的采集,比如 Skywalking 采集性能數據的架構圖 :
而從業務角度來看,后端能拿到每個服務的請求參數和服務處理完成后返回的響應信息,基於這一點可以做一些業務事件的實時統計及實時的異步處理工作。這個可以通過SpringMVC的相關機制來實現,例如:
二. 日志采集和處理的方式
離線處理方案
實時處理方案: