查詢平均提速 700%,奇安信基於 Apache Doris 升級日誌安全分析系統
:
數智時代的到來使網路安全成為了不可忽視的重要領域。奇安信作為一家領先的網路安全解決方案領軍者,致力於為企業提供先進全面的網路安全保護,其日誌分析系統在網路安全中發揮著關鍵作用,透過對執行日誌資料的深入分析,能夠對漏洞和異常行為生成關鍵見解,幫助企業建立有效的防禦策略。本文將深入探討奇安信在網路安全與日誌分析解決方案的關鍵優勢,瞭解基於 Apache Doris 構建的全新一體化日誌儲存分析平臺如何實時監測和分析日誌事件,加強對可疑活動的追蹤與應對,提升系統安全性與快速響應能力。
作者|奇安信 服務端技術專家 舒鵬
奇安信是中國企業級網路安全市場的領軍者,專注於為政府和企業使用者提供新一代網路安全產品和服務。目前核心產品天擎終端安全系統在國內已有 4000 萬政企使用者部署、全國部署伺服器超過 100 萬臺、服務超 40 萬大型機構。作為網路安全國家隊,奇安信立志為國家構建安全的網路空間,在終端安全、雲安全、威脅情報、態勢感知等領域的技術研發持續領先。
隨著現代企業數字化轉型的不斷深化,大資料、物聯網、5G 等創新技術的廣泛應用加速了企業的數字化轉型步伐,這使得原先的網路邊界被打破,多源多樣的終端裝置成為了新的安全邊界。
網路安全系統的防禦效能與日誌分析密不可分,當網路裝置、作業系統以及應用程式在執行時,會產生大量的執行日誌,其中蘊涵了豐富的資料價值。最大化地利用執行日誌資料能夠有效檢測內部系統的安全風險、還原攻擊路徑、回溯攻擊入口等,可以進一步提升系統安全性、保障企業網路安全,因此日誌分析系統在其中發揮著不可或缺的作用。
本文將介紹奇安信在網路安全場景中,基於 Apache Doris 進行架構升級迭代並建設全新一體化日誌儲存分析平臺的實踐經驗。
早期架構痛點與需求
最新的日誌會被寫入實時數倉,安全分析師可以透過分析平臺對實時數倉中的最新資料進行互動式查詢,從而進行攻擊研判和追蹤溯源等安全分析工作。另外,離線數倉用於儲存歷史資料,以支援長週期資料探勘的離線分析。
在以上日誌資料平臺中,日誌資料的寫入速度與查詢分析效率對上層業務人員進行實時安全事件監控和分析至關重要,這也是當前我們所面對的最主要痛點。
一方面,每天所生產的安全日誌資料達到千億級,寫入壓力很大。最初我們選擇使用某 Apache Doris 的 Fork 版本來儲存日誌資料,但在實際應用中,隨著每天新增日誌量的不斷增長,入庫速度逐漸降低、叢集寫入壓力過大、高峰期資料積壓嚴重,對叢集穩定性造成很大影響,並且資料壓力較高時、查詢效率也達不到有效果的保證。隨後我們對叢集進行多次擴容,從 3 節點逐步擴容到 13 節點,儘管機器成本已經大幅超過預期、但寫入效率並沒有發生本質的改善。
另一方面,業務人員在進行安全日誌分析時,經常需要對文字欄位(如 URL,payload 等)進行關鍵字匹配。在原系統中只能透過 SQL LIKE 進行全量掃描和暴力匹配,整體查詢效能不佳,千億級數量的資料表查詢耗時接近分鐘級甚至達到數百秒,即便按照時間區間過濾大量資料後、查詢耗時仍在數秒到數十秒。一旦遇到併發查詢效能還會進一步惡化,很難滿足日常安全分析的需求。
除寫入和查詢效率以外,運維監控也是我們的痛點之一,該廠商提供的視覺化運維繫統需要商業 License 授權,對於開源社群使用者不友好,叢集維護處於原始手動狀態。
架構選型與升級的思考
為了解決過去版本的痛點、滿足更高效實時的日誌分析訴求,我們亟需對早期系統升級改造。同時面向安全日誌分析場景,我們也對新日誌分析平臺的架構提出了更高的要求:
-
寫入效能 :系統一方面需要支援海量病毒查殺事件等資料實時寫入與儲存,以滿足分析時效性的要求,另一方面需要基於日誌資料 Schema Free 特點支援豐富資料型別的寫入與變更。
-
查詢效能 :由於日誌查詢分析會涉及對文字型別、JSON 資料進行全文檢索、日期或普通數值的範圍查詢,系統需要對字串提供模糊查詢的能力,還需要支援能夠靈活建立且型別豐富的索引,以加速篩選過濾海量資料,提升查詢效率。
-
儲存成本 :裝置每天產生大量的日誌資料,為了挖掘這些有價值的日誌資訊,業務人員還需要從資料中進行篩選和分析,並對異常日誌回溯追蹤,這使得日誌儲存的規模很大、儲存週期相對較長,因此高價效比的儲存成本也是系統構建的目標之一。
-
運維成本 :系統自身的運維簡易程度以及是否具備合適的管控工具都能幫助我們進一步提效。
在持續關注業界 OLAP 資料庫的過程中,我們發現 Apache Doris 最近一年的發展非常迅猛,最新的 2.0 版本也把日誌儲存和檢索分析作為新的發力點,推出了倒排索引、NGram BloomFilter 索引等特性,對關鍵詞檢索、LIKE 文字匹配的效能有大幅提升,與我們文字檢索慢的痛點需求非常契合,因此開啟了新架構的升級之旅。
架構升級之旅
上文中提到,在整體架構選型過程中我們主要關注的地方包括寫入效能、查詢效能、資料儲存成本以及運維成本等方面。在架構升級過程中,我們選擇了 Apache Doris 當時最新發布的 2.0 版本,具體升級收益如下。
01 寫入效能提升超 200%
為了評估 Apache Doris 寫入的極限效能,我們初期使用與線上系統相同配置的 3 臺伺服器,從 Kafka 接入線上真實寫入流量,測試期間當 CPU 寫入效率跑滿至 100% 時寫入吞吐達到了 108 萬條/s、1.15 GB/s,寫入資料的可見性延遲保持在秒級。
而線上執行的原系統叢集規模達 13 臺,在同樣的資料寫入情況下,CPU 利用率 30% 左右、寫入吞吐僅 30 萬條/s,並且存在高峰期 CPU Load 高、系統響應慢的問題。
根據測試結果,我們預估架構 替換為 Apache Doris 後保持同樣 30% 的 CPU 佔用,只需要 3 臺伺服器即可滿足寫入需求,機器資源成本至少節約 70% 。值得注意的是,在測試中對 Apache Doris 表中一半欄位開啟了倒排索引,如果不開啟倒排索引的話,寫入效能在之前基礎上還能夠再提升 50% 左右。
02 儲存成本降低近 40%
在看到寫入效能的大幅提升後,Apache Doris 儲存空間佔用也給我們帶來了驚喜。 在開啟倒排索引的前提下,儲存空間比原系統不具備倒排索引還要略低,壓縮比從 1 : 4.3 提高至 1 : 5.7。
透過對比 Apache Doris 在磁碟上儲存的檔案大小,同一份資料的索引檔案(.idx)與資料檔案(.dat) 大小相差無幾。換言而之,增加索引後 Doris 資料膨脹率大約在 1 倍左右,與許多資料庫和檢索引擎 3-5 倍的膨脹率相比,Doris 的資料儲存空間佔用相對較低。經過研究發現,Apache Doris 採用了列式儲存和 ZSTD 壓縮演算法來最佳化儲存空間佔用。Doris 將原始資料和倒排索引都以列的形式儲存,使同一列的資料被儲存在相鄰位置,從而實現了更高的壓縮率。
ZSTD 是一個優秀的新型壓縮演算法,使用了智慧最佳化演算法,相較於常見的 GZIP 演算法, ZSTD 具有更高的壓縮率和更快的解壓速度,尤其在處理日誌場景時表現非常出色。
03 查詢效能平均提升 690%
對於業務最關注的查詢效能,我們從線上查詢日誌進行去重後分析出 79 條 SQL,在同一天總資料(1000 億條)、同樣規模的叢集(10 BE 節點)上對比測試 Apache Doris 與原系統的查詢耗時。
我們發現,與原系統相比,所有的查詢語句均有明顯提升,整體查詢效能提升近 7 倍,有 26 條 SQL 查詢語句效能提升 10 倍以上 ,其中 8 條 SQL 查詢提升 10-20 倍、14 條 SQL 查詢提升 20-50 倍、還有 4 條 SQL 查詢提升 50 倍以上。最大差異的一條 SQL 查詢語句為 Q43,在原系統中執行時間接近一分鐘,在 Apache Doris 中僅需不到 1 秒,其效能差異高達到 88 倍。
針對效能提升幅度高的查詢,我們進行了對比分析並發現了其中幾個共同點:
倒排索引對關鍵詞查詢的加速:Q23、Q24、Q30、Q31、Q42、Q43、Q50 等
-- 例如q43 提升88.2倍
SELECT count() from table2
WHERE ( event_time >= 1693065600000 and event_time < 1693152000000)
AND (rule_hit_big MATCH 'xxxx');
這種基於倒排索引進行關鍵詞檢索的技術,相較於基本的暴力掃描後進行文字匹配具有顯著的優勢,一方面極大地減少了需要讀取的資料量;另一方面,在查詢過程中無需進行文字匹配操作,因此查詢效率往往提升一個數量級甚至更高。
NGram BloomFilter索引對 LIKE 的加速:Q75、Q76、Q77、Q78 等
-- 例如q75 提升44.4倍
SELECT * FROM table1
WHERE ent_id = 'xxxxx'
AND event_date = '2023-08-27'
AND file_level = 70
AND rule_group_id LIKE 'adid:%'
ORDER BY event_time LIMIT 100;
對於要查詢的非一個完整關鍵詞的場景,LIKE 仍然是有用的查詢方式,Apache Doris 的 NGram BloomFilter 索引能對常規的 LIKE 進行加速。
NGram BloomFilter 索引與普通 BloomFilter 索引不同,它不是將整個文字放入 BloomFilter ,而是將文字分成連續的子串,每個子串長度為 n ,並將他們放入 NGram BloomFilter 中。對於
cola LIKE '%pattern%'
的查詢,將
'pattern'
按照同樣的方式分成長度為 n 的子串,判斷每個子串在 BloomFilter 中是否存在,如果有一個子串不存在,則說明 BloomFilter 對應的資料塊中沒有跟
'pattern'
匹配的資料塊,因此透過跳過資料塊掃描的步驟,達到加速查詢的效果。
滿足條件的最新 TopN 條日誌明細查詢最佳化:Q19-Q29 等
-- 例如q22,提升50.3倍
SELECT * FROM table1
where event_date = '2023-08-27' and file_level = 70
and ent_id = 'nnnnnnn' and file_name = 'xxx.exe'
order by event_time limit 100;
這種
SELECT * FROM t WHERE xxx ORDER BY xx LIMIT n
的查詢,在查詢滿足某種條件的最新 n 條日誌時使用頻率非常高,Apache Doris 針對這種 SQL 查詢模式進行了專門的最佳化,根據查詢的中間狀態確定排序欄位的動態範圍,並利用自動動態謂詞下推的方式,避免讀全部資料進行排序取 TopN,從而減少需要讀取的資料量(有時甚至可以減少一個數量級),進而提升了查詢效率。
04 視覺化運維管控和視覺化查詢 WebUI,最大化減少運維和探索分析成本
為了提高日常叢集維護的效率,我們使用了飛輪科技免費開放的視覺化叢集管理工具 (以下簡稱 Doris Manager )。Doris Manager 提供的功能可以滿足日常運維中叢集監控、巡檢、修改配置、擴縮容、升級等操作,降低登陸機器手動操作的麻煩和誤操作風險。
除了管控 Apache Doris 叢集之後,Doris Manager 還整合了類似 Kibana 的視覺化日誌探索分析 WebUI,對於習慣 ELK 日誌分析的使用者非常友好,支援關鍵詞檢索、趨勢圖展示、趨勢圖拖拽日期範圍、明細日誌平鋪和摺疊展示、欄位值過濾等互動方便的探索式分析,跟日誌場景探索下鑽的分析需求很契合。
總結與規劃
在跟隨 Apache Doris 2.0-alpha,2.0-beta,2.0 正式版本釋出的節奏,我們根據業務場景進行了詳細的評測,也為社群反饋了不少最佳化建議,得到社群的積極響應和解決。系統經歷試執行一個月之後,我們將 2.0.1 版本正式用於生產環境,替換了原系統叢集,完成架構升級改造,實現了寫入效能、查詢效能、儲存成本、運維成本等多方面收益:
-
寫入效能提升 3 倍以上 :目前,奇安信的日誌分析平臺每日平均有數千億的新增安全日誌資料,透過 Doris 的 Routine Load 能夠將資料實時穩定寫入庫,保障資料低延遲高吞吐寫入。
-
查詢效能平均提升 7 倍 :查詢響應時間大幅減少,與之前的查詢效率相比達到平均 7 倍提升,其中業務特別關注的全文檢索速度達到 20 倍以上的提升,助力日誌分析與網路安全運營效率。
-
高效便捷的視覺化管理 :Cluster Manager for Apache Doris 工具提供了視覺化叢集監控告警平臺,滿足日常叢集監控等一系列操作,同時 WebUI 多種功能為分析人員提供了操作簡單、使用便捷的互動式分析。總而言之,Doris 的易用性、靈活性大幅降低了開發、運維、分析人員的學習與使用成本。
後續我們還將在日誌分析場景下探索更多 Apache Doris 的能力。我們將擴大 JSON 資料型別的相關應用,加強系統對於半結構化資料深度分析的能力。同時,我們也 非常期待 Apache Doris 2.1 版本中新增的 Variant 可變資料型別,支援儲存任意結構的 JSON 資料,支援欄位個數與型別的變化,讓業務人員靈活定義特殊字元,以更好地實現半結構資料 Schema Free 的分析需求 。
非常感謝 SelectDB 團隊一直以來對我們的技術支援,助力奇安信走向“體系化防禦、數字化運營”的網路日誌安全管理,幫助客戶準確識別、保護和監管網路裝置與各類系統,確保業務人員在任何時候都能夠安全、可信、穩定地訪問資料與業務。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70017904/viewspace-2992358/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 小米 A/B 實驗場景基於 Apache Doris 的查詢提速最佳化實踐Apache
- 關於MySQL 通用查詢日誌和慢查詢日誌分析MySql
- 基於Apache Doris的湖倉分析Apache
- 日誌分析-apache日誌分析Apache
- 從 Elasticsearch 到 Apache Doris,統一日誌檢索與報表分析,360 企業安全瀏覽器的資料架構升級實踐ElasticsearchApache瀏覽器架構
- Kibana+Logstash+Elasticsearch 日誌查詢系統Elasticsearch
- 企業級日誌分析系統——ELK
- 慢查詢日誌開啟分析
- perl分析apache日誌Apache
- 招商信諾人壽基於 Apache Doris 統一 OLAP 技術棧實踐Apache
- 查詢提速 20 倍,Apache Doris 在 Moka BI SaaS 服務場景下的應用實踐Apache
- Linux系統級日誌系統Linux
- SelectDB肖康:Apache Doris在日誌儲存與分析場景的實踐Apache
- mysql慢查詢和錯誤日誌分析MySql
- 基於AWS-ELK部署系統日誌告警系統
- ELK日誌分析系統
- 玄機-第二章日誌分析-apache日誌分析Apache
- 對 MySQL 慢查詢日誌的簡單分析MySql
- MySQL:慢查詢日誌MySql
- 日誌查詢錯誤
- linux查詢日誌技巧Linux
- loki的日誌查詢Loki
- MySQL 通用查詢日誌MySql
- ELK-日誌分析系統
- 長安汽車基於 Apache Doris 的車聯網資料分析平臺建設實踐Apache
- 華納雲:linux系統中如何查詢oracle錯誤日誌LinuxOracle
- 平安人壽基於 Apache Doris 統一 OLAP 技術棧實踐Apache
- 如何精準查詢日誌
- ELK+FileBeat日誌分析系統
- ELK日誌分析系統詳解
- 對比Elasticsearch,使用Doris進行高效日誌分析(上)Elasticsearch
- 對比Elasticsearch,使用Doris進行高效日誌分析(下)Elasticsearch
- Apache基礎配置與日誌管理Apache
- 基於J2EE的公交查詢系統
- Centos系統關閉Mysql資料庫查詢操作日誌的方法CentOSMySql資料庫
- 基於Ansible實現Apache Doris快速部署運維指南Apache運維
- Linux 查詢 日誌 相關命令Linux
- 政策查詢系統(安卓)6安卓