Drain算法-笔记

简介

论文链接:https://jiemingzhu.github.io/pub/pjhe_icws2017.pdf
代码实现:https://github.com/logpai/logparser/tree/main/logparser/Drain

算法原理图:

image-20240927145439370

有几点注意:

  • 根节点和叶节点实际是一套规则,并不包含日志数据
  • 真正的日志数据在叶节点之下的Log Group
  • 第一层节点,基于假设: 具有相同日志事件的日志消息可能具有相同的日志消息长度
  • 第二层节点,基于假设: 日志消息开始位置的token更有可能是常量

Leaf Node 的计算

计算日志消息和每个日志组的日志事件之间的序列相似性:

sinSeq=i=1nequ(seq1(i),seq2(i))n

seq分别是同一组内,两个日志的序列(以空格划分的字符串数组):

equ(t1,t2)={1ift1==t20otherwise

如果stsimSeq≥st(阈值),那么Drain就会返回该组作为最佳匹配,否则返回一个标志位表示没有合适的。

更新解析树

如果在返回了合适的日志组,则Drain将当前日志消息的日志ID添加到返回的日志组中的日志ID中。此外,将更新返回日志组中的日志事件。

扫描日志消息和日志事件相同位置的token,如果两个token相同,则不修改该token位置上的token。否则,在日志事件中通过通配符*更新该token位置上的token。

如果无法找到合适的日志组,则根据当前日志消息创建一个新的日志组。

image-20240930154832679
posted @   漫漫长夜何时休  阅读(214)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2023-09-30 Linux-安装Opencv4
点击右上角即可分享
微信分享提示