具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
本发明实施例提供了一种容器进程监控方法,如图1所示,该方法应用于安装有监控客户端的物理机上,具体步骤包括:
101、获取物理机上运行的至少一个容器以及该容器的属性信息。
容器技术,可以视作一种轻量级的虚拟化技术手段。基于虚拟化技术,对已有的资源进行更细粒度的资源控制,为此,在Linux内核通过添加众所周知的cgroup技术,对服务运行时的环境进行隔离,被隔离出来的运行环境就称为容器。一般情况下,一台应用容器技术的物理机上会同时运行有多个容器,以供物理机同时执行多个服务进程。
为了对容器中的进程实施监控,首先是要获取该物理机上所有运行着的容器,本实施例是通过监控客户端向物理机发送容器获取指令,由物理机的Linux内核进行响应,将该物理机上运行的容器以及容器的属性信息发送给监控客户端。需要说明的是,物理机在反馈容器的属性信息时,可以是逐条的发送,再由监控客户端进行整理、制成列表等工作,也可以是在发送前将所有的容器及容器的属性信息制成列表后再发送给监控客户端,本实施例对此不进行具体限定。
102、根据容器的属性信息获取对应容器的进程信息。
监控客户端在获取到容器的属性信息后,将利用所获取到的属性信息在物理机上再次进行查询,获取对应容器中的进程信息。根据监控客户端的监控模式需要,可以设置成获取物理机中一个容器内的进程信息,也可以设置为对所有物理机中运行的容器逐一获取对应的进程信息,并将所获取到的进程信息与容器制成相对应的列表,本实施例对此不进行限定。
其中,容器中的进程信息包括进程的名称,CPU负荷,内存使用情况,磁盘使用情况等。
103、将获取的每个容器的进程信息发送给中控服务器。
将上述102中获取的进程信息或是进程信息的列表发送给中控服务器,由中控服务器对进程信息进行处理识别,从而判断容器内的进程是否异常。如果出现异常的进程,中控服务器就会向对应监控客户端发送报警信息,通知物理机有异常的进程需要处理。
由于监控客户端向中控服务器发送进程信息,由中控端处理的监控过程在现有的监控实现方式中已被广泛使用,因此,对于具体的实现方式本实施例将不再做详细说明。
需要说明的是,本发明实施例是可以应用于分布是监控系统中的,因此,中控服务器的设置可以是使用一台独立的物理机来做,也可以与系统中的一个监控客户端共同使用一台物理机,具体的设置方式可以根据不同需求进行区别设置,对此本实施例不做限定。
结合上述的实现方式可以看出,本发明实施例所采用的一种容器进程监控方法,是在容器化技术的环境内,通过监控客户端来获取物理机内所运行的容器以及容器的属性信息,进而获取容器中的进程信息,并将该进程信息发送给中控服务器,由中控服务器进行处理判断,实现对容器内进程的监控过程。由于物理机内多是运行着多个容器,而现有的监控方式无法对单个容器中的进程实现监控与管理,因此,本发明可以通过中控服务器以及监控客户端实现对物理机中单个容器的监控,当物理机中某个容器中的进程发生异常时,本发明可以快速发现异常容器的位置,并对异常进程进行异常排除的处理,从而提高系统运行的稳定性、安全性。
为了更加详细地说明本发明提出的一种容器进程监控方法,本实施例还提供一种容器进程监控方法,如图2所示,该方法包括:
201、获取物理机上运行的至少一个容器以及该容器的属性信息。
相对于步骤101的实现方式,本步骤具体细化的是在物理机接收到监控客户端所发送的容器获取指令后,由物理机的Linux内核响应的具体方式。首先,需要在物理机内设置一个容器识别模块,该容器识别模块是由监控客户端通过获取具有自动识别功能的脚本文件,并将该脚本文件解析后,添加上容器自动识别功能而构建出的一个具有容器自动识别功能的模块。其中,监控客户端在获取到具有自动识别功能的脚本文件后,首先需要确认该脚本文件可以在当前物理机系统下被识别,如果无法识别,则需要对该脚本文件进行适配,获得可以再当前系统下可以识别的格式文件,在适配过程中可能涉及变量名称的更改、源代码的替换、改变调用的函数、初始化状态等,具体的适配方式已是现有技术手段,其具体做法本实施例就不再详细说明。
此外,容器识别获取模块在将获取到的脚本文件解析后,可以取得该脚本文件的源代码,之后在源代码中提取其中的自动识别功能的字段,然后修改该段源代码,将自动识别功能的识别范围限定为容器,之后将修改后的源代码进行格式化编译就获得了具有容器自动识别功能的脚本文件,通过该脚本文件的执行,就可令容器识别模块在物理机上自动识别获取容器了。
通过容器识别获取模块,监控客户端可以自动获取物理机中当前运行的容器。由于物理机上运行的容器数量并非是固定不变的,因此,监控客户端在每次执行监控指令时,都要先运行容器识别获取模块,以达到更新物理机当前系统中运行的容器数量的目的。
其次,在构建完成容器识别获取模块后,监控客户端会将该模块设置在物理机上,等待监控客户端的监控指令。当监控客户端启动,容器识别获取模块也将接收到执行指令,自动获取当前物理机上运行的所有容器以及相应的容器属性信息,并将所获取到的信息以列表的形式发送给监控客户端。在该列表中除了列出有当前运行的容器数量的信息外,容器的属性信息还包括有容器的名称以及容器的ID号。
在本实施例中,容器的名称一般为容器内进程的名称,容器的ID号标识了该容器在物理机内存中的位置。
202、根据容器的属性信息获取对应容器的进程信息。
通过步骤201,监控客户端可以实现实时地获取物理机中运行的容器以及容器的属性信息。之后,再根据获取到的属性信息,主要是通过容器的ID号,到物理机的内存中查找该地址上的容器名称是否与所获取的容器名一致,若一致,则获取在该地址中运行的进程信息。
相对于现有的监控实现方式,本步骤可以获取Linux内核中单个容器的进程信息,从而可以实现对单个容器中的进程实施监控管理。
203、将获取的每个容器的进程信息发送给中控服务器。
此步骤与上述的103相同,此处不再赘述。
204、接收并显示中控服务器发送的报警信息。
当中控服务器发现有异常进程信息存在时,就会向物理机上的监控客户端发送报警信息,监控客户端在接收到报警信息后,会将该报警信息在物理机上输出并显示,提示本地的容器中有异常进程存在,需要处理。
结合上述的实现方式,以下给出一个监控进程CPU占用率的例子来形象说明:
首先,是在物理机中启动监控客户端,监控客户端向容器识别获取模块发送获取指令,容器识别获取模块运行自动获取功能,获取到该物理机中当前运行的容器为容器1、容器2和容器3,并将三个容器的名称和ID号制成具有对应关系的列表,发送给监控客户端。
其次,监控客户端在获得上述的容器列表后,将逐一的对三个容器进行处理,根据容器的名称和ID号,查找到容器中的进程信息,并提取其中的CPU占用率的信息值。需要指出的是,这里获取的CPU占用率是容器1、容器2、容器3中各自进程所占用的比值,根据进程的不同,这三个比值是不同的,如容器1为3%、容器2为10%、容器3为4%。而在现有的监控技术中,获取到容器的CPU占用率的值则是该物理机中所有容器内的进程的占用率的和,即Linux内核的总进行占用率17%,虽然也会得到三个数值,但这三个数值均为总占用率17%,而不是单独容器中进程的CPU占用率。
最后,由监控客户端发送获取到的三个CPU占用率数值给中控服务器,由中控服务器根据预定的检测标准进行判断,如CPU占用率超过80%就仅为该进程异常,需要发送报警信息。如果存在异常的信息,则向监控客户端发送报警信息,有监控客户端在物理机上进行输出显示。
进一步的,作为对上述方法的实现,本发明实施例提供了一种容器进程监控装置,该装置设置于使用了容器化技术的物理机内,如图3所示,该装置包括:
第一获取单元31,用于获取物理机上运行的至少一个容器以及所述容器的属性信息。
第二获取单元32,用于根据第一获取单元31获取的所述容器的属性信息获取对应容器的进程信息。
发送单元33,用于将第二获取单元32获取的每个容器的进程信息发送给中控服务器。
进一步的,如图4所示,第一获取单元31包括:
设置子单元311,用于在物理机上设置容器识别获取模块。
执行子单元312,用于运行所述设置子单元311设置的容器识别获取模块获取物理机上运行的至少一个容器以及所述容器的属性信息。
进一步的,如图5所示,设置子单元311包括:
构建模块3111,用于获取具有自动识别功能的脚本文件,对所述脚本文件进行解析,将容器自动识别功能添加到所述脚本文件中,得到所述容器识别获取模块。
设置模块3112,用于将所述构建模块得到的所述容器识别获取模块设置在所述物理机上。
进一步的,第一获取单元31获取的所述容器的属性信息包括名称、ID号。
进一步的,第二获取单元32用于根据所述第一获取单元获取的容器的名称查询所述物理机的内存获取对应容器的进程信息。
进一步的,如图6所示,所述装置还包括:
显示单元34,用于接收并显示所述中控服务器发送的报警信息。
此外,本发明实施例还提供了一种监控客户端,在监控客户端内设置有上述的容器进程监控装置,该监控客户端安装在物理机上,用于获取物理机上运行的至少一个容器以及该容器的属性信息,并且根据容器的属性信息获取对应容器的进程信息,再将获取的每个容器的进程信息发送给所述中控服务器。
综合上述的容器进程监控方法与装置,本发明实施例还提供了一种容器进程监控系统,如图7所示,该系统包括监控客户端71和中控服务器72。
其中,中控服务器72,用于根据预定检测标准判断每个容器的进程信息是否异常,若异常则向监控客户端71发送报警信息,并由监控客户端71在物理机上输出显示。
综上所述,本发明实施例所采用的一种容器进程监控方法、装置及系统,是在容器化技术的环境内,通过监控客户端来获取物理机内所运行的容器以及容器的属性信息,进而获取容器中的进程信息,并将该进程信息发送给中控服务器,由中控服务器进行处理判断,实现对容器内进程的监控过程。由于一个物理机内多是运行着多个容器,而现有的监控方式无法对单个容器中的进程实现监控与管理,因此,本发明可以通过中控服务器以及监控客户端来实现对物理机中单个容器的监控,当物理机中某个容器中的进程发生异常时,本发明可以快速发现异常容器的位置,并对异常进程进行异常排除的处理,从而提高系统运行的稳定性、安全性。
本发明还公开了下述方案:
A1、一种容器进程监控方法,所述方法包括:
获取物理机上运行的至少一个容器以及所述容器的属性信息;
根据所述容器的属性信息获取对应容器的进程信息;
将获取的每个容器的进程信息发送给中控服务器,以便中控服务器根据预定检测标准判断每个容器的进程信息是否异常,若异常则向所述物理机发送报警信息。
A2、根据A1所述的方法,所述获取物理机上运行的至少一个容器以及所述容器的属性信息包括:
在物理机上设置容器识别获取模块;
运行所述容器识别获取模块获取物理机上运行的至少一个容器以及所述容器的属性信息,所述容器识别获取模块具有自动识别功能。
A3、根据A2所述的方法,所述在物理机上设置容器识别获取模块包括:
构建所述容器识别获取模块;
将所述容器识别获取模块设置在所述物理机上。
A4、根据A3所述的方法,其特征在于,所述构建所述容器识别获取模块包括:
获取具有自动识别功能的脚本文件;
对所述脚本文件进行解析,将容器自动识别功能添加到所述脚本文件中,得到所述容器识别获取模块。
A5、根据A1-A4中任一项所述的方法,所述属性信息包括名称、ID号。
A6、根据A5所述的方法,所述根据所述容器的属性信息获取对应容器的进程信息包括:
根据所述容器的名称查询所述物理机的内存获取对应容器的进程信息。
A7、根据A1所述的方法,所述方法还包括:
接收并显示所述中控服务器发送的报警信息。
B8、一种容器进程监控装置,所述装置包括:
第一获取单元,用于获取物理机上运行的至少一个容器以及所述容器的属性信息;
第二获取单元,用于根据第一获取单元获取的所述容器的属性信息获取对应容器的进程信息;
发送单元,用于将第二获取单元获取的每个容器的进程信息发送给中控服务器。
B9、根据B8所述的装置,所述第一获取单元包括:
设置子单元,用于在物理机上设置容器识别获取模块;
执行子单元,用于运行所述设置子单元设置的容器识别获取模块获取物理机上运行的至少一个容器以及所述容器的属性信息。
B10、根据B9所述的装置,所述设置子单元包括:
构建模块,用于获取具有自动识别功能的脚本文件,对所述脚本文件进行解析,将容器自动识别功能添加到所述脚本文件中,得到所述容器识别获取模块;
设置模块,用于将所述构建模块得到的所述容器识别获取模块设置在所述物理机上。
B11、根据B8-B10中任一项所述的装置,所述第一获取单元获取的所述容器的属性信息包括名称、ID号。
B12、根据B11所述的装置,所述第二获取单元用于根据所述第一获取单元获取的容器的名称查询所述物理机的内存获取对应容器的进程信息。
B13、根据B8所述的装置,所述装置还包括:
显示单元,用于接收并显示所述中控服务器发送的报警信息。
C14、一种监控客户端,包括B8-B13中任一项所述的容器进程监控装置。
D15、一种容器进程监控系统,所述系统包括C14所述的监控客户端和中控服务器;
所述中控服务器,用于根据预定检测标准判断每个容器的进程信息是否异常,若异常则向所述物理机发送报警信息。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
可以理解的是,上述方法及装置中的相关特征可以相互参考。另外,上述实施例中的“第一”、“第二”等是用于区分各实施例,而并不代表各实施例的优劣。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的发明名称(如确定网站内链接等级的装置)中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。