導語 | 鷹眼是由騰訊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機制,保證數據鏈路的完整性。