一种对Kubernetes的事件分析方法及装置与流程

文档序号:21847492发布日期:2020-08-14 17:13阅读:140来源:国知局
一种对Kubernetes的事件分析方法及装置与流程

本发明涉及数据处理技术领域,尤其涉及一种对kubernetes的事件分析方法及装置。



背景技术:

kubernetes是一个开源的用于管理云平台中多个主机上的容器化的应用,kubernetes的目标是让部署容器化的应用简单并且高效,kubernetes提供了应用自动部署,自动重启,自动复制,负载均衡、自动伸缩、维护、扩展机制等功能。利用kubernetes能方便地管理跨机器容器化的应用,其主要功能包括使用docker对应用程序包装、实例化、运行;解决docker容器编排、调度、跨主机通讯问题;kubernetes的自我修复机制使得容器集群总是运行在用户期望的状态。

kubernetes作为云原生的平台实现,以状态机为整体的设计原则,通过设定期望状态、执行状态转换、检查并补偿状态的方式将资源的生命周期进行接管。状态之间的转换会产生相应的转换事件。事件event作为kubernetes的一个对象资源,记录了集群运行所遇到的各种大事件,以及资源运行过程中的状态转换信息。事件对于用户进行问题定位分析和对服务状态监控有着重要的作用。在kubernetes集群中,事件被存储在etcd中,etcd为内存数据库,存储容量大小有限,不适合存储大容量的数据,因此,如果大量的事件都存储在etcd中,会带来较大的性能与容量压力,所以kubernetes中的事件一般只能保存数小时,之后便会被删除。

事件的丢失不利于对问题的定位,也不利于历史追溯,从而无法通过原始的kubernetes集群工具对事件进行准确分析和告警。



技术实现要素:

由于现有方法存在上述问题,本发明实施例提供一种对kubernetes的事件分析方法及装置。

第一方面,本发明实施例提供了一种对kubernetes的事件分析方法,包括:

根据监听到的kubernetes集群的事件,得到事件信息;

将所述事件信息存入数据库进行持久化保存,并统计所述数据库中与所述事件信息对应的统计信息。

进一步地,所述根据监听到的kubernetes集群的事件,得到事件信息,具体包括:

通过对预先注册的kubernetes集群的监听,获取所述kubernetes集群的事件;其中,所述事件的事件信息包括当前实例对象;

根据预设的当前实例对象与其它实例对象的对应关系,将与所述当前实例对象存在对应关系的其它实例对象,以及所述其它实例对象的资源类型,添加到所述事件信息中。

进一步地,所述与所述当前实例对象存在对应关系的其它实例对象具体为:所述当前实例对象的父级资源的实例对象,或所述当前实例对象的关联资源的实例对象。

进一步地,在所述根据预设的当前实例对象与其它实例对象的对应关系,将与所述当前实例对象存在对应关系的其它实例对象,以及所述其它实例对象的资源类型,添加到所述事件信息中的步骤后,所述对kubernetes的事件分析方法,还包括:

若所述事件信息满足预设的告警触发规则,发送与所述告警触发规则对应的告警通知。

进一步地,在所述若所述事件信息满足预设的告警触发规则,发送与所述告警触发规则对应的告警通知的步骤后,所述对kubernetes的事件分析方法,还包括:

根据各告警触发规则的触发频率,调整对应的各告警通知的发送频率。

进一步地,所述对kubernetes的事件分析方法,还包括:

通过ui接口查询所述数据库中的事件信息,并进行分析。

第二方面,本发明实施例提供了一种对kubernetes的事件分析装置,包括:

事件监听模块,用于根据监听到的kubernetes集群的事件,得到事件信息;

事件存储模块,用于将所述事件信息存入数据库进行持久化保存,并统计所述数据库中与所述事件信息对应的统计信息。

进一步地,所述事件监听模块,具体包括:

事件收集模块,用于通过对预先注册的kubernetes集群的监听,获取所述kubernetes集群的事件;其中,所述事件的事件信息包括当前实例对象;

事件预处理模块,用于根据预设的当前实例对象与其它实例对象的对应关系,将与所述当前实例对象存在对应关系的其它实例对象,以及所述其它实例对象的资源类型,添加到所述事件信息中。

第三方面,本发明实施例还提供了一种电子设备,包括:

处理器、存储器、通信接口和通信总线;其中,

所述处理器、存储器、通信接口通过所述通信总线完成相互间的通信;

所述通信接口用于该电子设备的通信设备之间的信息传输;

所述存储器存储有可被所述处理器执行的计算机程序指令,所述处理器调用所述程序指令能够执行如下方法:

