Log Aggregation Study
一、 基于日志模板解析的聚合算法(结构化方法) 这类算法的核心思想是**“去变量保结构”**。通过识别日志中的常量部分(模板)和变量部分(参数),将同一模板的日志归为一类。这是解决“时间戳、随机ID变化”最直接、性价比最高的方法。 1. Drain (推荐指数:⭐⭐⭐⭐⭐) 原理 :一种基于固定深度树的在线解析算法。它假设日志的开头部分通常是固定的,通过预定义的深度和相似度阈值,快速将日志流分组并提取模板。 适用性 : 优势 :完全符合文档中Flink流引擎的场景,处理速度极快,几乎不增加延迟。能精准剔除时间戳、SessionID等变量。 解决痛点 :完美解决“同一攻击因payload细微差异被拆分”的问题。 落地建议 :作为聚合的第一道防线。例如将 SQL Injection id=123 和 SQL Injection id=456 解析为模板 SQL Injection id=<*> ,基于模板Hash进行聚合。 2. Spell (流式最长公共子序列) 原理 :基于LCS(最长公共子序列)在线提取日志模板。 适用性 :适用于日志长度变化较大,但核心关键词位置相对固定的场景。比Drain稍慢,但容错性略好。 3. LogPai / LogParse 说明 :这是一系列工业级日志解析工具的集合,集成了多种算法(如IPLoM, LenMa等),适合离线分析或批处理引擎场景,用于建立基线。 二、 基于局部敏感哈希的聚合算法(高性能去重) 当日志无法完全结构化(如加密流量、非标准文本)时,需要比对文本的相似度。传统Hash要求输入完全一致,而LSH允许内容相似但不完全相同的日志生成相同的Hash值。 1. SimHash (推荐指数:⭐⭐⭐⭐) 原理 :将高维特征向量映射为低维指纹,通过计算海明距离判断相似度。 适用性 : 场景 :非常适合文档中提到的“payload细微差异”场景。 落地 :提取日志的关键特征(如IP、URL路径、特定关键词),生成SimHash指纹。若两条日志指纹的海明距离小于阈值(如3),则聚合。 优势 :计算复杂度低,极适合海量数据实时去重。 2. MinHash 原理 :利用Jaccard相似度原理,通过随机置换哈希快速估算集合的相似度。 适用性 :比S...