海量結構化日志分析系統


背景

日志,角色不同,出發點和認識的角度也不同


RD使用日志,首先是為了調試程序,當程序上線后,日志是為了記錄err和trace。

PM可以通過日志分析,可以得出業務指標相關的統計情況。

日志的作用大致有三:異常、trace、統計。

 

日志使用的痛點

使用日志時大部分的場景或特點如下:


1.日志為純文本,即可讀。

2.日志分散在各個機器上,或者同步到某一台機器。

3.某某發現一個問題,讓某某去查log。

 

這里有幾個問題,或者說提高點

1.文本冗余度太大,浪費資源,如果轉換為二進制,預估有5倍的收益。

2.日志分散,查找效率低,即使集中,在沒有具體時間點情況下,掃描日志會很慢。

3.日志分析難度大,誰寫的日志誰來查,查到和肉眼找到還差一步...

 

目標

所以,我們可以設計這樣一個日志系統

1.支持海量數據的日志存儲(TB二進制)

2.日志二進制、結構化

3.查詢速度快,難度低

 

設計

 

讀寫日志

日志查詢過程經分解和總結共性后,幾乎是下邊三種情況


1.K-V查詢,比如基於某個消息ID,查詢一條記錄。

2.集合查詢,比如查詢某個用戶的消息記錄。

3.集合range查詢,比如查詢某個用戶0點到1點消息記錄。

那么,ssdb是非常適合這三個需求的。


日志系統具有寫多讀少的特定,再基於磁盤存儲的業界主流方案,LSM是適合的,

而SSDB的存儲依賴的leveldb正好屬於LSM系。

 

日志二進制

一個大的日志是沒辦法人用肉眼掃描的,所以不如使用二進制代替以節約空間,但是日志

會隨着需求的變化,格式也可能會變化,所以必須考慮二進制向文本反序列化時的

兼容性問題,那么protobuf是非常適合這個需求的。

 

海量日志

 

Sharding

業務的sharding,一個業務對應N個存儲服務,N個業務對應N*N個存儲服務,單一存儲服務內只

承載一個業務。

磁盤的sharding,一塊盤對應N個存儲服務,N塊磁盤對應N*N個存儲服務。

        0    1      2     3     4

  db    |_____|_____|_____|_____|

        0      1t              4t

disk    |_______|_______________|

Resharding

擴容時增加存儲服務即可。

縮絨時刪除存儲服務即可。

 

Failover

存儲服務掛了后重啟就可以。

由於存儲的是日志,在機器發生故障后是允許丟的,所以數據不做遷移,只需將相應的服務等比例

遷走即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM