查询平均提速 700%,奇安信基于 Apache Doris 升级日志安全分析系统

本文导读

数智时代的到来使网络安全成为了不可忽视的重要领域。奇安信作为一家领先的网络安全解决方案领军者,致力于为企业提供先进全面的网络安全保护,其日志分析系统在网络安全中发挥着关键作用,通过对运行日志数据的深入分析,能够对漏洞和异常行为生成关键见解,帮助企业建立有效的防御策略。本文将深入探讨奇安信在网络安全与日志分析解决方案的关键优势,了解基于 Apache Doris 构建的全新一体化日志存储分析平台如何实时监测和分析日志事件,加强对可疑活动的追踪与应对,提升系统安全性与快速响应能力。

作者|奇安信 服务端技术专家 舒鹏

奇安信是中国企业级网络安全市场的领军者,专注于为政府和企业用户提供新一代网络安全产品和服务。目前核心产品天擎终端安全系统在国内已有 4000 万政企用户部署、全国部署服务器超过 100 万台、服务超 40 万大型机构。作为网络安全国家队,奇安信立志为国家构建安全的网络空间,在终端安全、云安全、威胁情报、态势感知等领域的技术研发持续领先。

随着现代企业数字化转型的不断深化,大数据、物联网、5G 等创新技术的广泛应用加速了企业的数字化转型步伐,这使得原先的网络边界被打破,多源多样的终端设备成为了新的安全边界。

网络安全系统的防御性能与日志分析密不可分,当网络设备、操作系统以及应用程序在运行时,会产生大量的运行日志,其中蕴涵了丰富的数据价值。最大化地利用运行日志数据能够有效检测内部系统的安全风险、还原攻击路径、回溯攻击入口等,可以进一步提升系统安全性、保障企业网络安全,因此日志分析系统在其中发挥着不可或缺的作用。

本文将介绍奇安信在网络安全场景中,基于 Apache Doris 进行架构升级迭代并建设全新一体化日志存储分析平台的实践经验。

早期架构痛点与需求

安全日志平台的架构如下图所示,原始的设备、系统日志首先经过业务处理环节,包括归一化和扩充维度等操作。这些处理步骤旨在将来自不同设备和系统日志转化为半结构化 JSON 格式的安全日志,并将其写入 Kafka 消息队列中。

最新的日志会被写入实时数仓,安全分析师可以通过分析平台对实时数仓中的最新数据进行交互式查询,从而进行攻击研判和追踪溯源等安全分析工作。另外,离线数仓用于保存历史数据,以支持长周期数据挖掘的离线分析。

WechatIMG494.jpg

在以上日志数据平台中,日志数据的写入速度与查询分析效率对上层业务人员进行实时安全事件监控和分析至关重要,这也是当前我们所面对的最主要痛点。

一方面,每天所生产的安全日志数据达到千亿级,写入压力很大。最初我们选择使用某 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 倍。

WechatIMG495.jpg

针对性能提升幅度高的查询,我们进行了对比分析并发现了其中几个共同点:

倒排索引对关键词查找的加速:Q23、Q24、Q30、Q31、Q42、Q43、Q50 等

1 -- 例如q43 提升88.2倍
2 
3 SELECT count() from table2 
4 WHERE ( event_time >= 1693065600000 and event_time < 1693152000000) 
5   AND (rule_hit_big MATCH 'xxxx');

这种基于倒排索引进行关键词检索的技术,相较于基本的暴力扫描后进行文本匹配具有显著的优势,一方面极大地减少了需要读取的数据量;另一方面,在查询过程中无需进行文本匹配操作,因此查询效率往往提升一个数量级甚至更高。

WechatIMG496.jpg

NGram BloomFilter索引对 LIKE 的加速:Q75、Q76、Q77、Q78 等

1 -- 例如q75 提升44.4倍
2 
3 SELECT * FROM table1
4 WHERE  ent_id = 'xxxxx'   
5    AND event_date = '2023-08-27'   
6    AND file_level = 70     
7    AND rule_group_id LIKE 'adid:%'     
8 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 等

1 -- 例如q22,提升50.3倍
2 
3 SELECT * FROM table1
4 where event_date = '2023-08-27' and file_level = 70 
5   and ent_id = 'nnnnnnn' and file_name = 'xxx.exe'
6 order by event_time limit 100;

这种SELECT * FROM t WHERE xxx ORDER BY xx LIMIT n 的查询,在查找满足某种条件的最新 n 条日志时使用频率非常高,Apache Doris 针对这种 SQL 查询模式进行了专门的优化,根据查询的中间状态确定排序字段的动态范围,并利用自动动态谓词下推的方式,避免读全部数据进行排序取 TopN,从而减少需要读取的数据量(有时甚至可以减少一个数量级),进而提升了查询效率。

