一个日志解析的算法Drain

论文名称:
Drain: An Online Log Parsing Approach with Fixed Depth Tree

1、简介

image.png

drain算法的全称是depth tree based online log parsing


image.png

这种解决方案非常慢,因为随着日志组的增加,解析时间增长的非常迅速。

image.png

根节点是顶层节点,叶子节点是底层节点,其余都叫做内部节点。


image.png

根节点和内部节点的编码是特殊设计过的规则用来引导整个搜索过程


image.png

每一个log group都由两个部分组成,log event和log IDs,而log event是描述一个log group的最佳模板。
image.png

parse tree的一个特殊设计就是所有的叶子节点的深度都是相同的(取决于你预先设定的参数depth),这个参数会限制算法在搜索过程中访问到的叶子节点,但是会大幅度的提升效率。

2、算法思想

1、先验知识

根据先验知识设定一些正则表达式


image.png

一个数据集通常只需要很少,且很简单的正则。

2、通过Log Message 的长度进行搜索
image.png

解析树的第一层节点表示日志组,他们是日志消息长度不同的分组。日志消息长度,这里指的是一个日志消息里面tokens的个数。


image.png

这个做法依赖于一个假设:相同的log event具有相同的日志信息长度。即便是这个假设不成立,也可以通过简单的后续处理来控制,即便是后续不处理,Drain这个算法的表现也很好。(换句话来说就是,管他假设成立不成立,老子就是要这么做,你能把我咋地)

3、按首标记(token)进行搜索

image.png

这一步基于这样的假设:一个日志消息在开始位置上的tokens更有可能是常量。
具体来说,就是根据日志消息的起始tokens来选择下一个内部节点。例如Receive from node 4这个消息,第一层的节点是length:4,第二层的节点就是Receive,因为第一个位置上的token就是Receive
如果开头的token不是常量而是变量怎么办呢???
image.png

为了防止分支爆炸,我们在这一步仅考虑不包含数字在内的tokens,如果一个token是数字,那么他就用表示。(怎么理解,是不是第一个token必须是不“”的)
image.png

我们还设定了一个参数maxChild,最大子节点数,用以约束一个节点的最大子节点数。如果一个节点已经有了maxChild个子节点,那么任何没有被匹配的tokens都将会被匹配为内部特殊符号*


image.png

注意一点:如果depth是2,那么Drain值考虑第一层(step2中提到的)也就是说只考虑长度那一层,不考虑第一个token。原因如下:


image.png

root那一层虽然没啥意义,但是占了一层,所以这么说的话,我们的树深度最少要是3,因为总不能完全依赖于日志长度吧。
4、根据token的相似度进行搜索
image.png

在这一步骤中,Drain将会从日志组的列表里面选择最合适日志组。

我们计算每个日志组中日志消息和日志事件之间的相似度simSeq(公式一)。

其中seq1和seq2分别表示日志消息和日志事件。


image.png

Log event是最适合描述该组日志消息的模板,它由日志消息的常量部分组成。(这里的log event可以理解成模板,但是问题来了,我们解析完成时才会生成结构化日志和模板,那么这个时候的模板是怎么来的?什么样子的?)


image.png

log event参照图2(上面有)

seq(i)表示这个sequence中的第i个token,n是信息的长度。方程equ的定义如公式二。

t1和t2是两个token。在找到simSeq最大的日志组之后,我们将其与预定义的相似度阈值st进行比较。如果simSeq ≥ st,那么就返回这个分组作为最相似的日志组。否则,就返回一个flag(python是None)来表示没有合适的日志组。

5、更新解析树

如果在上一个步骤中找到了合适的日志组,就把当前日志的ID添加到日志组的后面。



如果没有找到,就要创建一个新的日志组,并且更新解析树


这里有一点要注意一下:首先根据日志内容的长度分类,构建根节点,然后再根据设定的deepth,比如深度是2,第一层就是根节点root,第二层就是长度。比如深度是3,第三层就是第一个单词。以此类推。以深度为3为例,如果root(第一层),长度(第二层),第一个单词(第三层)都相同,就是一个节点。然后在经过step4的计算,遍历所有长度相同第一个单词也相同的日志,来计算step4中的相似度,并且和设定好的相似度阈值对比,如果符合就合并到一个group里,如果不符合就分裂成两个叶子节点。
如果第三层不同,则分裂成两个节点。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354