一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

采集docker容器网络流量的方法、电子设备及存储介质与流程

2022-06-29 16:04:00 来源:中国专利 TAG:


1.本发明实施例涉及通信技术领域,特别涉及一种采集docker容器网络流量的方法、电子设备及存储介质。


背景技术:

2.在一个大型的公有云容器平台中,一台linux设备上往往运行着大量的分属于不同客户不同业务的容器。处于安全和运营等各方面的需要,通常会通过命名空间(namespace)将容器相互隔离,这其中最常见的就是网络namespace隔离。网络namespace隔离可以使容器内的进程拥有独占的虚拟网络协议栈,端口,网卡等网络资源。以docker容器为例,在网络隔离的情况下,每个容器都拥有一张独立的eth0网卡,并且容器内的进程进行网络通信的相关数据都会统计在这张eth0网卡上,并且这张网卡的流量数据会由内核维护在宿主机的/proc目录下的相关文件中。因此,通过读取并解析该文件,可以获取该容器的网络流量使用情况,结合定期采集和计算,可以为运营,计费提供流量和带宽等数据支持。
3.为了避免给采集程序造成太大的压力,容器流量的采集频率通常不会太高,一般是每隔1-5分钟采集一次。假设docker容器在某个时间点退出了,其网络命名空间将被系统回收,eth0网卡的流量数据也随之被销毁。这个过程不受采集程序的控制,也就意味着从最后一个采集点到容器退出这段时间的容器流量实际上已经丢失了。如果要对流量计费,那么这段时间的流量会漏计费,并且采集周期越长,损失越大。在这种情况下,虽然可以通过提高采集频率的办法降低丢失的数据量,但并不能彻底解决流量数据丢失问题。


技术实现要素:

