论文解读:Cleaning Logs for Downstream Tasks (Registered Report)

本文详细介绍 Cleaning Logs for Downstream Tasks (Registered Report) ,重点放在论文提出的 LogPurifier 方法、依赖分数计算、聚类式日志清洗流程,以及作者计划如何验证该方法对下游任务的影响。

1. 论文基本信息

标题 Cleaning Logs for Downstream Tasks (Registered Report)
arXiv 2606.27000v1
类别 cs.SE
作者 Zahra G. Yazdi, Van-Hoang Le, Nyyti Saarimäki, Donghwan Shin, Domenico Bianculli, Lionel Briand
核心问题 真实日志中混入大量与系统功能行为无关的 free-standing messages,这些消息会干扰模型推断和异常检测等下游任务。
核心方法 LogPurifier:一种基于日志模板间依赖关系的任务无关日志清洗方法。
论文性质 Registered Report。论文主要给出方法和实验计划,而不是完整实验结果。

➡️ 非官方复现进行中:https://github.com/HolgerZhang/LogPurifier


2. 研究动机

论文关注一种特定的日志噪声:free-standing log messages。它们不是执行工作流的一部分,而是独立出现的运行状态、心跳、资源状态等消息。典型例子是周期性的 memory OK。它们可能被夹在正常业务事件之间,破坏日志序列结构,让模型推断学到错误状态转移,或让异常检测模型看到不稳定的事件组合。

消息类型 含义 对下游任务的影响
regular messages 描述系统功能行为和执行流程 应保留,用于恢复状态转移、判断正常/异常模式
free-standing messages 不依赖前驱或后继事件,常表示运行状态或运维信息 可能随机夹入业务序列,使模型看到伪转移、伪模式或额外计算负担

作者希望日志清洗不绑定某一个下游任务,因为模型推断和异常检测使用日志的方式不同。LogPurifier 因此只依赖日志模板之间的结构关系,不使用源代码、任务标签或异常标签。


3. 方法总览:LogPurifier

LogPurifier 的输入是日志集合 L 和日志模板集合 T,输出是移除 free-standing 消息后的清洗日志 Lcl。方法的关键直觉是:regular template 往往与其他模板形成稳定的前后依赖,而 free-standing template 随机插入,和其他模板之间的依赖分数较低。

阶段 输入 输出 目的
依赖分数计算 日志集合 L、模板集合 T 每个模板的 mScore 衡量模板是否至少与某个其他模板稳定相关
聚类式分割 所有模板的 mScore free-standing 模板集合 Tfs 自动找到低依赖模板簇
日志清洗 原始日志 L、Tfs 清洗日志 Lcl 删除独立插入的模板消息

4. 步骤一:依赖分数计算

4.1 为什么要看双向依赖

论文不只判断模板 x 是否经常跟在 y 前面,也判断 x 是否经常跟在 y 后面。前者称为 forward dependency,表示 x 可能是 y 的原因;后者称为 backward dependency,表示 x 可能是 y 的结果。这样能覆盖“x 导致 y”和“x 由 y 引出”两种关系。

4.2 first-following log entry

给定模板 x 的一次出现 ex,论文寻找模板 y 在 ex 之后、下一次 x 出现之前的第一次出现 ey。这个 ey 称为 ex 的 first-following log entry。这个定义避免了无限向后搜索,也让相邻业务转移更容易得到高分。

4.3 co-occurrence score

如果 ey 存在,则 co-occurrence score 定义为 1 / distance(ex, ey, l)。距离越近,分数越高;如果不存在 first-following entry,则分数为 0。这样,立即跟随的事件会得到 1,隔得越远依赖越弱。

概念 定义 作用
cScore(ex, ey, l) 1 / distance(ex, ey, l),无 ey 时为 0 衡量两次日志事件在同一条日志中的接近程度
dScoref(x, y, L) 所有 x 出现对应的 cScore 平均值 衡量 x 被 y 跟随的稳定程度
dScoreb(x, y, L) 等价于在反转日志上计算 forward score 即dScoref (x, y, rev(L)) 衡量 x 被 y 前置的稳定程度
dScoreCalc(x, y, L) 依赖分数,max(dScoref, dScoreb) 取双向依赖中较强的一侧
mScore[x] x 与所有其他模板依赖分数的最大值 判断模板 x 是否至少与某个模板强相关

论文选择最大值,因为一个 regular template 只要与至少一个模板形成稳定依赖,就不应被判为 free-standing。相反,free-standing template 通常与所有其他模板都缺乏稳定关系,因此最大依赖分数也偏低。


5. 步骤二:聚类式模板分割

得到每个模板的 mScore 后,LogPurifier 使用 Mean-Shift 聚类。作者不预先设定簇数,因为 regular templates 本身也可能形成多个分数层级。如果使用固定二分类阈值,容易受系统规模和日志结构影响。Mean-Shift 能根据 mScore 分布自动形成簇。

聚类完成后,方法选择 mScore 最小的簇作为 free-standing templates。理由是:这些模板与其他模板之间最不稳定,最符合“独立插入”的噪声特征。最后,算法删除所有属于这些模板的日志消息。

设计选择 论文动机
使用 Mean-Shift 不需要预设簇数,适合不同日志系统中未知的分数分布
选择最低 mScore 簇 free-standing 模板应与其他模板依赖最弱
删除整类模板消息 清洗结果保持简单,直接减少下游任务输入中的独立噪声

6. 与已有方法的区别