根据监听到的kubernetes集群的事件,得到事件信息;

将所述事件信息存入数据库进行持久化保存,并统计所述数据库中与所述事件信息对应的统计信息。

第四方面,本发明实施例还提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如下方法:

根据监听到的kubernetes集群的事件,得到事件信息;

将所述事件信息存入数据库进行持久化保存,并统计所述数据库中与所述事件信息对应的统计信息。

本发明实施例提供的对kubernetes的事件分析方法及装置,通过监听各kubernetes集群的事件,得到事件信息,并发送到数据库中进行持久化保存,从而使得对kubernetes集群的事件查询和分析更加方便、快捷。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例的对kubernetes的事件分析方法流程图;

图2为本发明实施例的另一对kubernetes的事件分析方法流程图;

图3为本发明实施例的又一对kubernetes的事件分析方法流程图;

图4为本发明实施例的对kubernetes的事件分析装置结构示意图;

图5为本发明实施例的另一对kubernetes的事件分析装置结构示意图;

图6示例了一种电子设备的实体结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为本发明实施例的对kubernetes的事件分析方法流程图,如图1所示,所述方法包括:

步骤s01、根据监听到的kubernetes集群的事件,得到事件信息。

通过预先设置的事件收集器,对各kubernetes集群进行监听,从而收集各kubernetes集群产生的事件,并得到事件所有相关的事件信息。

步骤s02、将所述事件信息存入数据库进行持久化保存,并统计所述数据库中与所述事件信息对应的统计信息。

然后,事件收集器将获取到的各kubernetes集群的事件信息发送给预设的数据库,例如,mongodb数据库等,对所有的事件信息进行持久化保存。

同时,在数据库中查找是否存在相同的事件,若存在,则更新与该事件对应的统计信息,例如,所述该事件最近发生的时间,以及发生的频率和次数等。

数据库将根据事件信息对应的kubernetes集群和命名空间对事件信息进行分区存储,同时为事件信息建立索引信息,以方便后续的查询。

本发明实施例通过监听各kubernetes集群的事件,得到事件信息,并发送到数据库中进行持久化保存,从而使得对kubernetes集群的事件查询和分析更加方便、快捷。

图2为本发明实施例的另一对kubernetes的事件分析方法流程图,如图2所示,所述步骤s01具体包括:

步骤s011、通过对预先注册的kubernetes集群的监听,获取所述kubernetes集群的事件;其中,所述事件的事件信息包括当前实例对象。

在对kubernetes集群进行监听前,所述kubernetes集群需要先在事件收集器进行预先注册,在事件收集器中增加该kubernetes集群的集群配置信息,所述集群配置信息包括:集群名称、集群的kube-apiservr的地址信息、以及访问集群所需要的认证信息等。

事件收集器会对所有预先注册的kubernetes集群发起事件监听请求,监听各kubernetes集群的所有事件,并且对每个kubernetes集群建立独立的线程池和缓存队列以保证事件收集的可靠性和实时性。

步骤s012、根据预设的当前实例对象与其它实例对象的对应关系,将与所述当前实例对象存在对应关系的其它实例对象,以及所述其它实例对象的资源类型,添加到所述事件信息中。

若事件收集器监听到kubernetes集群的事件,则需要对该事件的事件信息进行预处理。由于事件是针对某一资源类型的实例对象的一种记录信息,例如,事件event-a记录的是资源类型type-a的实例对象a1的记录信息,则事件event-a与实例对象a1相绑定,所述a1即为所述event-a的当前实例对象。从所述事件信息中提取出与该事件绑定的当前实例对象。然后根据预先保存的各资源的实例对象之间的对应关系,查询是否存在与当前实例对象相对应的其它实例对象。若存在,则将所述对应的其他实例对象,以及所述其它实例对象的资源类型,添加到所述事件信息中。再将经过预处理的事件信息存入数据库中进行持久化存储。

进一步地,所述与所述当前实例对象存在对应关系的其它实例对象具体为:所述当前实例对象的父级资源的实例对象,或所述当前实例对象的关联资源的实例对象。

在查询是否存在与当前实例对象相对应的其它实例对象的过程,具体查询是否存在当前实例对象的父级资源的实例对象或关联资源的实例对象。以资源类型type-a实例对象a1为例,若所述实例对象a1,是由资源类型type-b的实例对象b1创建的,则b1是a1的父级资源的实例对象;而若所述a1和资源类型type-c的实例对象c1存在关联关系,则c1是a1的关联资源的实例对象。

