日志解析Spell方法

论文名称:
Spell: Streaming Parsing of System Event Logs

1、简介

spell的定义.png

1、Spell指的是:一个基于LCS(最长公共子序列)的结构化流式事件日志解析器。
2、spell算法以在线流的方式,将非结构化的日志消息解析成结构化的日志类型和参数。
3、处理每个日志条目e的时间复杂度接近于线性(和e的大小线性相关),比drain小多了。

2、Spell

1、LCS问题
image.png

LCS就是最长公共子序列。

这个例子简单明了,所谓的最长公共子序列,就是求交集。

2、基本符号与数据结构

在一个日志条目中,我们将一个单词(word)称作一个标记(token)。根据日志的格式,可以使用系统定义的(或者用户自定义的)分隔符将日志条目e解析为一组token。一般来说像是空格或者等号这样的分隔符足以涵盖大多数的情况。

在对一个日志条目进行标记化处理之后,每一个日志条目都被转换成一个“标记”的序列,我们要用这些“标记”的序列来计算最长公共子集。

每个日志条目都被分配一个惟一的行id,初始化为0,并在新日志条目到来时自动递增。

我们创建一个LCSObject的数据结构保存序列和相关的元数据信息。

我们使用LCSseq表示一个序列,它是多个日志消息的LCS(最长公共子序列),(在我们的设置中)它是这些日志条目的消息类型(日志模板)的候选。

也就是说,每个LCSObject包含一个LCSseq和一组行索引(称为lineIds),这些行索引存储指向这个LCSseq的相应日志条目的行id。

最后,我们将当前解析的所有LCSObjects存储到一个名为LCSMap的列表中。当一个新的日志条目ei到达时,我们首先将它与LCSMap中现有LCSObject中的所有LCSseq进行比较,然后根据结果,将行id i插入现有LCSObject的直线,或者计算一个新的LCSObject并将其插入到LCSMap中。

3、基本工作流
图1.png

我们的算法以流方式运行,如图1所示。

最初,LCSMap列表是空的。

当到达一个新的日志项 ei 时,首先使用一组分隔符将其解析为一个标记(token)序列 si 。在此之后,我们将 si 与当前LCSMap中所有LCSObject中的LCSseq进行比较,以查看 si 是否“匹配”现有LCSseq中的一个(如果匹配到了,行id i被添加到对应的LCSObject的行id中),或者(如果没有匹配到)我们需要为LCSMap创建一个新的LCSObject。

获取新的LCS

给出一个新的日志序列s,它是由一个新的日志条目e标记化(tokenization)产生的,我们在LCSMap中搜索。

对于第 i 个LCSObject,假设,它的LCSseq是 qi ,我们计算 li 的值, li 是LCS(qi , s)的长度。(简单说就是计算新来的日志序列和现有的模板的的最长公共子集的长度)

当我们在LCSMap中搜索的时候,我们保持最长的 li 值和相对应的LCSObject的索引。

在最后,如果


image.png

比一个阈值τ(tao)大。

τ的默认值为
image.png

|s|表示序列s的长度,也就是说一个日志条目e中token的个数。

我们认为 LCSseq qj 以及新的日志序列s有着相同的信息类型(全文中的信息类型都指的是日志提取的模板)

直观上来说,qj 和 s 的LCS(最长公共子列)是LCSMap中所有LCSObject中LCS的最大值。LCS(qi , s)的长度至少是s长度的一半。

因此,除非,e中的参数值的总长度比它自身长度的一半还要长(这在现实中不太可能),LCS(qi , s)的长度是一个很好的指标(来判断),在第j个LCSObject(它们共享LCSseq qj)中的日志条目是否和 e 共享相同的日志类型(将会是LCS(qi , s))。

如果有多个 LCSObjects 拥有相同的最大的 l 值,我们选择 |qj| 值最小的那一个,因此,它有一个更高的相似性值设置with s。

然后我们使用回溯(backtracking)来生成一个新的LCS序列来表示第 j 个LCSObject中的所有日志条目和 e 的信息类型。

注意,当我们使用回溯来得到这个新的LCSseq qi 和 s 的时候,我们在两个序列不一致的地方标记为“*”,作为参数的占位符。连续的相邻的“*”,会被合并成一个。

一个例子

完成上述操作之后,我们将第 j 个 LCSObject 的 LCSseq 从 qj 更新为 LCS(qj,s),并将 e 的行 id (lineIds)添加到第 j 个 LCSObject 的行 id中。

如果现有的 qi 没有一个与 s 共享长度至少为|s|/2的LCS,我们在LCSMap 中为 e 创建一个新的 LCSObject,并将其 LCSseq 设置为s 本身。
这就完成了Spell算法的基本过程,并且使用这种方法可以成功地解析大多数标准日志。

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

推荐阅读更多精彩内容