04 可视化运维管控和可视化查询 WebUI,最大化减少运维和探索分析成本

为了提高日常集群维护的效率,我们使用了飞轮科技免费开放的可视化集群管理工具 Cluster Manager for Apache Doris (以下简称 Doris Manager )。Doris Manager 提供的功能可以满足日常运维中集群监控、巡检、修改配置、扩缩容、升级等操作,降低登陆机器手动操作的麻烦和误操作风险。

WechatIMG497.jpg

除了管控 Apache Doris 集群之后,Doris Manager 还集成了类似 Kibana 的可视化日志探索分析 WebUI,对于习惯 ELK 日志分析的用户非常友好,支持关键词检索、趋势图展示、趋势图拖拽日期范围、明细日志平铺和折叠展示、字段值过滤等交互方便的探索式分析,跟日志场景探索下钻的分析需求很契合。

WechatIMG498.jpg

总结与规划

在跟随 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 团队一直以来对我们的技术支持,助力奇安信走向“体系化防御、数字化运营”的网络日志安全管理,帮助客户准确识别、保护和监管网络设备与各类系统,确保业务人员在任何时候都能够安全、可信、稳定地访问数据与业务。

最后,我们也将持续参与到 Apache Doris 社区建设中,将相关成果贡献回馈社区,希望 Apache Doris 飞速发展,越来越好!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/128033.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

正则表达式续篇

位置锚定&#xff1a; ^:行首锚定&#xff0c;表示以什么为开头 例如&#xff1a; $:行尾锚定&#xff0c;表示以什么为结尾 例如&#xff1a; ^&#xff1a;匹配的是空行 例如&#xff1a; ^root$&#xff1a;匹配整行&#xff0c;而且整行只能有这一个字符串 实验&#x…

软考之软件工程基础理论知识

软件工程基础 软件开发方法 结构化方法 将整个系统的开发过程分为若干阶段&#xff0c;然后依次进行&#xff0c;前一阶段是后一阶段的工作依据按顺序完成。应用最广泛。特点是注重开发过程的整体性和全局性。缺点是开发周期长文档设计说明繁琐&#xff0c;工作效率低开发前要…

Golang Gin 接口返回 Excel 文件

文章目录 1.Web 页面导出数据到文件由后台实现还是前端实现&#xff1f;2.Golang Excel 库选型3.后台实现示例4.xlsx 库的问题5.小结参考文献 1.Web 页面导出数据到文件由后台实现还是前端实现&#xff1f; Web 页面导出表数据到 Excel&#xff08;或其他格式&#xff09;可以…

One-to-N N-to-One: Two Advanced Backdoor Attacks Against Deep Learning Models

One-to-N & N-to-One: Two Advanced Backdoor Attacks Against Deep Learning Models----《一对N和N对一&#xff1a;针对深度学习模型的两种高级后门攻击》 1对N&#xff1a; 通过控制同一后门的不同强度触发多个后门 N对1&#xff1a; 只有当所有N个后门都满足时才会触发…

测试为什么分白盒、黑盒、单元、集成测试?

对于想进入测试行业的小萌新&#xff0c;本文的诉求主要分为三块&#xff1a; 1、想知道分为这么多种测试的原因 2、解决各种概念问题 3、提供各种软件测试工具 安排&#xff01; 一、为什么测试的概念这么多 一个软件项目就好比一部复杂的汽车&#xff0c;有很多零件&#x…

Java作业二

一、使用方法编写求圆面积和周长的程序&#xff0c;运行时提示输入圆半径&#xff0c;然后输出计算结果。运行效果如下图所示&#xff1a; import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner input new Scanner(System.in);Syste…

pycharm更改远程服务器地址

一、问题描述 在运行一些项目时&#xff0c;我们常需要在pycharm中连接远程服务器&#xff0c;但万一远程服务器的ip发生了变化&#xff0c;该如何修改呢&#xff1f;我们在file-settings-python interpreter中找到远程服务器&#xff0c;但是发现ip是灰色的&#xff0c;没有办…

最新Ai智能创作系统源码V3.0,AI绘画系统/支持GPT联网提问/支持Prompt应用+搭建部署教程

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

docker--基本操作

第 1 章 Docker基础 1.1 docker简介 在这一部分我们主要讲两个方面&#xff1a; docker是什么、docker特点 1.1.1 docker是什么 docker是什么&#xff1f; docker的中文解释是码头工人。 官方解释&#xff1a; Docker是一个开源的容器引擎&#xff0c;它基于LCX容器技术&…

