一种基于知识图谱的云原生系统故障分析方法转让专利
申请号 : CN202011554734.6
文献号 : CN112540832B
文献日 : 2022-01-28
发明人 : 陈鹏飞 , 陈彩琳 , 郑子彬
申请人 : 中山大学
摘要 :
权利要求 :
1.一种基于知识图谱的云原生系统故障分析方法,其特征在于,包括:获取云原生系统中的原始数据,并基于所述原始数据构建知识图谱,得到图数据,所述原始数据包括实体信息和网络连接数据,所述获取云原生系统的原始数据包括:获取云原生系统中的所述实体信息,所述实体包括容器,Process和File;通过nsenter工具进入容器的命名空间,将宿主机的netstat文件所在目录挂载到容器的文件系统上;在容器中执行nsenter命令获取所述网络连接数据;
所述基于所述原始数据构建知识图谱,得到图数据包括:对所述原始数据依次进行实体抽取、实体关系抽取以及实体属性抽取,其中,所述实体属性包括静态属性和动态属性;基于抽取的所述实体、所述实体关系以及所述实体属性构建知识图谱,得到图数据;
通过异常检测模型对所述图数据进行异常检测,得到异常节点;
计算所述异常节点和所述异常节点对应的副本节点的相似度,并基于所述相似度进行故障根因定位,其中,所述异常节点对应的副本节点为与所述异常节点同类型的节点。
2.根据权利要求1所述的基于知识图谱的云原生系统故障分析方法,其特征在于,所述计算所述异常节点和所述异常节点对应的副本节点的相似度,并基于所述相似度进行故障根因定位,包括:
计算所述异常节点和所述异常节点对应的副本节点的动态属性相似度、静态属性相似度,分别得到动态属性相似度分值和静态属性相似度分值;
基于所述动态属性相似度分值和所述静态属性相似度分值确定异常属性。
3.根据权利要求2所述的基于知识图谱的云原生系统故障分析方法,其特征在于,计算所述异常节点和所述异常节点对应的副本节点的动态属性相似度,得到动态属性相似度分值,包括:
获取预置时间段内所述异常节点和所述异常节点对应的副本节点的动态属性,生成异常节点动态属性向量和副本节点动态属性向量;
计算所述异常节点动态属性向量和所述副本节点动态属性向量的余弦相似度,得到动态属性相似度分值。
4.根据权利要求2所述的基于知识图谱的云原生系统故障分析方法,其特征在于,计算所述异常节点和所述异常节点对应的副本节点的静态属性相似度,得到静态属性相似度分值,包括:
对所述异常节点的静态属性、所述异常节点对应的副本节点的静态属性依次进行分词、停用词过滤和oneHot编码,分别得到异常节点文本向量和副本节点文本向量;
计算所述异常节点文本向量和所述副本节点文本向量的余弦相似度,得到静态属性相似度分值。
5.根据权利要求1所述的基于知识图谱的云原生系统故障分析方法,其特征在于,所述通过异常检测模型对所述图数据进行异常检测,得到异常节点,包括:提取所述图数据中各节点的有向拓扑关系,得到邻接矩阵,提取所述图数据中各节点的属性,得到属性矩阵;
通过异常检测模型对所述邻接矩阵和所述属性矩阵进行异常检测,得到异常节点。
6.根据权利要求5所述的基于知识图谱的云原生系统故障分析方法,其特征在于,所述异常检测模型包括编码器和解码器;
所述通过异常检测模型对所述邻接矩阵和所述属性矩阵进行异常检测,得到异常节点,包括:
通过所述异常检测模型中的所述编码器对所述邻接矩阵和所述属性矩阵进行编码处理,得到编码特征向量,并将所述编码特征向量和所述邻接矩阵输入到所述解码器;
通过所述异常检测模型中的所述解码器结合所述邻接矩阵和所述编码特征向量进行解码处理,得到重构邻接矩阵和重构属性矩阵;
通过所述异常检测模型基于所述邻接矩阵、所述属性矩阵和所述重构邻接矩阵、所述重构属性矩阵计算重构误差,并基于所述重构误差确定异常节点。
7.根据权利要求6所述的基于知识图谱的云原生系统故障分析方法,其特征在于,所述编码器包括依次连接的图卷积网络和递归神经网络;
所述通过所述异常检测模型中的所述编码器对所述邻接矩阵和所述属性矩阵进行编码处理,得到编码特征向量,包括:通过所述图卷积网络将所述邻接矩阵和所述属性矩阵映射到低维空间,得到低维特征向量;
通过所述递归神经网络对所述低维特征向量进行特征提取,得到编码特征向量。
8.根据权利要求6所述的基于知识图谱的云原生系统故障分析方法,其特征在于,所述解码器包括拓扑结构重构模块和属性信息重构模块,其中,所述属性信息重构模块包括依次连接的递归神经网络和图卷积网络;
所述通过所述异常检测模型中的所述解码器结合所述邻接矩阵和所述编码特征向量进行解码处理,得到重构邻接矩阵和重构属性矩阵,包括:通过所述拓扑结构重构模块对所述编码特征向量进行解码处理,得到重构邻接矩阵;
通过所述属性信息重构模块中的所述递归神经网络对所述编码特征向量进行解码处理,得到输出结果;
通过所述属性信息重构模块中的所述图卷积网络基于所述邻接矩阵对所述输出结果进行解码处理,得到重构属性矩阵。
说明书 :
一种基于知识图谱的云原生系统故障分析方法
技术领域
背景技术
包、微服务部署的方式将应用程序解耦到多个服务中。然而,在这种微服务的架构中,一个
应用可以产生数百甚至数千个微服务,并且这些微服务之间往往具有错综复杂的交互关
系。云原生系统庞大的微服务架构和海量的告警、指标数据,给运维工作带来极大的挑战和
压力。一旦出现问题,将给企业带来重大的业务影响,造成巨大的业务损失。
系统的故障定位难度更大。而现有的故障定位方法忽略了实体之间的交互关系,只能定位
到发生故障的实体,难以快速和准确地定位云原生系统的故障根因。
发明内容
系统的故障根因的技术问题。
据进行异常检测,得到异常节点;计算异常节点和异常节点对应的副本节点的相似度,并基
于相似度进行故障根因定位,其中,异常节点对应的副本节点为与异常节点同类型的节点。
的图数据进行异常检测,得到异常节点,考虑了云原生系统中各实体之间的相互关系,可以
快速和准确地定位故障;并且本申请通过计算异常节点与异常节点为同类型的节点的相似
度,来进一步进行故障根因定位,可以更加细粒度和准确地定位到故障根因,解决了现有技
术忽略了实体之间的交互关系,只能定位到发生故障的实体,难以快速和准确地定位云原
生系统的故障根因的技术问题。
附图说明
申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可
以根据这些附图获得其它的附图。
具体实施方式
系统的故障根因的技术问题。
申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在
没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
生系统。构建Kubernetes云原生系统的知识图谱需要获取云原生系统中各实体及实体之间
的依赖关系,并从每个实体的众多属性中筛选出主要的属性。
的获取。该方法对云原生系统的侵入性太强,安全性和可靠性较低,甚至会对云原生系统产
生一定程度的影响。为了解决该问题,本申请实施例采用一种非侵入式的数据获取方法,该
过程需要获取各个资源实体信息以及微服务或Pod之间的网络连接数据。
及Paramiko这三个第三方工具库。各类实体(资源对象)的获取方式可以简单分为三种,具
体实体的获取方式可以参考表1。
上创建具有Admin权限的ServiceAccount,并获取APIServer的地址和Token,作为远程访问
APIServer的许可凭证。Kubernetes client‑Python模块提供了非常便捷的API和Model,例
如可以利用以下脚本获取指定命名空间(namespace)的所有Pod实体信息:
息。因此,该脚本编写的数据获取工具适用于不同规模的集群。其他的资源对象也是类似的
获取方式,在此不再进行赘述。
实施例采用DockerremoteAPI获取Container和Image相关信息。DockerremoteAPI是从
Dockerd获取数据的接口,Docker‑py模块是DockerremoteAPI的封装。Docker‑py也提供了
便捷的API和Model,可以一次性获取指定宿主机上的所有Container或Image,也可以获取
指定ID的Container或Image。
命令,并将执行命令所得结果返回到本地客户端。例如,利用以下脚本获取指定pid的进程
打开的所有文件:
的Container是动态运行的,出于安全性考虑,Container是不允许动态挂载文件目录的,因
此,传统的挂载方法无法在运行的Container中挂载宿主机的文件目录。
已经集成到Linux中。通过nsenter工具进入容器的命名空间(包括进程空间、文件空间、网
络空间),将宿主机的netstat文件所在目录挂载到容器的文件系统上,在容器中执行
nsenter命令获取网络连接数据。本申请实施例只利用nsenter工具进入到容器的命名空
间,读取相关文件空间的信息用于执行文件挂载等操作,并不会直接修改容器的源码,对容
器造成的影响几乎可以忽略不计,因此使用该netstat工具并不具有侵入性,并且是安全
的。
对应进程,进入该进程的名称空间。接着将宿主机的/bin目录挂载到容器的/mnt文件目录
中,此时,进入容器内部,在/mnt目录下执行netstat指令可以获取内部网络连接数据。获取
的TCP连接形式可以参考表2。将这些TCP连接数据进行处理,抽取每个连接的ip地址,并找
出该ip地址对应的两个Pod实体,并在实体依赖图中,添加这两个Pod实体的一个连接关系。
行实体抽取、实体关系抽取以及实体属性抽取。
为:file—opened→process。
Container,但是每一个Container只能与一个Image相对应。这两者的关系可以描述为:
image—spawn→container。
联系起来。这两者是一对一的关系,可以描述为:process—mapping→container。
Container,这些Container共享同一个Pod的资源。因此可以描述为:container—running
→pod。
可以由ReplicaSet和DaemonSet部署而来。每个Pod会在其配置文件中记录Pod的owner的相
关信息,可以利用该信息将Pod与ReplicaSet联系起来。Pod与ReplicaSet之间是多对一的
关系,可以将两者关系描述为:pod—replica→replicaSet。
ReplicaSet与Deployment联系起来。ReplicaSet与Deployment是多对一的关系,两者的关
系可以描述为:replicaSet-comprise→deployment。
不同小组以及多个项目之间的资源隔离。每个Deployment只能属于集群中的其中一个
Namespace,并且由这个Deployment部署而来的Pod等对象实体也都属于该Namespace。
Deployment的配置文件中记录了所属的Namespace信息。Deployment与Namespace是多对一
的关系,两者的关系可以描述为:deployment—deployed→namespace。
者可以通过Pod关联起来。每个Namespace中的Pod编排在不同的Node上,因此每个
Namespace会有多个Node与其关联,每个Node也可以被多个Namespace共用,两者是多对多
的关系,两者关系可以描述为:namespace—host→node。
selector和Pod建立关联。Kubernetes会为配置有label selector的service创建对应的
endpoint(主要包括pod IP和podport信息)资源对象,并存储在Etcd中,利用该endpoint可
以将Service与对应的所有Pod关联起来。三者的关系可以描述为:service—binding→
endpoint—register→pod。
个连接的主要数据包括local address IP、foreign address IP、status这三个字段,这里
提取出local address IP以及foreign address IP,这两个IP是该集群给两个Pod实体分
配的IP地址,并且该连接是没有方向的,因此,Pod之间的联系可以描述为:pod←tcp→pod。
port等配置信息。这些信息不会随着组件的运行而发生变化,一般比较稳定,一旦改动,可
能会引起一些故障,因此可以作为故障检测的关键指标。
构建实体依赖关系模型,从node节点到namespace节点,从namespace节点到deployment节
点等,一层一层自上而下构建实体依赖关系模型,根据构建的实体依赖关系模型可以采用
图数据表示,请参考图3,每一个实体对应图数据中的一个节点,并且该节点具有多个属性,
实体之间的关系映射为图数据中的边,每条边可以有多个属性值;属性与属性值以key‑
values模式存储。建模好的图数据利用Neo4j图数据库或其他数据库进行存储,借助内置
Cypher查询语句,能完成高效的查询工作。其中,图数据的构建过程可以参考图4。
之间有连接边eij∈E,Aij=0表示实体i和实体j(i、j∈V)之间没有连接边;提取图数据中各
节点的属性,得到属性矩阵X,属性矩阵X由矩阵中各个实体的属性拼接而成,主要选取的属
性是具有时序特征的动态属性,例如一段时间内的CPU的使用率、网络的传输和接收带宽、
时延等来诊断异常节点。通过异常检测模型对邻接矩阵和属性矩阵进行异常检测,得到异
常节点。
谱,异常检测模型通过重构误差大小衡量节点的异常程度。具体的,通过异常检测模型对邻
接矩阵和属性矩阵进行异常检测,得到异常节点,包括:
邻接矩阵和编码特征向量进行解码处理,得到重构邻接矩阵和重构属性矩阵;通过异常检
测模型基于邻接矩阵、属性矩阵和重构邻接矩阵、重构属性矩阵计算重构误差,并基于重构
误差确定异常节点。
实体之间的拓扑依赖关系,利用拉普拉斯矩阵将节点的属性进行降维,映射到低维空间中。
RNN每次都会将前一次的输出结果,带到下一次的隐藏层中一起训练,能够很好地建立起相
邻时刻的指标数据的关系。因此,采用GCN和RNN结合的方式可以有效从时间和空间两个方
面挖掘云原生系统知识图谱的信息,快速排查出异常节点。可以理解的是,也可以采用LSTM
(Long Short‑Term Memory,长短期记忆)网络替代RNN。
矩阵A和属性矩阵X映射到低维空间,得到低维特征向量;通过递归神经网络对低维特征向
量进行特征提取,得到编码特征向量Z。
W 为第l层的权重矩阵,σ(·)为激活函数,具体可以选择ReLU或者sigmoid
等激活函数,本申请实施例优选采用ReLU激活函数,计算公式如下:
卷积网络将输入数据映射到低维特征向量X ,计算过程如下:
的输入数据X 中,每个节点对应的属性序列是一个具有时间序列特征的属性向量,RNN模
型的具体计算过程如下:
隐藏层之间的权重矩阵,v为隐藏层和输出层之间的权重矩阵,f(·)、g(·)为激活函数,分
别为sigmoid激活函数和softmax激活函数,计算公式如下:
结构的重构;另一部分是属性矩阵的解码,即属性信息的重构。因此,解码器包括拓扑结构
重构模块和属性信息重构模块,其中,属性信息重构模块包括依次连接的递归神经网络和
图卷积网络。
理,得到重构属性矩阵。
需要借助编码器输入的邻接矩阵辅助属性矩阵的重构。可以理解的是,也可以采用LSTM替
换RNN。
结果即为重构属性矩阵 重构属性矩阵、重构邻接矩阵与原始输入数据的误差是后续异
常节点检测的关键。
构误差。
因此,可以借助副本之间的相似度来比较发现故障根因。本申请实施例采用局部对比的方
法,将异常节点与其对应的副本节点进行比较,计算异常节点和异常节点对应的副本节点
的动态属性相似度、静态属性相似度,分别得到动态属性相似度分值和静态属性相似度分
值;基于动态属性相似度分值和静态属性相似度分值确定异常属性。其中,异常节点对应的
副本节点为与异常节点同类型的节点,即异常节点与其对应的副本节点对外提供同一服
务。
属性,生成异常节点动态属性向量和副本节点动态属性向量;计算异常节点动态属性向量
和副本节点动态属性向量的余弦相似度,得到动态属性相似度分值。具体的,可以计算异常
节点和异常节点对应的副本节点的CPU的使用率、网络的传输和接收带宽、内存使用率等动
态属性的相似度,本申请实施例优选采用余弦相似度计算方法,也可以采用其他的相似度
计算方法,在此不再一一列举。
以借助副本之间的相似度比较来发现根因。对于静态属性,这些属性一般是文本类型的,可
以使用文本相似度进行比较,也可以采用其他的相似度计算方法,在此不再一一列举。本申
请实施例优选采用余弦相似度进行比较,具体过程为:
文本向量和副本节点文本向量的余弦相似度,得到静态属性相似度分值。
的整体架构可以参考图5。
赖关系的图数据进行异常检测,得到异常节点,考虑了云原生系统中各实体之间的相互关
系,可以快速和准确地定位故障;并且本申请通过计算异常节点与异常节点为同类型的节
点的相似度,来进一步进行故障根因定位,可以更加细粒度和准确地定位到故障根因,解决
了现有技术忽略了实体之间的交互关系,只能定位到发生故障的实体,难以快速和准确地
定位云原生系统的故障根因的技术问题。
全可靠;本申请实施例同时考虑云原生系统中的指标数据以及组件拓扑关系,可以更加准
确定位到故障根因;并且从时间和空间两个维度对各个异常组件的动态属性和静态属性进
行根因排查,可以更加细粒度地定位到故障的根因。
仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结
合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的
相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通
信连接,可以是电性,机械或其它的形式。
网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目
的。
元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式
体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以通过一台计算机
设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全
部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文全称:Read‑Only
Memory,英文缩写:ROM)、随机存取存储器(英文全称:RandomAccess Memory,英文缩写:
RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些
修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。