4.本发明实施方式的目的在于提供一种采集docker容器网络流量的方法、电子设备及存储介质,能够准确获取docker容器的网卡流量数据,避免由于采集频率导致的容器退出前最后一段流量数据丢失的问题。
5.为解决上述技术问题,本发明的实施方式提供了一种采集docker容器网络流量的方法,所述方法应用于容器管理进程,包括:
6.接收宿主机系统发送的docker容器已退出的第一通知信号;
7.根据所述第一通知信号,将待回收资源下的所述docker容器的网卡流量数据文件备份到所述待回收资源以外的备份目录中,以供流量采集程序从所述备份目录获取所述网卡流量数据文件;
8.待备份成功后,触发所述宿主机系统对所述待回收资源进行回收。
9.本发明的实施方式提供了另一种采集docker容器网络流量的方法,所述方法应用于流量采集进程,包括:
10.接收宿主机系统发送的docker容器已退出的第二通知信号;所述第二通知信号是所述docker容器对应的容器管理进程触发所述宿主机系统回收用于存储所述docker容器的网卡流量数据文件的资源后发出;
11.从备份目录获取所述网卡流量数据文件;所述网卡流量数据文件是由所述容器管理进程,在触发所述宿主机系统回收用于存储所述网卡流量数据文件的资源之前,备份到待回收资源以外的所述备份目录中。
12.本发明的实施方式提供了再一种采集docker容器网络流量的方法,包括:
13.容器管理进程接收宿主机系统发送的docker容器已退出的第一通知信号;
14.所述容器管理进程根据所述第一通知信号,将待回收资源下的所述docker容器的网卡流量数据文件备份到所述待回收资源以外的备份目录中;
15.待备份成功后,所述容器管理进程触发所述宿主机系统对所述待回收资源进行回收;
16.所述流量采集进程接收所述宿主机系统发送的docker容器已退出的第二通知信号;
17.所述流量采集进程从所述备份目录获取所述网卡流量数据文件。
18.本发明的实施方式提供了一种电子设备,包括:
19.至少一个处理器;以及,
20.与所述至少一个处理器通信连接的存储器;其中,
21.所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行:
22.如所述的一种采集docker容器网络流量的方法,其中,所述电子设备为所述容器管理进程;或者,如所述的另一种采集docker容器网络流量的方法,其中,所述电子设备为所述流量采集进程;或者,如所述的再一种采集docker容器网络流量的方法,其中,所述电子设备包含所述容器管理进程和所述流量采集进程。
23.本发明的实施方式提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的采集docker容器网络流量的方法。
24.本发明实施方式相对于现有技术而言,容器管理进程接收宿主机系统发送的docker容器已退出的第一通知信号后,将待回收资源下的docker容器的网卡流量数据文件备份到待回收资源以外的备份目录中;待备份成功后,触发宿主机系统对待回收资源进行回收;宿主机系统接收到该触发后,向流量采集进程发送docker容器已退出的第二通知信号;流量采集进程根据第二通知信号从备份目录获取网卡流量数据文件。由于本方案在docker容器退出后,及时将docker容器的网卡流量数据文件备份到待回收资源以外的备份目录中,从而避免从待回收资源采集网卡流量数据文件时,由于采集频率导致的容器退出前最后一段流量数据丢失的问题,提高了所获取得docker容器的网卡流量数据的完整性。
附图说明
25.一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
26.图1是根据本发明第一实施方式的采集docker容器网络流量的方法的具体流程图;
27.图2是根据本发明第二实施方式的采集docker容器网络流量的方法的具体流程
图;
28.图3是根据本发明第三实施方式的电子设备的结构示意图。
具体实施方式
29.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的各实施方式进行详细的阐述。然而,本领域的普通技术人员可以理解,在本发明各实施方式中,为了使读者更好地理解本技术而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也可以实现本技术所要求保护的技术方案。
30.本发明第一实施方式涉及一种采集docker容器网络流量的方法。本实施例所述方法可适用于公有云容器平台中,该容器平台中每台linux设备上运行着大量的分属于不同客户不同业务的容器,容器之间通过namespace进行相互隔离。每台linux设备上的操作系统(宿主机系统)管理该宿主机系统中的各个容器的资源维护,包括资源创建和资源回收,这些资源用于存储容器运行中的相关数据,例如每个容器的网卡的流量数据会由内核维护在宿主机的/proc目录下的相关文件中。每个容器配备有一个容器管理进程,容器管理进程负责容器的创建和退出。流量采集进程隶属于宿主机系统,用于定期采集内核维护在宿主机的/proc目录下的流量数据文件,从而基于流量数据文件统计各容器使用的网络流量参数。
31.如图1所示,本实施例方法应用于容器管理进程,每台linux设备上的操作系统可为运行在其操作系统中的每个容器配备一个容器管理进程对相应容器进行创建和退出的操作管理,本实施例方法则是在容器管理进程负责容器退出时执行的操作,包括如下步骤:
32.步骤101:接收宿主机系统发送的docker容器已退出的第一通知信号。
33.具体地,当宿主机系统中某个docker容器退出后,宿主机系统会向该docker容器的容器管理进程发送第一通知信号,以告知容器管理进程其管理的docker容器已退出,让容器管理进程执行docker容器退出后的相关操作。
34.实际上,当docker容器退出后,宿主机系统会先自主对docker容器所占用的一部分资源进行回收。但是,docker容器所占用的剩余部分资源,例如内核为容器管理进程分配的进程控制块(process control block,pcb)则需要容器管理进程确认后才可以由宿主机系统对其进行回收。而该pcb中存储了包括进程的一些相关信息,如程序段,数据及cpu现场信息,其中主要包括了网络命名空间下的网卡的网卡流量数据文件。通常,每个docker容器对应的网卡流量数据文件被内核维护在宿主机的/proc目录下。例如,网卡流量数据文件的存储路径为:/proc/333/net/dev(333是docker容器一号进程的进程控制符)。
35.在一个例子中,容器管理进程可为docker框架下的docker-shim进程;相应地,接收宿主机系统发送的docker容器已退出的第一通知信号,包括:
36.接收宿主机系统发送的sigchld信号,该sigchld信号为宿主机系统感知到docker容器中的初始化进程退出后发出,初始化进程为docker-shim进程的子进程。
37.具体地,在docker框架下,docker-shim是docker容器1号进程(也称“初始化进程”)的父进程。在启动docker容器1号进程时,docker-shim设置捕捉sigchld信号,并通过golang的select机制监听和接收到宿主机系统发送的系统信号。当docker容器1号进程退出(意味着docker容器退出)时,宿主机系统向docker-shim发送sigchld信号。docker-shim
收到到系统信号后被唤醒,当docker-shim检查出接收的系统信号是sigchld信号时,则确定docker容器1号进程已退出。
38.其中,docker容器中的初始化进程退出主要存在以下两种退出情况:
39.初始化进程主动退出,或者初始化进程接收到docker-shim进程发出的退出指令后退出。通常,初始化进程退出可能是,容器中的进程完成指定操作后自动触发初始化进程退出,该情况可称之为“主动退出”。另外,用户也可通过宿主机系统直接向容器管理进程(docker-shim)发送退出指令,以通过容器管理进程控制初始化进程退出。
40.步骤102:根据第一通知信号,将待回收资源下的docker容器的网卡流量数据文件备份到待回收资源以外的备份目录中,以供流量采集程序从备份目录获取网卡流量数据文件。
41.具体地,当容器控制进程接收到宿主机系统发送的docker容器已退出的第一通知信号后,容器控制进程可对自身占用的资源(主要是pcb)进行回收前的确认。此时,由于容器控制进程还没有退出,分配给容器控制进程的pcb包括网卡流量数据文件还没有被回收,容器控制进程可以将已退出的该docker容器所对应的网卡流量数据文件,及时从待回收的资源中备份到待回收资源以外的备份目录中。这样,即使后续宿主机系统回收了这部分待回收资源,流量采集程序也可以从备份目录中获取网卡流量数据文件,避免由于采集频率导致的容器退出前最后一段流量数据丢失的问题。
42.在一个例子中,根据第一通知信号,将待回收资源下的docker容器的网卡流量数据文件备份到待回收资源以外的备份目录中的处理过程可通过如下步骤实现。
43.根据第一通知信号,触发宿主机系统将待回收资源下的docker容器的网卡流量数据文件,以约定文件名备份到待回收资源以外的备份目录中。
44.具体地,容器管理进程在接收到第一通知信号后,可触发宿主机系统将待回收资源下的上述docker容器的网卡流量数据文件,以约定文件名备份到待回收资源以外的备份目录中。这样流量采集程序可以根据约定文件名和备份目录,快速查找到已退出的docker容器的网卡流量数据文件。
45.例如,docker-shim进程接收到宿主机系统发送的sigchld信号后,触发宿主机系统将docker容器的网卡流量数据文件从系统目录,即:/proc目录下拷贝出来另存储到其它路径下进行备份。
46.步骤103:待备份成功后,触发宿主机系统对待回收资源进行回收。
47.具体地,待容器管理进程对已退出的docker容器的网卡流量数据文件备份成功后,容器管理进程触发宿主机系统对待回收资源(包含已退出的docker容器的网卡流量数据文件)进行回收。
48.在一个例子中,docker-shim进程在备份好已退出的docker容器的网卡流量数据文件后,可调用系统wait函数,触发宿主机系统对待回收资源进行回收。宿主机系统在检测到系统wait函数被docker-shim进程调用后,对分配给docker-shim进程的pcb,包括其网络命名空间下的网卡的流量数据文件所占用的资源进行回收。
49.本发明实施方式相对于现有技术而言,容器管理进程在接收到宿主机系统发送的docker容器已退出的第一通知信号后,根据第一通知信号,将待回收资源下的docker容器的网卡流量数据文件备份到待回收资源以外的备份目录中,以供流量采集程序从备份目录
获取网卡流量数据文件;待备份成功后,触发宿主机系统对待回收资源进行回收。由于本方案在docker容器退出后,及时将docker容器的网卡流量数据文件备份到待回收资源以外的备份目录中,并由流量采集进程从备份目录中获取该网卡流量数据文件,从而避免从待回收资源采集网卡流量数据文件时,由于采集频率导致的容器退出前最后一段流量数据丢失的问题,提高了所获取得docker容器的网卡流量数据的完整性。
50.如图2所示,本实施例方法应用于流量采集进程,通常情况下,流量采集进程会定期采集内核维护在宿主机的/proc目录下的流量数据文件。而在本实施例中流量采集进程除了“定期采集”外,还基于系统发送的通知信号,额外进行流量数据文件的采集。本实施例方法则是在容器退出后由流量采集进程执行的额外进行流量数据文件的采集操作,包括如下步骤:
51.步骤201:接收宿主机系统发送的docker容器已退出的第二通知信号;第二通知信号是docker容器对应的容器管理进程触发宿主机系统回收用于存储docker容器的网卡流量数据文件的资源后发出。
52.具体地,在经过如上述容器管理进程后采集docker容器网络流量的方法,宿主机系统接收到对待回收资源进行回收的触发信息后,宿主机系统一方面执行回收资源的操作,另一方面向流量采集系统发送docker容器已退出的第二通知信号。与第一通知信号不同的是,该第二通知信号是docker容器对应的容器管理进程触发宿主机系统回收用于存储docker容器的网卡流量数据文件的资源后发出。换言之,流量采集进程在接收到第二通知信号时,不仅docker容器已退出,连同docker容器对应的容器管理进程也已经退出,它们所占用的所有资源也已经开始被执行回收。
53.在一个例子中,容器管理进程可为docker框架下的docker-shim进程;docker容器对应的容器管理进程触发宿主机系统回收用于存储docker容器的网卡流量数据文件的资源的过程可通过如下步骤实现,这些步骤的具体执行过程可参考图1所示方法实施例中的步骤,在此不做赘述。
54.容器管理进程接收宿主机系统发送的sigchld信号,sigchld信号为宿主机系统感知到docker容器中的初始化进程退出后发出,初始化进程为docker-shim进程的子进程;待容器管理进程将待回收资源下的网卡流量数据文件备份到备份目录中后,触发宿主机系统回收用于存储上述网卡流量数据文件的资源。
55.步骤202:从备份目录获取网卡流量数据文件;网卡流量数据文件是由容器管理进程,在触发宿主机系统回收用于存储网卡流量数据文件的资源之前,备份到待回收资源以外的备份目录中。
56.具体地,流量采集进程接收到第二通知信号后,按约定从备份目录中获取已退出的docker容器所对应的网卡流量数据文件。该网卡流量数据文件是由容器管理进程,在触发宿主机系统回收用于存储网卡流量数据文件的资源之前,备份到待回收资源以外的备份目录中。
57.其中,触发宿主机系统回收用于存储网卡流量数据文件的资源的过程可通过如下步骤实现。
58.调用系统wait函数,触发宿主机系统回收用于存储网卡流量数据文件的资源。
59.以上有关网卡流量数据文件的备份过程、宿主机系统回收用于存储网卡流量数据
文件的资源的过程,可参见图1所示方法实施例,在此不做赘述。
60.此外,本实施例所示方法还可包括如下步骤:
61.基于网卡流量数据文件统计docker容器使用的网卡流量参数,网卡流量参数包括如下参数中的至少一种:docker容器在退出前最后一个统计周期的网卡流量差值和平均带宽。
62.具体地,流量采集进程周期性从宿主机的/proc目录下采集宿主机系统上各docker容器的网卡流量数据文件。例如,流量采集进程在每一分钟的0秒执行一次采集任务,采集各docker容器当前时刻的网卡流量数据,包括rx_bytes、tx_bytes等。通过将当前时刻采集的网卡流量数据与上一分钟采集的网卡流量数据对比,可以得出本采集周期内的网卡流量参数,包括如网卡流量差值,平均带宽等中的至少一种。同时,保存当前时刻的网卡流量数据,用于下一个采集时刻到来时计算下一采集周期的网卡流量参数。而当下一个采集时刻未到达且docker容器既已退出时,则认为docker容器只运行了当前流量统计周期的部分周期时间,此时可将docker容器退出后流量采集进程采集的网卡流量数据文件作为“下一个采集时刻”采集的网卡流量数据文件来统计当前统计周期的网卡流量数据。例如对该次采集的网卡流量数据以及上一次采集的网卡流量数据进行比较,得出docker容器在退出前最后一个统计周期的网卡流量参数,包括如网卡流量差值,平均带宽等中的至少一种。
63.本发明实施方式相对于现有技术而言,流量采集进程接收宿主机系统发送的docker容器已退出的第二通知信号,该第二通知信号是docker容器对应的容器管理进程触发宿主机系统回收用于存储docker容器的网卡流量数据文件的资源后发出;从备份目录获取网卡流量数据文件;该网卡流量数据文件是由容器管理进程,在触发宿主机系统回收用于存储网卡流量数据文件的资源之前,备份到待回收资源以外的备份目录中。由于本方案在docker容器退出后,及时将docker容器的网卡流量数据文件备份到待回收资源以外的备份目录中,并由流量采集进程从备份目录中获取该网卡流量数据文件,从而避免从待回收资源采集网卡流量数据文件时,由于采集频率导致的容器退出前最后一段流量数据丢失的问题,提高了所获取得docker容器的网卡流量数据的完整性。
64.本发明另一实施方式涉及一种采集docker容器网络流量的方法,该方法的执行主体包含前述实施方式中的容器管理进程和流量采集进程。该采集docker容器网络流量的方法包含如下步骤。
65.容器管理进程接收宿主机系统发送的docker容器已退出的第一通知信号;
66.容器管理进程根据第一通知信号,将待回收资源下的docker容器的网卡流量数据文件备份到待回收资源以外的备份目录中;
67.待备份成功后,容器管理进程触发宿主机系统对待回收资源进行回收;
68.流量采集进程接收宿主机系统发送的docker容器已退出的第二通知信号;
69.流量采集进程从所述备份目录获取所述网卡流量数据文件。
70.具体地,上述各步骤内容的具体实现过程可参考前述实时方式中分别以容器管理进程和流量采集进程为执行主体的相应处理过程。
71.此外,前述实时方式中分别以容器管理进程和流量采集进程为执行主体的所有处理过程,均可适用于本实施方式中,本实施方式中对这些处理过程将不再赘述。
72.本发明另一实施方式涉及一种电子设备,如图3所示,包括至少一个处理器302;以
及,与至少一个处理器302通信连接的存储器301;其中,存储器301存储有可被至少一个处理器302执行的指令,指令被至少一个处理器302执行,以使至少一个处理器302能够执行上述图1方法实施例;其中,电子设备为第一域;或者,执行上述图2方法实施例;其中,电子设备为第二域。
73.其中,存储器301和处理器302采用总线方式连接,总线可以包括任意数量的互联的总线和桥,总线将一个或多个处理器302和存储器301的各种电路连接在一起。总线还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和收发机之间提供接口。收发机可以是一个元件,也可以是多个元件,比如多个接收器和发送器,提供用于在传输介质上与各种其他装置通信的单元。经处理器302处理的数据通过天线在无线介质上进行传输,进一步,天线还接收数据并将数据传送给处理器302。
74.处理器302负责管理总线和通常的处理,还可以提供各种功能,包括定时,外围接口,电压调节、电源管理以及其他控制功能。而存储器301可以被用于存储处理器302在执行操作时所使用的数据。
75.本发明第四实施方式涉及一种计算机可读存储介质,存储有计算机程序。计算机程序被处理器执行时实现上述任一方法实施例。
76.即,本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
77.本领域的普通技术人员可以理解,上述各实施方式是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献