基于联邦学习技术的分布式系统日志解析方法

文档序号:28868124发布日期:2022-02-12 10:28阅读:188来源:国知局
基于联邦学习技术的分布式系统日志解析方法

1.本发明涉及软件开发领域,特别涉及一种基于联邦学习技术的分布式系统日志解析方法。


背景技术:

2.系统日志包含重要的系统运行信息,这些信息对于系统的开发和维护有着重大的意义。在对日志数据进行分析前,如进行异常检测等,需要先将日志解析,即提取日志模板并将包含原始日志消息的日志数据集转换为结构化的表。因此,很多自动日志解析方法被提出。但随着分布式软件系统的迅速发展,产生数量巨大的日志数据,且分布在地理跨地较大的本地服务器中,现有方法无法适用于分布式系统。


技术实现要素:

3.本发明的目的在于克服现有技术的不足,提供一种基于联邦学习技术的分布式系统日志解析方法,适用于分布式系统的日志解析。
4.为了实现上述目的,本发明采用的技术方案为:基于联邦学习技术的分布式系统日志解析方法,包括建立本地服务器和中央服务器的联系,在本地服务器建立神经网络模型用于解析本地的日志数据,所述中央服务器用于更新每个本地服务器中的神经网络模型参数。
5.所述中央服务器用于跟新每个本地服务器中的神经网络模型参数包括如下步骤:
6.(1)本地服务器使用本地的日志数据集训练建立神经网络模型;
7.(2)所有本地服务器向中央服务器传输本地训练建立的神经网络模型的参数;
8.(3)中央服务器收集所有的模型参数后,求得所有本地模型参数的平均值;
9.(4)平均模型参数传输给所有本地服务器;
10.(5)本地服务器将平均模型参数用于本地模型的更新,更新后开始解析本地的日志数据。
11.本地服务器中训练并建立的神经网络模型为一个自监督学习模型。
12.本地服务器向中央服务器传输模型参数包括:本地服务器将模型参数保存为字典,字典的键为模型名,值为模型所有的参数值;其中参数值也是一个字典,键是参数名,值是其参数矩阵;每个本地服务器建模完成后,都将自身的模型参数加入字典中。
13.中央服务器求取参数平均值包括:中央服务器收到所有本地服务器上传的本地模型参数的字典后,对每个参数值求平均:首先中央服务器将所有的模型名提取出来备用;然后,再创建一个字典all_para_dict用来保存参数在所有模型的值,键是参数名,值是一个列表,保存对应参数名在所有模型中的参数值;最后取all_para_dict字典中每个值得平均数,将求取的平均值保存在平均参数的字典avg_para_dict中,键为参数名,值为参数的平均值。
14.中央服务器将上述求得的平均参数字典avg_para_dict传输给每个本地服务器,
用于每个本地服务器对于神经网络模型参数的更新。
15.本地服务器取得中央服务器传来的平均参数字典avg_para_dict后,更新本地模型参数,以更新参数后的神经网络模型解析对应的本地服务器中的日志数据。
16.本发明的优点在于:更加适用于分布式系统的日志解析,对于分布式系统的日志解析更加准确、可靠,同时解析效率更高,具有较好的鲁棒性;考虑了分布式系统产生的日志文件不仅数量巨大,且分布在各地的本地服务器中的问题,只在本地进行日志解析,避免了日志数据的传输,减少需要处理的日志数据量。
附图说明
17.下面对本发明说明书各幅附图表达的内容及图中的标记作简要说明:
18.图1为日志解析示意图;
19.图2为本发明基于联邦学习的深度学习日志解析方法框架流程示意图;
20.图3a为本发明保存模型参数的字典model_para_dict示意图;
21.图3b为本发明保存参数在所有模型中的值的字典all_para_dict示意图;
22.图3c为本发明保存平均参数的字典avg_para_dict示意图;
具体实施方式
23.下面对照附图,通过对最优实施例的描述,对本发明的具体实施方式作进一步详细的说明。
24.随着软件系统规模的不断扩大,以及云计算的不断发展,形成越来越多的大型分布式软件系统,这就意味着产生的日志数据体积会更大,分布会更广,这使得人工分析每条日志消息不现实;日志消息是由自然语言组成的形式自由的文本,没有统一的规定,也没有被结构化表示。因此在对日志数据进行分析之前需要对日志进行解析,即提取每条原始日志消息的模板并使之成为结构化的表,使用结构化的日志数据大大降低了日志分析的难度。日志文件产生于源代码中的logging语句,如loginfo()语句,是由开发者用自己的自然语言组织的形式自由的文本,记录系统运行的关键信息。如图1列举了一段代码及其产生的一条日志消息,以及结构化的日志消息。一条日志消息是由头部和内容组成,消息头部包括日期和时间(17/06/09 20:11:10)、等级level(info)、产生位置component(storage.blockmanager)(来自不同系统的日志消息有着不同的头部信息这里以图中的日志消息为例),消息内容由开发者的记录文字(常量部分,如found block rdd_locally)和系统变量(变量部分,如$blockid)组成。日志解析就是提取消息头部的各信息、消息内容以及日志模板(由消息内容中的常量部分和被通配符取代的变量部分组成。传统的日志解析方法为人工制定正则表达式,根据代码中的相关语句,人工找出常量部分和变量部分,显然,这种方法需要源代码和专业的领域知识,且费时费力,面对巨大的日志数据是不现实的,而现有技术nulog技术属于深度学习解析的方法,能够更好的分析日志消息中的信息和日志消息间的关系,对各种不同系统的数据集有较好的适应性,然而nulog的效率非常低,解析时间过长,严重影响了下游的日志分析工作,其并不适用于分布式系统。本技术就是针对现有技术的不足,提供fedlog,一种基于联邦学习的分布式系统日志解析方法。首先fedlog使用深度学习方法在每个本地服务器上利用本地的日志数据集建立本地神经网络
模型;然后,所有本地服务器将本地模型参数传输给中央服务器;随后,中央服务器将所有模型的参数后,取所有模型参数的平均值;最后,中央服务器将一组平均模型参数传输给所有本地服务器,所有本地服务器用平均模型参数更新自己的本地模型,随即开始解析本地的日志数据。
25.针对现有技术不同系统产生的日志消息之间有较大的差别,现有方法无法适用于所有系统产生的日志数据。在我们提出fedlog,一种基于联邦学习的分布式系统日志解析方法,采用深度学习方法,通过建立神经网络模型来解析日志。fedlog只需在本地服务器中建模,由中央服务器指导本地模型的更新后在本地进行解析。在五种来自不同系统的日志数据集上进行了实验,实验表明本方法在所有数据集上的准确性都非常高,而基线方法不能适用于所有数据集。我们还对fedlog的鲁棒性和运行时间效率进行了实验评估,结果表明我们的方法具有稳定性和高效率。
26.我们方法的输入是每个本地服务器中的日志数据集,输出是日志模板以及结构化的日志数据集。图2展示了我们方法的结构和流程。如图所示我们的方法包括以下五个步骤:1)本地服务器同时使用本地的日志数据集训练建立神经网络模型;2)所有本地服务器向中央服务器传输本地训练建立的神经网络模型的参数;3)中央服务器收集所有的模型参数后,求得所有本地模型参数的平均值;4)平均模型参数传输给所有本地服务器;5)本地服务器将平均模型参数用于本地模型的更新,随即开始解析本地的日志数据。我们将下面部分详细介绍fedlog。
27.步骤1:本地服务器建模
28.本地服务器使用本地的日志数据集(日志数据集由多条日志消息组成并以文本的形式保存。每条日志消息是由开发者在相应的代码中打印的描述系统运行行为的语句。),训练并建立神经网络模型。该模型为一个自监督学习模型,并将解析任务看做隐藏语言建模(mlm)[],由两个部分组成:multiheadattention和两个前馈神经网络,最后是一个softmax激活函数。下面简单介绍模型建立的过程。首先,将每条日志消息进行简单的预处理,使之可以作为模型的输入。预处理分为令牌化和屏蔽两个步骤。1)令牌化:将每条原始的日志消息根据简单的规则进行分割,如“found block rdd_42_25locally”,按空格分割为令牌序列[

found’,

block’,

rdd_42_25’,

locally’]。注意,与其他方法不同的是,我们的方法不需要手动制定正则表达式来匹配ip地址或url等。2)屏蔽:随机选取令牌序列中的令牌用《mask》代替,令牌将作为预测目标,然后在令牌序列的开头添加《cls》和填充《spec》。第二,将处理好的令牌序列输入神经网络模型之前将其转换为令牌嵌入向量并进行位置编码。第三,将嵌入向量输入一个包含multi-head attention和feedforward network的神经网络结构。最后,模型的最后一个结构是一个线性层,它的输入是《cls》对应的令牌嵌入向量,输出是大小为|t|(t是所有日志消息的令牌,|t|为令牌总数)的向量,随后利用softmax计算每个t的概率分布。本地服务器经过上面描述的过程训练并建立神经网络模型。由于每个本地服务并行地建模,而且每个本地服务器中的日志数据集有大量的交叉,本地训练过程中的epoch可以减少,甚至为1,但整体的epoch相当于n(n为本地服务器数量),因为宏观上来看,相当于训练了来自所有本地服务器的所有样本n次。
[0029]
步骤2:本地服务器向中央服务器传输参数
[0030]
如图3(a)所示,本地服务器将模型参数保存为字典(model_para_dict),键为模型
名,值为模型所有的参数值,其中参数值也是一个字典,键是参数名,值是其参数矩阵。每个本地服务器建模完成后,都将自身的模型参数加入字典中。
[0031]
步骤3:中央服务器求参数平均值
[0032]
中央服务器收到有着所有本地模型参数的字典后,对每个参数值求平均。首先中央服务器将所有的模型名提取出来备用;然后,如图3(b)所示,再创建一个字典(all_para_dict)用来保存参数在所有模型的值,键是参数名,值是一个列表,保存了对应参数名在所有模型中的参数值;最后取all_para_dict字典中每个值得平均数,得到如图3(c)所示的保存平均参数的字典avg_para_dict,键为参数名,值为参数的平均值。
[0033]
步骤4:中央服务器向本地服务器传输平均参数
[0034]
中央服务器将上述求得的平均参数字典avg_para_dict传输给每个本地服务器,随后进入步骤5。
[0035]
步骤5:本地服务器用平均参数更新模型并开始解析本地服务器取得中央服务器传来的平均参数字典avg_para_dict后,用于更新本地模型。具体来说就是,更改本地模型的参数为平均参数。这里要注意的是,我们不更改与模型中间神经网络训练部分无关的参数,如训练令牌嵌入向量的产生的参数(src_embed.0.lut.weight和tgt_embed.0.lut.weight)和最后产生输出的线性层的参数(generator.proj.weight和generator.proj.bias)。此外这些参数与本地的数据集有很大的关系,和本地日志消息的令牌种类数有关,所以求其在所有本地模型中的均值是没有意义的。本地服务器使用更新后的本地模型进行日志解析,将本地服务器中的日志消息作为输入,转换为令牌嵌入序列后,连续屏蔽每个令牌,模型输出为对每个屏蔽令牌的预测,如果成功预测,则被屏蔽的令牌为常量部分,否则为变量部分。因此我们模型的输出是日志模板和可用于下游日志分析任务的令牌嵌入向量。
[0036]
针对上述方法,在五个来自不同系统的日志数据集[]上进行实验评估,包括来自分布式系统hdfs和spark的日志数据集,来自超级计算机bgl的日志数据集,来自操作系统windows的日志数据集以及来自移动设备系统的healthapp。每种数据集中有200k条日志消息,我们从中分别随机提取2k条日志消息并手动提取模板和结构化作为答案,用来评估准确性,实验表明我们的方法在所有数据集上都有较高的准确性,而基线方法并不能适用于所有数据集。使用全部数据集来评估鲁棒性和效率,实验表明本技术解析方法性能更加优秀。具体如下:
[0037]
1、考虑了分布式系统产生的日志文件不仅数量巨大,且分布在各地的本地服务器中的问题,只在本地进行日志解析,避免了日志数据的传输,减少需要处理的日志数据量;
[0038]
2、基于深度学习方法,能够适用于不同系统产生的日志数据集;
[0039]
3、基于联邦学习技术,中央服务器收集所有本地模型参数,并帮助本地服务器更新模型,进一步减少了本地建模的工作量,效率大大提升。
[0040]
为了验证本技术解析方法进行验证如下:
[0041]
实验设置
[0042]
使用来自loghub[]的日志数据集。loghub提供了17个真实的日志数据集,收集自不同的系统:有来自分布式系统的hdfs、hadoop、spark、zookeeper和openstack;来自超级计算机的bgl、hpc和thunderbird;来自操作系统的windows、linux和mac;来自移动设备系
统的android和healthapp、来自服务器应用程序的apache和openssh;来自独立软件的proxifier。选择其中五个数据集用于实验评估,如表i所示,包括来自分布式系统hdfs和spark的日志数据集,来自超级计算机bgl的日志数据集,来自操作系统windows的日志数据集以及来自移动设备系统的healthapp。每种数据集随机选取200k条日志消息,其中,随机选取2k条日志消息并手动解析出答案,用来评估fedlog的准确性。评估标准我们使用解析精度,健壮性和运行效率来评估日志解析方法的性能。我们定义解析精度为:
[0043]
accuracy=an/ln
[0044]
其中,an表示被正确解析的日志消息数,ln表示日志消息的总数。运行效率是指,从开始预处理日志消息到日志模板提取完成并结构化需要花费的时间,对于我们的方法还包括训练建立神经网络模型的时间、中央服务器处理的时间以及本地模型更新的时间。
[0045]
基线方法:
[0046]
通过和现有的八种较为流行的日志解析方法做比较,对fedlog进行评估,下面是这八种方法的简介:
[0047]
·
ael[]:脱机模式方法,利用启发式规则对日志消息分组,最后提取每组的模板。
[0048]
·
drain[]:联机模式方法,通过构造固定深度的解析树来指导对日志消息的搜索,解析树的结点中编码了特殊的解析规则,叶子节点为按模板分好组的日志消息集合。
[0049]
·
iplom[]:脱机模式方法,利用启发式规则进行三次划分,把日志消息划分到不同的分组中,最后一步给每个分组一个总结性描述,即产生日志模板。
[0050]
·
shiso[]:联机模式方法,利用聚类算法,持续聚类划分日志消息。方法分为两个阶段,搜索阶段和调整阶段。搜索阶段,在树中为新来的日志搜索相似的模板,合并或插入。调整阶段,利用n-gram方法,合并模板。
[0051]
·
spell[]:联机模式方法,利用最长公共子序列,依次处理每一条日志消息并产生最长公共子序列,保存在创建的数据结构中。
[0052]
·
logmine[]:脱机模式方法,基于聚类算法中的分层聚类算法,在每个簇中产生日志模板。
[0053]
·
lke[]:联机模式方法,基于聚类算法,把每条日志消息转换为单词长度向量,计算每两对向量之间的余弦相似度,以及每对日志消息对应位置相同的单词的数量,都达到阈值,才能确定为同一类型。
[0054]
·
lfa[]:脱机模式方法,基于频繁模式挖掘技术,基于观察:某个event的参数部分多次出现,且值各不相同,并且常量部分的单词比属于变量部分的单词的出现频次高。
[0055]
·
nulog:脱机模式方法,使用日志消息作为训练集训练神经网络模型,训练完成后,每条消息作为输入,输出为日志模板。
[0056]
实验结果
[0057]
在这个部分,我们将从准确性、鲁棒性和效率三个方面评估我们的方法。
[0058]
1)准确性:使用loghub中的五个来自真实世界的日志数据集,从每个数据集中随机选取2k条日志消息,并手动提取每条日志消息的模板作为答案用来评估方法的准确性。随机选择是为了保留原来整体数据集的关键特征以及为了覆盖更多的系统运行事件类型。表ii展示了我们的方法和基线方法在五个数据集上的准确性,每一列展示了
[0059]
表i
[0060]
数据集说明
[0061][0062]
每个日志解析方法在不同数据集上的解析精度,每一行展示了每个数据集使用不同日志解析方法的解析精度。最后一行是每个日志解析方法在所有数据集上的解析精度平均值,最后一列是每个数据集使用不同日志解析方法的解析精度平均值。用粗体标出所有不低于0.9的解析精度。从表ii中可以看出我们的方法解析精度方面有着优异的表现,平均解析精度达0.96,在四个数据集上的解析精度在0.98左右,和nulog相差无几。仅次于他们的是drain方法,解析精度为0.93,但在healthapp中的解析精度不足0.8。logmine、lke和lfa仅在一个数据集上取得较好的解析精度。iplomo、speii和lke在hdfs上的解析结果达到了100%的正确率,但并不能适用于其他数据集,在所有数据集上的平均解析精度较低。此外,我们还可以观察到,对于数据集hdfs,平均解析精度高达0.97,这是因为hdfs的日志消息较为简单,容易被解析。相反,对于数据集healthapp,平均解析精度仅有0.64,这是因为healthapp中的日志消息比较短,导致信息不足。bgl的平均精度也不高,因为bgl中有”generate core.《*》”这样的模板,会产生大量”generate core.34”和”generatecore.59”这样的日志消息,然而大多数方法会因为这两个消息出现的频繁而误认为这是两个不同的日志模板。
[0063]
表ii
[0064]
在数据集上的准确性
[0065][0066]
显然本发明具体实现并不受上述方式的限制,只要采用了本发明的方法构思和技术方案进行的各种非实质性的改进,均在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1