设计模式之两阶段终止模式

文章目录 1. 简介 2. 常见思路3. 代码实战 1. 简介 两阶段终止模式&#xff08;Two-Phase Termination Pattern&#xff09;是一种软件设计模式&#xff0c;用于管理线程或进程的生命周期。它包括两个阶段&#xff1a;第一阶段是准备阶段&#xff0c;该阶段用于准备线程或进程…

C++:string类!

Cstring 是C中的字符串。 字符串对象是一种特殊类型的容器&#xff0c;专门设计来操作的字符序列。 不像传统的c-strings,只是在数组中的一个字符序列&#xff0c;我们称之为字符数组&#xff0c;而C字符串对象属于一个类&#xff0c;这个类有很多内置的特点&#xff0c;在操作…

某国产中间件企业:提升研发安全能力,助力数字化建设安全发展

​某国产中间件企业是我国中间件领导者&#xff0c;国内领先的大安全及行业信息化解决方案提供商&#xff0c;为各个行业领域近万家企业客户提供先进的中间件、信息安全及行业数字化产品、解决方案及服务支撑&#xff0c;致力于构建安全科学的数字世界&#xff0c;帮助客户实现…

进程空间管理:用户态和内核态

用户态虚拟空间里面有几类数据&#xff0c;例如代码、全局变量、堆、栈、内存映射区等。在 struct mm_struct 里面&#xff0c;有下面这些变量定义了这些区域的统计信息和位置。 unsigned long mmap_base; /* base of mmap area */ unsigned long total_vm; /* Total page…

人工智能-多层感知机

隐藏层 该模型通过单个仿射变换将我们的输入直接映射到输出&#xff0c;然后进行softmax操作。 如果我们的标签通过仿射变换后确实与我们的输入数据相关&#xff0c;那么这种方法确实足够了。 但是&#xff0c;仿射变换中的线性是一个很强的假设。 线性模型可能会出错 例如&…

【Spring】配置文件-properties和xml

文章目录 1. 前言2. properties配置文件3. xml配置文件4. 总结 1. 前言 在Spring中,配置文件有两种,properties配置文件和xml配置文件 properties配置文件&#xff0c;在Java编程中是一种常见的配置文件形式&#xff0c;文件后缀为“.properties”&#xff0c;属于文本文件。它…

十分钟设置免费海外远程桌面 | 使用Amazon Lightsail服务的免费套餐轻松搭建远程桌面

目录 使用Amazon Lightsail服务的免费套餐轻松搭建远程桌面 1. 启动Amazon Lightsail实例 2. 配置远程桌面 3. 启动远程桌面 4. 使用远程桌面 使用Amazon Lightsail服务的免费套餐轻松搭建远程桌面 前言 ①本教程将向您介绍如何使用Amazon Lightsail服务的免费套餐轻松搭…

知心早安问候语,愿你享受美好的时光,幸福快乐每一天

人生万里路&#xff0c;走好每一步&#xff0c;身体是本钱&#xff0c;平安是财富&#xff0c;开心就是护身符&#xff0c;健康才是摇钱树。新的一天&#xff0c;事事顺意&#xff01; 晨起福门开&#xff0c;快乐安康在&#xff0c;愉悦心态好&#xff0c;生活充满爱&#xf…

DeepXDE学习笔记【1】——简单ODE方程求解

DeepXDE学习笔记【1】——简单ODE方程求解 1、背景 物理信息神经网络(PINN)自从2017年被提出&#xff0c;其应用范围在近两年也被挖掘的越来越广泛&#xff0c;除了可以解决物理方面的问题&#xff0c;信号处理、工程评估等等方向也开始有所涉及&#xff0c;所谓“物理数据双…

【软考】14.3 设计模式

《设计模式》 有下划线&#xff1a;类模式 / 对象模式无下划线&#xff1a;对象模式 创建型 设计模式 创建对象 构建器&#xff08;Builder&#xff09;&#xff1a;类和构造分离抽象工厂&#xff08;Abstract Factory&#xff09;&#xff1a;抽象接口工厂&#xff08;Factor…

MongoDB系例全教程

一、系列文章目录 一、MongoDB安装教程—官方原版 二、MongoDB 使用教程(配置、管理、监控)_linux mongodb 监控 三、MongoDB 基于角色的访问控制 四、MongoDB用户管理 五、MongoDB基础知识详解 六、MongoDB—Indexs 七、MongoDB事务详解 八、MongoDB分片教程 九、Mo…