方法 噪声定义 是否任务相关 关键差异
LogSed 基于时间加权控制流图识别异常诊断相关信息 偏异常诊断 只建模单向依赖,需要用户设置阈值和窗口参数
LogBoost / LogCleaner 围绕异常检测中有益/无益事件做筛选 任务相关 优化目标绑定异常检测,不一定适合模型推断
LogAssist 面向摘要的重复事件和共现子序列压缩 任务相关 重点是总结和压缩,不是保留执行行为结构
LogPurifier 结构上独立、与执行行为弱相关的 free-standing templates 任务无关 双向依赖 + 自动聚类,无需下游任务标签或源代码

7. 实验设计

由于本文是 Registered Report,重点是预注册的评估方案。作者计划从有效性和效率两个方面评估清洗前后的差异。

7.1 研究问题

  • RQ1:使用 LogPurifier 清洗日志后,下游任务工具的有效性如何变化?
  • RQ2:使用 LogPurifier 清洗日志后,下游任务工具的效率如何变化?

7.2 模型推断任务

模型推断部分使用 MINT,从至少 11 个公开 FSM 系统模型生成日志。原始生成日志只包含 regular messages,作者再随机插入 free-standing templates 作为可控噪声。噪声率从 0.1 到 0.9,且每个系统重复 30 次,以减少随机生成和噪声注入带来的偶然性。

工具 MINT
数据 由公开 FSM 模型生成的执行日志
噪声构造 随机插入 free-standing templates,对应噪声率 0.1 到 0.9
有效性指标 推断模型的 cumulative precision 与 cumulative recall
效率指标 MINT 执行时间

7.3 异常检测任务

异常检测部分使用 BGL、Thunderbird、Spirit 等真实系统日志。作者计划使用 Drain 解析日志模板,用固定时间窗口切分序列,并测试 60、100、120、300、600、1800、3600 秒七种窗口大小。异常检测工具包括 invariant mining 和 one-class SVM,通过 Loglizer 实现。

工具 Invariant Mining、OC-SVM,基于 Loglizer
数据 BGL、Thunderbird、Spirit,可能加入更多公开数据集
预处理 Drain 日志解析 + 固定时间窗口切分
清洗方式 在训练集上识别 free-standing templates,再从训练集和测试集同时删除这些模板
有效性指标 precision、recall、F1-score
效率指标 训练时间

8. 统计分析计划

作者计划对 MI 和 AD 分别分析,每个结果指标单独建模。由于同一系统会在多个配置下反复测量,并且清洗前后是一组配对观测,论文将使用线性混合效应模型。系统作为随机效应,是否清洗作为主要固定效应,噪声率、窗口大小、工具类型等作为额外固定效应。如果 LMM 假设不满足,作者会考虑数据变换或广义模型。

对于效率,作者还计划做探索性中介分析,估计运行时间变化中有多少可以由输入模板数量减少解释。这一点很关键,因为清洗可能同时改变数据规模和数据结构,运行变快不一定完全来自模型更容易学习。


9. 方法优势与局限

方面 说明
优势 黑盒、任务无关、不需要源代码、不需要人工阈值,适合先作为日志分析前处理步骤。
方法假设 free-standing templates 与其他模板依赖弱,regular templates 至少与某些模板存在稳定前后关系。
潜在风险 某些低频但关键的业务事件可能被误判为 free-standing;某些周期性业务行为也可能表现为低依赖。
验证限制 论文明确不直接评价 LogPurifier 是否完美识别 free-standing messages,因为任务无关的 ground truth 很难定义;它评价的是清洗后下游任务是否受益。

10. 对 AIOps / 日志研究的启发

这篇论文把日志噪声问题从“异常标签是否正确”转向“日志序列本身是否夹杂与执行行为无关的信息”。它适合作为日志分析 pipeline 的前处理模块,尤其适合模型推断、序列异常检测、流程挖掘这类依赖事件顺序的任务。

对后续研究来说,值得进一步探索的问题包括:free-standing template 的判别是否能结合语义信息;是否能保留某些对运维诊断有用但对行为建模有害的消息;以及清洗策略是否应根据下游任务目标做可控调节。

总结:LogPurifier 把日志模板之间的前后共现关系转成依赖分数,用 Mean-Shift 自动找出低依赖模板簇,并删除这些疑似 free-standing messages,从而让下游日志分析工具面对更接近系统功能行为的序列。


思考

1. LogPurifier 使用 Mean-Shift 聚类之后,怎么选最小的簇?

Mean-Shift 是在一维数轴上聚类。聚类完成后,每个模板会被分配到一个簇,每个簇对应一个中心。LogPurifier 选择的是簇中心最小的那个簇,也就是 mScore 最低的一组模板。

2. 一维聚类会不会有问题?是否存在重叠或边界模板被误删除的情况?

LogPurifier 使用一维 mScore 聚类,本质上依赖一个假设:free-standing templates 的 mScore 明显低于 regular templates。如果这个假设不成立,确实可能出现边界模板被误删的情况。

理论上,一维 Mean-Shift 得到的最低簇应该对应 mScore 最低的一段连续区间。因此,如果出现 mScore 为 0.31 的模板被删除,而 mScore 为 0.29 的模板被保留,就说明实现或聚类结果不符合 LogPurifier 的语义。更稳妥的做法是根据 cluster center 生成删除阈值,删除低于该阈值的前缀模板,而不是机械相信可能交叉的 cluster label。

本文作者:Holger

本文链接:https://blog.holger.host/2026/06/29/logpurifier-cleaning-logs/

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

本文内容由 HolgerGO (AI Agent) 辅助生成。论文阅读和代码复现通过Agent协助完成。

ESC 关闭 | 导航 | Enter 打开
输入关键词开始搜索