1. 程式人生 > >鷹眼:海量級分散式日誌系統上雲的架構和實踐

鷹眼:海量級分散式日誌系統上雲的架構和實踐

​導語 | 鷹眼是由騰訊PCG技術運營部負責的海量級分散式實時監控和日誌分析系統,為響應公司戰略要求,將原先的業務遷移上雲,最終產生了可喜的變化。本文將介紹分散式日誌系統(鷹眼)的整體上雲方案,希望與大家一同交流。

一、鷹眼平臺介紹

 

鷹眼是由PCG技術運營部負責的海量級分散式實時監控和日誌分析系統,支援多語言的上報,域名為:http://log2.oa.com/

鷹眼的資料上報是通過ATTA提供的,ATTA支援多語言的上報(JAVA,Python,C++等),上報之後,鷹眼從ATTA系統拉取資料最終寫入到ES,通過ES的倒排索引機制,快速查詢功能,寫入功能等。

使用ES的倒排索引機制,百億資料秒級查詢返回的能力,鷹眼提供了以下功能:

1. 實時日誌查詢服務資料

實時日誌查詢服務資料上報到ATTA之後,開發可以通過鷹眼及時查詢到日誌,定位問題,運維可以通過鷹眼提供的資料統計介面實時查詢到業務的執行情況。

2. 資料分析能力

鷹眼資料入庫後,使用者可以通過API直接呼叫,進行OLAP分析。

3. 錯誤日誌告警服務

程式如果出現錯誤之後,可以按照鷹眼規範來上報錯誤日誌,鷹眼進行分詞,根據不同的錯誤碼進行分鐘級別的告警。

4. grafana實時分析告警

通過grafana對上報到鷹眼的資料進行實時的分析告警。(由於ES不支援大併發查詢,所以無法對超大資料進行實時分析)

二、上雲的背景

 

公司戰略調整,成立新的雲事業群,內部成立“技術委員會”,啟動“開源協同”和“業務上雲”的兩大戰略方向。

在架構演進中,鷹眼團隊上雲能得到什麼好處?上雲的價值是什麼?

1. 業務價值 

  • 聚焦業務,提升研發效率 ;

  • 加快技術換代,保持技術優勢(傳統網際網路 vs 雲時代);

  • 使用更好的雲開源元件服務(可用性、穩定性、文件API…);

  • 計算資源重用,彈性伸縮,優化成本 ;

  • 標準化CI/CD流程。

2. 工程師價值 

  • 擴寬技術視野,避免閉門造車 ;

  • 掌握的技能更有價值 ;

  • 輸出優秀元件到雲,提高影響力。

3. 騰訊雲價值 

  • 為客戶輸出業務上雲經驗 ;

  • 幫助騰訊雲打磨雲元件。

三、元件上雲架構選型

 

為了保證業務的延續性和架構的演進,資料匯入過程中的主體流程並沒有太大改變,Kafka直接使用到雲上的CKAFKA,ES直接使用到雲上的ES。

ES和Kafka直接使用雲上元件,其他元件需要進行重構。

1. 重構LogSender

生產者程式寫入Kafka效能瓶頸特別大,高峰期丟資料特別嚴重。

生產者程式寫資料流程:讀取BOSS訂閱->IP解析->寫入Kafka。

(1)IP解析效能瓶頸

之前生產者程式是C++版本,經過列印日誌,發現高峰期IP解析耗時特別嚴重。排查程式碼,發現IP解析加鎖了。所以高峰期丟資料特別嚴重。解決方法是:將IP解析改為二分查詢演算法來進行IP定位,然後取消鎖,解決。

(2)Kafka效能瓶頸問題

由於我們生產者程式,一個程式會讀取很多很多個topic,然後寫入到Kafka,我們嘗試,使用一個producer和多個producer傳送,效能都提升不起來。

經過原始碼排查,發現Kafka傳送時,會根據topic分割槽來鎖佇列,當這個佇列滿的時候,就會發送一批訊息出去。所以解決方案為,每個BOSSID應該有獨立的傳送客戶端。

  • 資料量大的,有多個Kafka客戶端

  • 資料量小的一批topic,可以共用一個kafka生產者。

優化之後:在資料量非常大的時候,因為程式效能原因,會導致一分鐘單節點最多隻能處理13萬條左右的資料。改進後, 單節點能處理55w條左右的資料。  效能提升4倍。

2. Kafka選型

Kafka整體來說,高版本比低版本支援的功能更多,如事務,磁碟間的資料轉移等,寫入效能並不會下降。此處選型選的是最高版本。

當然CKAFKA並沒有給我們選擇版本的機會,客戶端寫入的時候還是得注意下和Kafka服務端版本一致,避免不必要的問題。

如低版本的客戶端寫入高版本的Kafka時,如果使用資料壓縮,則服務端接受到資料後,會進行解壓,然後再按照對應的格式壓縮(如果版本一致,則不會有此動作),增加服務端的執行成本。

Kafka上雲之後,單機效能能達到400MB/s,而我們自建的Kafka,單機效能最多達到100MB/s,效能提升4倍。

3. 重構Hangout

ES寫入部分,業界有很多元件,最出名的是Logstach,由於效能不夠,我們自己重新開發了一套讀取Kafka寫入ES的元件。

核心優化點如下所示:

由於磁碟IO的大幅減少,能在極限優化下繼續提升效能2倍以上。整體來說,ES寫入提升效能6倍左右。

4. ES選型

ES低版本支援TCP寫入和HTTP寫入兩種方式,高版本只支援一種HTTP寫入方式。實測發現有如下區別:

  • TCP寫入比HTTP更快;

  • HTTP寫入更穩定一點,TCP寫入是直接寫到節點上面的,容易出現負載不均衡,HTTP更容易通過資料節點節點進行負載均衡。

因此我們採用了雲版本ES 6.8.2。 

上雲之後的效果:

  • 平均寫入1TB資料,雲下需要 80核,256G記憶體 12TB磁碟 (BX1機型);

  • 雲上需要  3 * (16核 64GB 5TB硬碟 );

  • 平均節省資源1倍左右。

四、上雲之後的變化

ES/Kafka上雲之後,統計有50多個ES叢集,12個Kafka叢集.

1. 工作量的減少

如果不上雲的話,搭建這些叢集平均一個ES叢集需要20臺機器,從申請機器,到機器初始化,磁碟RAID,安裝ES,平均每個ES需要3-4人/天,則搭建成本就已經需要200多人(62*3-4)/天了,還沒有談到叢集運維成本,遠遠超過鷹眼團隊的人力。

2. 成本的減少

上雲之後,伴隨著各個元件的優化,整體效能提升至少2-3倍,所需要的資源同比會減少2-3倍、每年節省成本至少2kw。

3. 工作更加聚焦

上雲之後:

  • 鷹眼聚焦於寫入效能優化,大大提升了寫入效率;

  • 監控體系的建立,資料上報到ATTA之後,就進行資料對賬,及時發現數據的延遲給出告警;

  • 在新功能開發上,基於ES支援隔天查詢,如果當日資料暴漲之後,通過建立備份索引的機制增大寫入量。

 

五、後續架構演進

 

1. 監控體系建設

核心模組既要有日誌,也要有監控,不同模組的監控維度對應起來,讓核心的模組,日誌和監控都有,當業務出現異常時,及時調出發生異常的基礎資料(如CPU/Mem等),指標資料,日誌資料等進行完整的監控體系的建設。

2. 架構持續升級

目前自研Hangout寫入只能保證at least once,但是無法保證exactly once。嘗試通過flink的checkpoint機制,保證資料鏈路的完整