若存在当前实例对象的父级资源的实例对象或关联资源的实例对象,则将该父级资源的实例对象和父级资源的资源类型,或者关联资源的实例对象和关联资源的资源类型添加到所述事件信息中。例如,对一个个pod的事件,会设置pod的父资源replicaset、deployment、statefulset等的信息到事件中;对于一个ingress的事件,会设置和ingress关联的service的信息到事件中。

为了避免频繁查询各资源和各实例对象之间的对应关系,事件收集器可采用lru算法缓存所述对应关系,以保证对事件信息进行预处理的高效性。

本发明实施例通过对事件信息的预处理,在事件信息中添加与当前实例对象相关的父级资源或关联资源的实例对象,从而使得事件信息更加丰富,方便后续对事件信息的准确处理。

图3为本发明实施例的又一对kubernetes的事件分析方法流程图,如图3所示,在步骤s012之后,所述方法还包括:

步骤s03、若所述事件信息满足预设的告警触发规则,发送与所述告警触发规则对应的告警通知。

在得到经过预处理的事件信息后,事件信息将被事件收集器分发到数据库中,同时通过预设的告警模块对事件信息进行告警处理。所述数据库与告警模块可根据实际的需要进行设置,可采用各自独立的异步架构。

告警模块会根据预先设置告警规则对接收到的事件信息进行告警处理。所述告警规则包含告警触发规则和告警通知策略,告警规则可以通过配置文件或者管理控制台进行配置。

所述告警触发规则支持对集群名称、命名空间、资源类型、资源名称、事件类型、标签列表等字段的过滤筛选,同时支持向下包含子资源的事件,即根据事件信息包含的当前实例对象、对应的其它实例对象和资源类型进行过滤筛选。

若经过告警触发规则匹配筛选后,将根据达到告警触发规则的事件信息,形成告警通知,并根据告警通知策略发送给用户。

所述告警通知策略包含邮件、短信、微信、qq、自定义webhook几种方式。从而使经过筛选达到告警触发规则的事件信息的告警通知会按照用户配置的通知媒介进行通知。

进一步地,所述方法还包括:

根据各告警触发规则的触发频率,调整对应的各告警通知的发送频率

当针对同一个资源的同一类告警通知频繁发生时,告警模块会自动压缩告警通知,在告警最大时间阈值范围内,自动降低告警通知发送频率。

所述告警模块针对不同的告警通知媒介维护有独立的发送队列和线程池,保证不同媒介之间不会互相干扰,尽可能保证通知的实时性和可靠性。

本发明实施例通过根据预设的告警规则对经过预处理的事件信息进行告警处理,从而能够更加准确、快速得实现了对事件信息的告警。

基于上述实施例,进一步地,所述kubernetes集群的事件分析方法,还包括:

通过ui接口查询所述数据库中的事件信息,并进行分析。

用户可以通过ui查询分析工具,通过预先设置的ui接口对,数据库中保存的事件信息进行查询分析。

所述查询分析工具根据实际的需要可以支持对事件信息的排序,排序可以基于时间、告警级别、告警次数等多个字段。查询分析工具支持通过集群名称、命名空间、资源类型、资源名称、告警级别、事件原因、事件源、事件起始时间和事件最后一次发生时间的时间范围等多个维度进行过滤查询。同时,所述查询分析工具还能够根据资源类型的关联关系,对事件进行关联呈现,直观展示相关联的一系列事件,例如查询deployment事件,能够对deployment,replicaset,pod进行关联查询和展示,以使用户了解和deployment有关的所有事件,和事件发生的顺序。

本发明实施例通过预设的ui接口查询数据库中的事件信息,并进行分析,从而使用户能够根据自身的需要对事件信息进行分析和展示,能够更清楚的帮助用户了解应用运行状态和排查问题。

图4为本发明实施例的对kubernetes的事件分析装置结构示意图,如图4所述,所述装置包括:事件监听模块10和事件存储模块11;其中,

所述事件监听模块10用于根据监听到的kubernetes集群的事件,得到事件信息;所述事件存储模块11用于将所述事件信息存入数据库进行持久化保存,并统计所述数据库中与所述事件信息对应的统计信息。具体地:

通过事件监听模块10,对各kubernetes集群进行监听,从而收集各kubernetes集群产生的事件,并得到事件所有相关的事件信息。

然后,事件监听模块10将获取到的各kubernetes集群的事件信息发送给事件存储模块11存入数据库中,例如,mongodb数据库等,对所有的事件信息进行持久化保存。

同时,事件存储模块11在数据库中查找是否存在相同的事件,若存在,则更新与该事件对应的统计信息,例如,所述该事件最近发生的时间,以及发生的频率和次数等。

