■ 中移互聯(杭州)科技有限公司 闞宗挺 劉順宇
編者按:網絡信息迅速發展的今天,企業在面對用戶劇增的實際場景時,單節點的接口服務已無法滿足劇增的訪問量,這時就需要用到分布式架構:企業將相同的服務發布到不同的服務器上。但在分布式架構中日志的管理就成了一個必須要解決的問題,分散式的日志結構難以迅速定位查詢目標,因此要用到分布式日志服務來對我們的日志進行統一管理。
在項目中通常會遇到并發量突增時導致系統不可用而采用分布式架構的情況,日志此時也要進行統一管理,方便查詢定位。在進行統一管理時,如果集群服務器有許多臺,那么這么多臺服務器同時向統一日志系統發送數據,將導致系統的IO效率特別底下,存在數據丟失的情況。為解決該問題,加入一個二級日志儲存策略,將部分服務器日志先通過緩存傳入二級儲存,再通過二級儲存通過緩存傳入統一日志系統,這樣統一日志系統的總連接數大大減少,
IO效率大大提高。另外,為了保證總系統的穩定性,業務和日志服務之間必須是解耦的,因此通過監聽日志文件而非采用遠程寫入日志的形式。日志服務器宕機對業務無干擾,某個業務服務器宕機對日志服務也沒有影響,日志服務可以繼續收集其他服務器的日志。
本系統包括三個需求模塊,分別是組件通信模塊、分級采集日志模塊、日志管理模塊、日志查詢分析模塊。
應用服務器和二級儲存,二級儲存和統一日志服務之間都是通過遠程過程調用來實現的。在數據傳輸時,會把待傳數據放到緩沖中,再進行發送。
此模塊主要是為了解決集群中的應用服務器過多同時進行數據傳輸時造成統一日志服務端負載過大導致系統崩潰,在應用服務器和日志服務儲存端添加一個二級儲存作為一個中間傳輸間,二級服務器與應用服務器之間是一對多關系,這樣通過增加二級緩存數可避免上述系統崩潰的情況,而且當某個應用服務器長時間未發送日志時,會在其對應的二級存儲上發出日志警報,幫助查找原因。
對生產日志進行日常監控,并提供實時預警,此外為了實現系統分權限、分角色管理,還應用了PaaS下的多租戶框架,以此來實現不同用戶組對不同日志的操作和監控。
日志查詢分析是對統一日志服務中的日志進行錯誤回溯,數據挖掘并提取有用的信息,可以用來監測接口的性能以及給用戶畫像。
在本文介紹的統一日志管理總體上采用分層的思想建立二級儲存系統,同時為了提高IO效率,會通過緩存來減少單位時間傳輸次數。通過Elasticsearch技術來實現日志的持久化儲存和全文檢索。可以用來處理PB級的數據,查詢效率高。為了避免日志儲存并發大的問題可以配置Elasticsearch集 群來實現。當我們的服務相當多時,單節點儲存的效率是相當低的,因此我們添加了一個二級儲存策略,將不同的服務日志分開持久化到二級日志服務中,再將二級服務中的日志投遞到服務日志中隨后交給Elasticsearch處理,圖1是整體設計架構圖。

圖1 總體設計

圖2 日志通用模型

圖3 日志采集架構
在進行分布式日志系統中,沿用之前的通用的日志模型是不準確的,因為普通的日志模型一般包括:日志級別、日志生成時間、日志所在類名、日志內容。在分布式系統中,我們應該在普通日志模型的基礎上加上服務器的IP以及日志的文件路徑。這樣在進行查找錯誤時,可以快速定位到哪個項目的哪個類下發生錯誤,便能快速的對項目進行維護,日志通用模型如圖2所示。
日志采集采用無侵入式的方式來采集日志,用戶按照原來的方式通過配置將日志輸出到該服務器特定的文件中,采集時通過在服務器上安裝日志監聽插件進行監聽特定文件夾下的文件信息是否發生變化,把增加的部分數據采集到該插件中,通過該插件的投遞功能將緩存的日志投遞到遠程的日志服務中,這樣通過在每個服務器中加入日志監聽插件來實現日志的采集和統一儲存,架構如圖3所示。
不同的日志儲存方案可以提高日志查詢的效率,因此我們可以采用Elasticsearch對日志進行儲存,儲存之前將接受到的文件通過日志的模型字段進行內容映射,并通過Elasticsearch的分布式實時文件存儲技術將每一個字段都編入索引,使其可以被搜索。查詢分析時可以通過Elasticsearch進行全文檢索查詢。因其每個字段都已加入索引,查詢效率比較高。然后對查詢到的數據進行數據清洗、篩選、展示。架構如圖4所示。
(1) 監控模塊
監控模塊用于顯示日志系統一段時間內的性能狀態,如:吞吐量,并發量,日志采集效率等,通過sql語句每隔一段時間進行查詢一次這些狀態信息,將計算結果用柱狀圖或儀表盤的形式顯示在Web上,用于管理人員分析,起到監控預防作用。
(2)告警模塊
當使用sql進行查詢監測日志的性能超出了管理人員規定的所能接受的最大范圍時,會通知管理人員進行排查問題,如圖5所示。
(3)多租戶模塊
對于查詢系統為了維護日志系統的安全,可以對不同的地區分配不同的組,將相關查詢人員分配到該人員對應地區對應的組上,通過給不同的組增加相應的權限來約束管理人員。比如某些地區可以不用了解系統的性能,可以在相應的組上將相應的權限按鈕關閉。亦需要設立一個超級管理員組對系統的整體進行調控,圖6為架構分析圖。

圖4 日志查詢架構

圖5 日志監控告警模塊架構

圖6 日志多租戶模塊架構

圖7 日志分析架構
日志分析是為了更好的能夠幫助企業掌控系統運行狀況,以及分析用戶行為特征,以便更好地優化系統,提升用戶體驗。
系統同時支持離線和實時分析。兩種方式都提供SQL的思想來提供查詢分析服務。在日志分析模塊應用層通過報表和儀表盤的方式來實現安全診斷與分析。圖7為數據處理架構圖。
進行測試的應用服務器均在linux服務器進行壓力測試,目的是為了測試單節點儲存與增加二級儲存之間的性能差異,以及通過統一儲存后查詢的效率。
經測試,可以得出以下結論二級儲存日志收集的采集效率明顯比單節點的收集效率高,而且在并發量達到2000時單節點儲存出現了數據丟失的問題。
用戶在通過日志查詢查找問題時,直接通過查詢頁面進行統一查詢即可,追蹤問題效率更高。由此可見該種日志采集方案具有更高的性能和可用性。