数据库将根据事件信息对应的kubernetes集群和命名空间对事件信息进行分区存储,同时为事件信息建立索引信息,以方便后续的查询。

本发明实施例提供的装置用于执行上述方法,其功能具体参考上述方法实施例,其具体方法流程在此处不再赘述。

本发明实施例通过监听各kubernetes集群的事件,得到事件信息,并发送到数据库中进行持久化保存,从而使得对kubernetes集群的事件查询和分析更加方便、快捷。

图5为本发明实施例的另一对kubernetes的事件分析装置结构示意图,如图5所示,所述装置包括:事件监听模块10和事件存储模块11,所述事件监听模块10,具体包括:事件收集模块100和事件预处理模块101;其中,

所述事件收集模块100用于通过对预先注册的kubernetes集群的监听,获取所述kubernetes集群的事件;其中,所述事件的事件信息包括当前实例对象;所述事件预处理模块101用于根据预设的当前实例对象与其它实例对象的对应关系,将与所述当前实例对象存在对应关系的其它实例对象,以及所述其它实例对象的资源类型,添加到所述事件信息中。具体地:

在对kubernetes集群进行监听前,所述kubernetes集群需要先在事件收集模块100进行预先注册,在事件收集模块100中增加该kubernetes集群的集群配置信息,所述集群配置信息包括:集群名称、集群的kube-apiservr的地址信息、以及访问集群所需要的认证信息等。

事件收集模块100会对所有预先注册的kubernetes集群发起事件监听请求,监听各kubernetes集群的所有事件,并且对每个kubernetes集群建立独立的线程池和缓存队列以保证事件收集的可靠性和实时性。

若事件收集模块100监听到kubernetes集群的事件,则发送给事件预处理模块101对该事件的事件信息进行预处理。由于事件是针对某一资源类型的实例对象的一种记录信息,例如,事件event-a记录的是资源类型type-a的实例对象a1的记录信息,则事件event-a与实例对象a1相绑定,所述a1即为所述event-a的当前实例对象。事件预处理模块101从所述事件信息中提取出与该事件绑定的当前实例对象,然后根据预先保存的各资源的实例对象之间的对应关系,查询是否存在与当前实例对象相对应的其它实例对象。若存在,则将所述对应的其他实例对象,以及所述其它实例对象的资源类型,添加到所述事件信息中。事件预处理模块101再将经过预处理的事件信息发送给事件存储模块11存入数据库中进行持久化存储。

进一步地,所述与所述当前实例对象存在对应关系的其它实例对象具体为:所述当前实例对象的父级资源的实例对象,或所述当前实例对象的关联资源的实例对象。

在事件预处理模块101查询是否存在与当前实例对象相对应的其它实例对象的过程,具体查询是否存在当前实例对象的父级资源的实例对象或关联资源的实例对象。以资源类型type-a实例对象a1为例,若所述实例对象a1,是由资源类型type-b的实例对象b1创建的,则b1是a1的父级资源的实例对象;而若所述a1和资源类型type-c的实例对象c1存在关联关系,则c1是a1的关联资源的实例对象。

若存在当前实例对象的父级资源的实例对象或关联资源的实例对象,则事件预处理模块101将该父级资源的实例对象和父级资源的资源类型,或者关联资源的实例对象和关联资源的资源类型添加到所述事件信息中。例如,对一个个pod的事件,会设置pod的父资源replicaset、deployment、statefulset等的信息到事件中;对于一个ingress的事件,会设置和ingress关联的service的信息到事件中。

为了避免频繁查询各资源和各实例对象之间的对应关系,事件预处理模块101可采用lru算法缓存所述对应关系,以保证对事件信息进行预处理的高效性。

本发明实施例提供的装置用于执行上述方法,其功能具体参考上述方法实施例,其具体方法流程在此处不再赘述。

本发明实施例通过对事件信息的预处理,在事件信息中添加与当前实例对象相关的父级资源或关联资源的实例对象,从而使得事件信息更加丰富,方便后续对事件信息的准确处理。

图6示例了一种电子设备的实体结构示意图,如图6所示,该电子设备可以包括:处理器(processor)601、通信接口(communicationsinterface)603、存储器(memory)602和通信总线604,其中,处理器601,通信接口603,存储器602通过通信总线604完成相互间的通信。处理器601可以调用存储器602中的逻辑指令,以执行上述方法。

进一步地,本发明实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法。

进一步地,本发明实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法。

本领域普通技术人员可以理解:此外,上述的存储器602中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1