对宿主机中容器进行本地实时监控的方法、装置及系统的制作方法
【技术领域】
[0001] 本发明涉及互联网技术领域,具体涉及一种对宿主机中容器进行本地实时监控的 方法、装置及系统。
【背景技术】
[0002] LXC(LinuxContainer)容器是一种内核虚拟化技术,可以提供轻量级的虚拟化, 以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于 C++中的命名空间(NameSpace)。容器有效地将由单个操作系统管理的资源划分到孤立的 组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。
[0003] Docker是PaaS提供商dotCloud开源的一个基于LXC的高级容器引擎,源代码托 管在Github上,基于go语言并遵从Apache2. 0协议开源。简单得来说,Docker是一个由 GO语言写的程序运行的"容器"(Linuxc〇ntainers,LXCs);目前云服务的基石是操作系统 级别的隔离,在同一台宿主机上虚拟出多个主机。Docker则实现了一种应用程序级别的隔 离,它改变我们基本的开发、操作单元,由直接操作虚拟主机(VM)转换到操作程序运行的 "容器"上来。
[0004] 随着Docker的发展,在一台Docker宿主机中启动的容器越来越多。在此Docker 宿主机中,运维人员需要查看各个容器的运行状态时,需要手动在Docker系统内输入监控 命令或查看运行文件。以查看某个容器的cpu占用信息为例,需要手动打开cgroup目录下 的运行文件,拷贝每一秒的cpu运行数据,然后找到对应容器的cpu数据进行查看。这种手 动的方式非常繁琐,尤其对于同时运行很多容器的Docker宿主机来说,每个容器的数据都 需要手动输入各自的命令去查看,执行效率低下,不能实时反映各个容器的监控信息。
【发明内容】
[0005] 鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上 述问题的对宿主机中容器进行本地实时监控的方法、装置及系统。
[0006] 根据本发明的一个方面,提供了一种对宿主机中容器进行本地实时监控的方法, 包括:
[0007] 扫描宿主机内处于存活状态的容器,更新容器列表;
[0008] 为所述容器列表中每个处于存活状态的容器配置对应的进程;
[0009] 各个进程同步抽取各自容器的原始状态信息;以及
[0010] 对各容器的原始状态信息进行处理得到监控信息,以进行显示。
[0011] 根据本发明的另一个方面,提供了一种对宿主机中容器进行本地实时监控的方 法,包括:
[0012] 根据终端发送的监控命令,扫描宿主机内处于存活状态的容器,更新容器列表;
[0013] 为所述容器列表中每个处于存活状态的容器配置对应的进程;
[0014] 各个进程同步抽取各自容器的原始状态信息;以及
[0015] 对各容器的原始状态信息进行处理得到监控信息;
[0016] 将所有容器的监控信息发送给所述终端,所述终端显示所有容器的监控信息。
[0017] 根据本发明的另一方面,提供了一种对宿主机中容器进行本地实时监控的装置, 包括:
[0018] 配置模块,适于为所述容器列表中每个处于存活状态的容器配置对应的进程;
[0019] 抽取模块,适于各个进程同步抽取各自容器的原始状态信息;
[0020] 处理模块,适于对各容器的原始状态信息进行处理得到监控信息,以进行显示。
[0021] 根据本发明的另一方面,提供了一种对宿主机中容器进行本地实时监控的系统, 该系统包括上述对宿主机中容器进行本地实时监控的装置和终端,所述终端适于:向所述 装置发送监控命令,以及接收所述装置返回的所有容器的监控信息并显示。
[0022] 通过本发明提供的监控方法、装置及系统,为每个处于存活状态的容器创建各自 的进程,采用多进程并行运行的方式,抽取各个容器的监控信息进行展示。利用本方案,运 维人员只需启动本地监控程序,该本地监控程序利用创建的多进程抽取各个容器的监控信 息,与现有技术繁琐的手动方式相比,大大提高了执行效率。而且,由于多个进程同步抽取 监控信息,这样刷新展示的时候显示的是多个容器在同一时刻的监控数据,运维人员可依 据这些监控数据对多个容器的状态进行比较分析,更有利于反映出宿主机内各个容器的运 行状态,提升了监控效率。
[0023] 上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段, 而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够 更明显易懂,以下特举本发明的【具体实施方式】。
【附图说明】
[0024] 通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通 技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明 的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0025] 图1示出了根据本发明一个实施例的对宿主机中容器进行本地实时监控的方法 的流程图;
[0026] 图2示出了根据本发明另一个实施例的对宿主机中容器进行本地实时监控的方 法的流程图;
[0027] 图3示出了根据本发明一个实施例的对宿主机中容器进行本地实时监控的方法 装置的功能结构框图;以及
[0028] 图4示出了根据本发明一个实施例的对宿主机中容器进行本地实时监控的方法 系统的功能结构框图。
【具体实施方式】
[0029] 下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开 的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例 所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围 完整的传达给本领域的技术人员。
[0030] 图1示出了根据本发明一个实施例的对宿主机中容器进行本地实时监控的方法 的流程图。如图1所示,本方法包括以下步骤:
[0031] 步骤S101,扫描宿主机内处于存活状态的容器,更新容器列表。
[0032] 本发明在宿主机内部启动本地监控程序(也称:localmonitor),本地监控程序定 时扫描宿主机内处于存活状态的容器,更新容器列表,容器列表中记录有处于存活状态的 容器名称。
[0033] 步骤S102,为容器列表中每个处于存活状态的容器配置对应的进程。
[0034] 本发明的本地监控程序在第一次启动时为容器列表中每个处于存活状态的容器 创建对应的进程。在后续定时执行本方法的过程中,在更新容器列表后,先查找上一次方法 执行时是否已存在各个容器对应的进程,若未查找到某个容器的进程,则为该容器创建进 程。通过本步骤,保证宿主机内存活的容器都有对应的进程为其实行监控服务。也即,本方 法为多进程的处理方法,多个进程并行执行以获取各个容器的监控信息。
[0035] 步骤S103,各个进程同步抽取各自容器的原始状态信息。
[0036] 本步骤中,各个进程是同步运行的,每个进程负责抽取其对应的容器的原始状态 信息。
[0037] 步骤S104,对各容器的原始状态信息进行处理得到监控信息,以进行显示。
[0038] 在每个进程抽取各自容器的原始状态信息之后,可以对各容器的原始状态信息进 行处理得到监控信息,将这些监控信息汇总起来,而后由用于进行显示的终端将各个容器 的监控信息进行刷新显示,以同时展示宿主机内处于存活状态的所有容器的监控信息。应 可理解,上述对原始状态信息的处理可以由各个进程分别执行,也可以由相同进程/模块 统一执行。
[0039] 通过本实施例提供的监控方法,为每个处于存活状态的容器创建各自的进程,采 用多进程并行运行的方式,抽取处理得到各个容器的监控信息进行展示。利用本方法,运 维人员只需启动本地监控程序,该本地监控程序利用创建的多进程抽取各个容器的监控信 息,与现有技术繁琐的手动方式相比,大大提高了执行效率。而且,由于多个进程同步抽取 处理得到监控信息,这样刷新展示的时候显示的是多个容器在同一时刻的监控数据,运维 人员可依据这些监控数据对多个容器的状态进行比较分析,更有利于反映出宿主机内各个 容器的运行状态,提升了监控效率。
[0040] 图2示出了根据本发明另一个实施例的对宿主机中容器进行本地实时监控的方 法的流程图。本实施例以宿主机为基于Docker应用容器引擎的服务器为例进行说明,以下 称这样的宿主机为Docker宿主机。Docker宿主机根据终端发送的监控命令启动本地监控 程序,本地监控程序每隔预定时间定时运行执行如图2所示的方法,该方法具体包括以下 步骤:
[0041] 步骤S201,调用Docker应用容器引擎的接口,查看处于存活状态的容器,更新容 器列表。
[0042] Docker作为开源工具提供了许多可调用接口,本地监控程序可通过调用对应的接 口查找到当前处于存活状态的容器列表。本实施例中,本地监控程序调用容器发现接口,具 体代码实现如下:
[0043]
[0044] 上述容器发现接口调用后所返回的值就是容器列表,可选地,将容器列表处理为 json格式,如下:
[0045] {"data":[{" {#N0DE}":"c0021v. add. bjdt. qihoo. net"},{" {#N0DE}":"c0016v. add.bjdt.qihoo.net"},{ ''{#N0DE}":"cOOlOv. add. bjdt. qihoo. net''},{" {#N0DE}":"c0006v. add. bjdt. qihoo. net''},{"
{#N0DE}":"c0002v. add. bjdt. qihoo. net"}]}
[0046] 上述示例中列出了 5个容器的容器名称,分别为"c0021v.add.bjdt.qihoo.net"、 "c0016v.add.bjdt.qihoo.net"、"c0010v.add.bjdt.qihoo.net"、"c0006v.add.bjdt. qihoo.net" 以及 "c0002v.add.bjdt.qihoo.net"。
[0047] 步骤S202,查找容器列表中每个容器对应的进程,对于未查找到进程的容器,创建 该容器对应的进程。
[0048] 本地监控程序为每一个处于存活状态的容器创建对应的进程。本方法是定时执行 的,如果此次方法执行得到的容器列表与上一次方法执行得到的容器列表一致,表明当前 容器列表中每个容器都具有对应的进程(之前创建的进程);如果此次方法执行得到的容 器列表相比上一次方法执行得到的容器列表增添了新的容器,那么本步骤为该容器创建对 应的进程;如果此次方法执行得到的容器列表相比上一次方法执行得到的容器列表减少了 某些容器,也即Docker宿主机内存在此次容器列表内未记录的容器对应的进程,则销毁这 些进程。通过该处理过程,保证Docker宿主机内存活的容器都有对应的进程为其实行监控 服务。本方法为多进程的处理方法,多个进程并行执行以获取各个容器的监控信息。
[0049] 步骤S203,各个进程同步抽取各自容器的原始状态信息。
[0050] 本步骤中,各个进程是同步运行的,每个进程负责抽取其对应的容器的原始状态 信息。例如,对于上述示例中的5个容器,分别对应有进程A、B、C、D和E,这5个进程同步 运行。
[0051] 各个进程抽取的原始状态信息包含但不限于以下几种:cpu状态信息、内存状态 信息、网络状态信息以及磁盘状态信息。这几种信息是反映容器运行状态的关键指标信息。 Docker宿主机内具有一指定目录cgroup,cgroup目录下有一些文件是实时更新的,cpu状 态信息和内存状态信息可通过读取这些文件记录的数据得到。而网络状态信息和磁盘状态 信息可通过调用Docker的exec()接口得到。
[0052] 步骤S204,对各容器的原始状态信息进行处理得到监控信息。
[0053] 各个进程处理得到的监控信息包含但不限于以下几种:cpu占用信息、内存占用 信息、网络流量信息以及磁盘占用信息。
[0054] 下面通过几个具体的示例介绍进程抽取各种原始状态信息和处理得到各种监控 信息的方法。
[0055] 对于cpu占用信息,以cpu空闲率为例进行说明:
[0056] (1)首先,进程在Docker的cgroup目录下读取文件,得到宿主机内部所有cpu的 中断值。
[0057] cat/proc/stat
[0058] cpu3133469 7401 3104242 3553123569 132473 58 21602 000
[0059] cpuO 251944 9 260082 147709125 8397 0 5074 000
[0060] cpul 304201 33 145887 147843986 9281 0 1561 000
[0061] cpu2 225218 202 166714 147876139 8957 9 2568 000
[0062] cpu3 215084 140 171011 147888463 8706 0 826 0 0 0
[0063] cpu4 266368 12 158857 147866110 8352 0 739 0 0 0
[0064] cpu5 203034 50 143072 147945613 7846 0 635 0 0 0
[0065] cpu6 105463 1435 210546 147987078 9087 0 2338 000
[0066] cpu7 139176 779 116588 148059723 9221 0 645 0 0 0
[0067] cpu8 137439 56 194463 147940180 8667 0 219 0 0 0
[0068] cpu9 87186 66 161497 148063120 8368 0 148 0 0 0
[0069] cpulO75995 129 108372 148123556 11497 0 192 0 0 0
[0070] cpull 76255 553 222601 148008104 9589 0 227 0 0 0
[0071] cpul2 37616 390 29130 148273198 519 0 104 0 0 0
[0072] cpul3 192658 1721 147542 147973978 1709 0 144 0 0 0
[0073] cpul4 91335 27 77563 148165505 748 0 102 0 0 0
[0074] cpul5 113149 44 135527 148086739 378 0 90 0 0 0
[0075] cpul6 74054 24 50266 148206655 1187 6 845 0 0 0
[0076] cpul7 56611 11 22716 148251531 1337 5 1075 000
[0077] cpul8 31401 2 38718 148264411 1431 10 611 0 0 0
[0078] cpul9 181266 1682 147994 147947551 4622 7 674 0 0 0
[0079] cpu20 97981 2 88707 148135665 1732 4 901 0 0 0
[0080] cpu21 96187 10 156737 148069044 3637 4 944 0 0 0
[0081] cpu22 53852 10 54436 148212130 4637 9 896 0 0 0
[0082] cpu23 19986 2 95205 148225954 2557 0 35 0 0 0
[0083] 本示例中,Docker宿主机内部共有24个cpu,上述第二列信息为各个cpu的中断 值。
[0084] (2)进程获取对应容器所占用的cpu总中断值。
[0085] cat/cgroup/cpuacct/docker/00bd87b4bd7f2cab5ac6912eda67cla55a943f825c7 624b273d6ff7d497a45df/cpuacct.stat
[0086] user1048888
[0087] system359653
[0088] 其中,"user1048888"是容器占用的用户态的中断值,"system359653"是容器占 用的内核态的中断值,这两个数值之和理解为容器所占用的cpu总中断值。
[0089] (3)根据宿主机的cpu共享策略,对容器所占用的cpu总中断值进行处理得到容器 的cpu空闲率。
[0090] 这里宿主机的cpu共享策略分为两种,一种是共享cpu,另一种是不共享cpu。对 于不同的共享策略,cpu空闲率的计算方式不同:
[0093] 其中,cfs_quota_us为-1,表示共享cpu,利用容器后一秒的中断值减去前一秒的 中断值得到数值a,利用宿主机后一秒的总中断值减去前一秒的总中断值的得到宿主机的 总中断值b,a/b*100得到该容器的cpu空闲率c_cpu_idle。
[0094] cfs_quota_us为-1,表示不共享cpu,而且cfs_quota_us的数值本身表示分配给 该容器的中断比值,利用容器后一秒的中断值减去前一秒的中断值得到数值a,利用cfs_ quota_us除以10000得到值b,a/b*100得到该容器的cpu空闲率c_cpu_idle。
[0095] 对于内存占用信息,以内存占用值和内存占用比例为例说明。
[0096] 进程在Docker的cgroup目录下读取文件,得到内存状态信息。
[0097]cat/cgroup/memory/docker/00bd87b4bd7f2cab5ac6912eda67cla55a943f825c76 24b273d6ff7d497a45df/memory,stat
[0098]cache1303879680
[0099]rss74170368
[0100] rss_huge8388608
[0101] mapped_file19103744
[0102] writeback0
[0103] swap0
[0104] pgpgin300770031
[0105]pgpgout300439725
[0106] pgfault1104410446
[0107]pgmajfault1068
[0108] inactive-anon602853376
[0109] active-anon74174464
[0110] inactive-file289038336
[0111] active-file411983872
[0112] unevictable0
[0113] hierarchical-memory-limit
8589934592
[0114] hierarchical-memsw-limit17179869184
[0115]total-cache1303879680
[0116] total-rss74170368
[0117] total-rss-huge8388608
[0118] total-mapped-file19103744
[0119] total-writeback0
[0120] total-swap0
[0121] total-pgpgin300770031
[0122] total-pgpgout300439725
[0123]total-pgfault1104410446
[0124]total-pgmajfault1068
[0125]total-inactive-anon602853376
[0126] total-active-anon74174464
[0127]total-inactive-file289038336
[0128] total-active-file411983872
[0129] total-unevictable 0
[0130] 其中,"totaljss74170368"即为容器的内存占用值,根据该内存占用值和分配 给容器的内存总大小计算得到内存占用比例。
[0131] 对于网络流量信息,以网络流量(in)和网络流量(out)为例进行说明:
[0132] 进程通过调用Docker的exec()接口得到网络状态信息。
[0133] 例如,调用exec()接口得到网卡出入站数据:
[0134] cat/sys/devices/virtual/net/ethO/statistics/rx-bytes
[0135] 13210803
[0136] cat/sys/devices/virtual/net/ethO/statistics/tx_by^es
[0137] 32392931
[0138] 由于网卡出入站数据为流量的累加数据,因此利用后一秒的网卡出入站数据减去 前一秒的网卡出入站数据,得到后一秒时刻的网络流量in和out数据。
[0139] 对于磁盘占用信息,也可通过调用Docker的exec()接口得到磁盘状态信息,进而 处理得到磁盘占用值和磁盘占用比例。
[0140] 步骤S205,将所有容器的监控信息汇总到数据队列中,每个容器的监控信息利用 容器标识进行区分。
[0141] 上述各个进程抽取到监控信息后,将监控信息汇总到数据队列中。每个容器的监 控信息利用容器标识进行区分,这里的容器标识是标示容器的唯一标识,如可采用上述容 器名称作为容器标识。
[0142] 步骤S206,根据容器标识从数据队列中提取各个容器的监控信息,将各个容器的 监控信息发送给终端。
[0143] 步骤S207,终端将各个容器的监控信息插入到对应的显示区域进行刷新显示。
[0144] 将提取的各个容器的监控信息提供给终端,终端实时从顶端清屏以刷新数据进行 展示。各个容器的各种监控信息在终端对应有显示区域,将各个容器的各种监控信息分别 插入到对应的显示区域进行刷新显示。本实施例以表格的形式展示终端所示的数据,如表 1所示。
[0145] 表 1
[0147] 本实施例也可设定终端数据的刷新率,例如刷新间隔为Is。终端数据的刷新率与 后端数据的更新率有关,后端数据的更新率至少高于终端数据的刷新率。进一步的,后端数 据的更新率是由本实施例方法执行的预定时间间隔决定的,可选的,该预定时间依据系统 性能而设定。在系统运行正常、资源丰富的情况下,运维人员无需经常查看宿主机中容器的 运行状态,这样预定时间设定可较长;在系统运行不正常、资源紧张等情况下,运维人员需 要实时查看宿主机中的容器的运行状态,这样预定时间设定可较短,提升后端数据的更新 率,进而提高终端数据的刷新率。
[0148] 通过本实施例提供的监控方法,为每个处于存活状态的容器创建各自的进程,采 用多进程并行运行的方式,抽取处理得到各个容器的监控信息进行展示。利用本方法,运维 人员只需启动本地监控程序,该本地监控程序自动定时运行,每隔预定时间利用创建的多 进程抽取各个容器的监控信息,与现有技术繁琐的手动方式相比,大大提高了执行效率。而 且,由于多个进程同步抽取监控信息,这样刷新展示的时候显示的是多个容器在同一时刻 的监控数据,运维人员可依据这些监控数据对多个容器的状态进行比较分析,更有利于反 映出宿主机内各个容器的运行状态,提升了监控效率。
[0149] 具体来说,多进程处理一方面提高了监控方法的执行效率,提升了终端显示的实 时性;另一个方面可以让多个容器的监控信息同时实时更新,避免了多个容器之间信息更 新的时延问题。例如,在容器数量很多的情况下,如果从头到尾顺序更新各个容器的监控信 息,很有可能导致最后一个容器的监控信息更新完毕后,最早更新的容器的监控信息已经 失效,这样运维人员无法对容器的监控信息进行对比分析,及时发现一些资源争抢状况。
[0150] 图3示出了根据本发明一个实施例的对宿主机中容器进行本地实时监控的装置 的功能结构框图。如图3所示,该装置300包括:扫描模块310、配置模块320、抽取模块330 以及处理模块340。
[0151] 扫描模块310,适于扫描宿主机内处于存活状态的容器,更新容器列表。以宿主机 为基于Docker应用容器引擎的服务器为例,扫描模块310进一步适于:调用Docker应用容 器引擎的接口,查看处于存活状态的容器。参照方法实施例的描述,扫描模块310调用容器 发现接口discovery(),其返回值就是容器列表,可选地,将容器列表处理为json格式。
[0152] 配置模块320,适于为容器列表中每个处于存活状态的容器配置对应的进程。可 选的,在第一次装置运行时,配置模块320适于为容器列表中每个容器创建对应的进程。在 后续装置定时运行时,配置模块320适于查找容器列表中每个容器对应的进程,对于未查 找到进程的容器,创建该容器对应的进程。如果配置模块320查找到此次装置运行得到的 容器列表相比上一次装置运行得到的容器列表增添了新的容器,则为该容器创建对应的进 程。配置模块320还适于若宿主机内存在容器列表内未记录的容器对应的进程,销毁该进 程。
[0153] 抽取模块330,适于利用各个进程同步抽取各自容器的原始状态信息。
[0154] 处理模块340,适于对各容器的原始状态信息进行处理得到监控信息,以进行显 不〇
[0155] 应可理解,上述对原始状态信息的处理,可以通过处理模块340利用各个进程分 别执行的方式完成,也可以由相同进程/模块统一执行来完成。
[0156] 各个进程处理的监控信息包含但不限于以下几种:cpu占用信息、内存占用信 息、网络流量信息以及磁盘占用信息。这几种信息是反映容器运行状态的关键指标信息。 Docker宿主机内具有一指定目录cgroup,cgroup目录下有一些文件是实时更新的,cpu状 态信息和内存状态信息可通过读取这些文件记录的数据得到。而网络状态信息和磁盘状态 信息可通过调用Docker的execO接口得到。
[0157] 抽取模块330进一步适于:进程在Docker应用容器引擎的指定目录下抽取所述宿 主机内部所有cpu的中断值;进程获取对应的容器所占用的cpu总中断值。处理模块340 进一步适于:根据宿主机的cpu共享策略,对容器所占用的cpu总中断值进行处理得到容器 的cpu占用信息。
[0158] 以cpu空闲率为例,首先,抽取模块330在Docker的cgroup目录下读取文件,得 到宿主机内部所有cpu的中断值;接着,获取对应容器所占用的cpu总中断值;然后,处理 模块340根据宿主机的cpu共享策略,对容器所占用的cpu总中断值进行处理得到容器的 cpu空闲率。
[0159] 这里宿主机的cpu共享策略分为两种,一种是共享cpu,另一种是不共享cpu。对 于不同的共享策略,cpu空闲率的计算方式不同。具体计算方式可参见上面实施例的描述。
[0160] 抽取模块330进一步适于:进程在docker应用容器引擎的指定目录下抽取内存状 态信息;和/或,进程调用docker应用容器引擎的exec接口,抽取得到网络状态信息和/ 或磁盘状态信息。
[0161] 处理模块340进一步适于:对内存状态信息进行处理得到内存占用信息;和/或, 对网络状态信息和/或磁盘状态信息进行处理得到网络流量信息和/或磁盘占用信息。
[0162] 可选地,所述装置还包括汇总模块350,适于将所有容器的监控信息汇总到数据队 列中,每个容器的监控信息利用容器标识进行区分。
[0163] 本实施例提供的装置每隔预定时间运行一次,该预定时间是依据系统性能来设定 的。在系统运行正常、资源丰富的情况下,运维人员无需经常查看宿主机中容器的运行状 态,这样预定时间设定可较长;在系统运行不正常、资源紧张等情况下,运维人员需要实时 查看宿主机中的容器的运行状态,这样预定时间设定可较短,提升后端数据的更新率,进而 提高终端数据的刷新率。
[0164] 图4示出了根据本发明一个实施例的对宿主机中容器进行本地实时监控的系统 的功能结构框图。如图4所示,该系统包括图3所示的装置300和终端400。
[0165] 其中,终端400适于向装置300发送监控命令。装置300接收到监控命令后定时 运行,向终端返回所有容器的监控信息。
[0166] 终端400
接收到装置300返回的所有容器的监控信息之后,实时从顶端清屏以刷 新数据进行展示。各个容器的各种监控信息在终端对应有显示区域,将各个容器的各种监 控信息分别插入到对应的显示区域进行刷新显示。本实施例也可设定终端数据的刷新率, 例如刷新间隔为Is。终端数据的刷新率与后端数据的更新率有关,后端数据的更新率至少 高于前端数据的刷新率。
[0167] 通过本实施例提供的监控装置及系统,为每个处于存活状态的容器创建各自的进 程,采用多进程并行运行的方式,抽取处理得到各个容器的监控信息进行展示。利用本装置 或系统,运维人员只需启动本地监控程序,该本地监控程序自动定时运行,每隔预定时间利 用创建的多进程抽取各个容器的监控信息,与现有技术繁琐的手动方式相比,大大提高了 执行效率。而且,由于多个进程同步抽取监控信息,这样刷新展示的时候显示的是多个容器 在同一时刻的监控数据,运维人员可依据这些监控数据对多个容器的状态进行比较分析, 更有利于反映出宿主机内各个容器的运行状态,提升了监控效率。
[0168] 在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。 各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求 的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种 编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发 明的最佳实施方式。
[0169] 在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施 例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构 和技术,以便不模糊对本说明书的理解。
[0170] 类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在 上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施 例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保 护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面 的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此, 遵循【具体实施方式】的权利要求书由此明确地并入该【具体实施方式】,其中每个权利要求本身 都作为本发明的单独实施例。
[0171 ] 本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地 改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单 元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或 子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任 何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开 的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴 随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代 特征来代替。
[0172] 此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例 中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的 范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任 意之一都可以以任意的组合方式来使用。
[0173] 本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行 的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用 微处理器或者数字信号处理器OSP)来实现根据本发明实施例的监控装置中的一些或者 全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分 或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明 的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信 号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
[0174] 应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领 域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中, 不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词"包含"不排除存在 未列在权利要求中的元件或步骤。位于元件之前的单词"一"或"一个"不排除存在多个这 样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来 实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件 项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为 名称。
[0175] 本发明公开了:A1、一种对宿主机中容器进行本地实时监控的方法,包括:
[0176] 扫描宿主机内处于存活状态的容器,更新容器列表;
[0177] 为所述容器列表中每个处于存活状态的容器配置对应的进程;
[0178] 各个进程同步抽取各自容器的原始状态信息;以及
[0179] 对各容器的原始状态信息进行处理得到监控信息,以进行显示。
[0180] A2、根据A1所述的方法,其中,所述为所述容器列表中每个处于存活状态的容器 配置对应的进程进一步包括:
[0181] 为所述容器列表中每个处于存活状态的容器创建对应的进程。
[0182]A3、根据A1所述的方法,其中,所述为所述容器列表中每个处于存活状态的容器 配置对应的进程进一步包括:
[0183] 查找所述容器列表中每个容器对应的进程,对于未查找到对应的进程的容器,创 建该容器对应的进程。
[0184]A4、根据A1-A3任一项所述的方法,其中,若所述宿主机内存在所述容器列表内未 记录的容器对应的进程,销毁该进程。
[0185]A5、根据A1-A4任一项所述的方法,其中,所述宿主机为基于Docker应用容器引擎 的服务器,以及
[0186] 所述扫描宿主机内处于存活状态的容器具体为:调用Docker应用容器引擎的接 口,查看处于存活状态的容器。
[0187]A6、根据A1-A5任一项所述的方法,其中,所述监控信息包含以下信息的一项或多 项:
[0188]cpu占用信息、内存占用信息、网络流量信息以及磁盘占用信息。
[0189]A7、根据A1-A6任一项所述的方法,其中,所述各个进程同步抽取各自容器的原始 状态信息;以及对各容器的原始状态信息进行处理得到监控信息进一步包括:
[0190] 所述进程在Docker应用容器引擎的指定目录下抽取所述宿主机内部所有cpu的 中断值;
[0191] 所述进程获取对应的容器所占用的cpu总中断值;以及
[0192] 根据所述宿主机的cpu共享策略,对所述容器所占用的cpu总中断值进行处理得 到所述容器的CPU占用信息。
[0193]A8、根据A1-A6任一项所述的方法,其中,所述各个进程同步抽取各自容器的原始 状态信息;以及对各容器的原始状态信息进行处理得到监控信息进一步包括:
[0194] 所述进程在docker应用容器引擎的指定目录下抽取内存状态信息,对内存状态 信息进行处理得到内存占用信息;和/或,
[0195] 所述进程调用docker应用容器引擎的exec接口,抽取得到网络状态信息和/或 磁盘状态信息,对所述网络状态信息和/或磁盘状态信息进行处理得到网络流量信息和/ 或磁盘占用信息。
[0196]A9、根据A1-A8任一项所述的方法,其中,在所述对各容器的原始状态信息进行处 理得到监控信息之后,所述方法还包括:
[0197] 将所有容器的监控信息汇总到数据队列中,每个容器的监控信息利用容器标识进 行区分;以及
[0198] 根据容器标识从数据队列中提取各个容器的监控信息发送给终端以进行显示。
[0199]A10、根据A1-A9中任一项所述的方法,其中,所述对宿主机中容器进行本地实时 监控的方法每隔预定时间执行一次。
[0200] All、根据A10所述的方法,其中,所述预定时间是依据系统性能来设定的。
[0201] 本发明还公开了:B12、一种对宿主机中容器进行本地实时监控的方法,包括:
[0202] 根据终端发送的监控命令,扫描宿主机内处于存活状态的容器,更新容器列表;
[0203] 为所述容器列表中每个处于存活状态的容器配置对应的进程;
[0204] 各个进程同步抽取各自容器的原始状态信息;以及
[0205] 对各容器的原始状态信息进行处理得到监控信息;
[0206] 将所有容器的监控信息发送给所述终端,所述终端显示所有容器的监控信息。
[0207] B13、根据B12所述的方法,其中,所述为所述容器列表中每个处于存活状态的容 器配置对应的进程进一步包括:
[0208] 为所述容器列表中每个处于存活状态的容器创建对应的进程。
[0209] B14、根据B12所述的方法,其中,所述为所述容器列表中每个处于存活状态的容 器配置对应的进程进一步包括:
[0210] 查找所述容器列表中每个容器对应的进程,对于未查找到对应的进程的容器,创 建该容器对应的进程。
[0211] B15、根据B14所述的方法,其中,若所述宿主机内存在所述容器列表内未记录的 容器对应的进程,销毁该进程。
[0212] B16、根据B12-B15任一项所述的方法,其中,所述宿主机为基于Docker应用容器 引擎的服务器,以及
[0213] 所述扫描宿主机内处于存活状态的容器具体为:调用Docker应用容器引擎的接 口,查看处于
存活状态的容器。
[0214] B17、根据B12-B16任一项所述的方法,其中,所述监控信息包含以下信息的一项 或多项:
[0215]cpu占用信息、内存占用信息、网络流量信息以及磁盘占用信息。
[0216]B18、根据B12-B17任一项所述的方法,其中,所述各个进程同步抽取各自容器的 原始状态信息;以及对各容器的原始状态信息进行处理得到监控信息进一步包括:
[0217] 所述进程在Docker应用容器引擎的指定目录下抽取所述宿主机内部所有cpu的 中断值;
[0218] 所述进程获取对应的容器所占用的cpu总中断值;以及
[0219] 根据所述宿主机的cpu共享策略,对所述容器所占用的cpu总中断值进行处理得 到所述容器的CPU占用信息。
[0220] B19、根据B12-B17任一项所述的方法,其中,所述各个进程同步抽取各自容器的 原始状态信息;以及对各容器的原始状态信息进行处理得到监控信息进一步包括:
[0221] 所述进程在docker应用容器引擎的指定目录下抽取内存状态信息,对内存状态 信息进行处理得到内存占用信息;和/或,
[0222] 所述进程调用docker应用容器引擎的exec接口,抽取得到网络状态信息和/或 磁盘状态信息,对所述网络状态信息和/或磁盘状态信息进行处理得到网络流量信息和/ 或磁盘占用信息。
[0223] B20、根据B12-B19任一项所述的方法,其中,在所述对各容器的原始状态信息进 行处理得到监控信息之后,所述方法还包括:
[0224] 将所有容器的监控信息汇总到数据队列中,每个容器的监控信息利用容器标识进 行区分;以及
[0225] 所述将所有容器的监控信息发送给终端进一步为:根据容器标识从数据队列中提 取各个容器的监控信息发送给终端。
[0226] B21、根据B12-B20任一项所述的方法,其中,所述终端显示所有容器的监控信息 进一步包括:
[0227] 所述终端将各个容器的监控信息插入到对应的显示区域进行显示。
[0228] B22、根据B12-B21中任一项所述的方法,其中,所述对宿主机中容器进行本地实 时监控的方法每隔预定时间执行一次。
[0229] B23、根据B22所述的方法,其中,所述预定时间是依据系统性能来设定的。
[0230] 本发明还公开了:C24、一种对宿主机中容器进行本地实时监控的装置,包括:
[0231] 扫描模块,适于扫描宿主机内处于存活状态的容器,更新容器列表;
[0232] 配置模块,适于为所述容器列表中每个处于存活状态的容器配置对应的进程;
[0233] 抽取模块,适于利用各个进程同步抽取各自容器的原始状态信息;
[0234] 处理模块,适于对各容器的原始状态信息进行处理得到监控信息,以进行显示。
[0235] C25、根据C24所述的装置,其中,所述配置模块具体适于:为所述容器列表中每个 处于存活状态的容器创建对应的进程。
[0236] C26、根据C24所述的装置,其中,所述配置模块具体适于:查找所述容器列表中每 个容器对应的进程,对于未查找到对应的进程的容器,创建该容器对应的进程。
[0237] C27、根据C26所述的装置,其中,所述配置模块还适于:若所述宿主机内存在所述 容器列表内未记录的容器对应的进程,销毁该进程。
[0238] C28、根据C24-C27任一项所述的装置,其中,所述宿主机为基于Docker应用容器 引擎的服务器;
[0239] 所述扫描模块进一步适于:调用docker应用容器引擎的接口,查看处于存活状态 的容器。
[0240] C29、根据C24-C28任一项所述的装置,其中,所述监控信息包含以下信息的一项 或多项:
[0241] cpu占用信息、内存占用信息、网络流量信息以及磁盘占用信息。
[0242] C30、根据C24-C29任一项所述的装置,所述抽取模块进一步适于:
[0243] 所述进程在Docker应用容器引擎的指定目录下抽取所述宿主机内部所有cpu的 中断值;
[0244] 所述进程获取对应的容器所占用的cpu总中断值;
[0245] 所述处理模块进一步适于:根据所述宿主机的cpu共享策略,对所述容器所占用 的CPU总中断值进行处理得到所述容器的CPU占用信息。
[0246]C31、根据C24-C29任一项所述的装置,所述抽取模块进一步适于:
[0247] 所述进程在Docker应用容器引擎的指定目录下抽取内存状态信息;和/或,所述 进程调用Docker应用容器引擎的exec接口,抽取得到网络状态信息和/或磁盘状态信息;
[0248] 所述处理模块进一步适于:对内存状态信息进行处理得到内存占用信息;和/或, 对所述网络状态信息和/或磁盘状态信息进行处理得到网络流量信息和/或磁盘占用信 息。
[0249]C32、根据C24-C31任一项所述的装置,其中,还包括:汇总模块,适于将所有容器 的监控信息汇总到数据队列中,每个容器的监控信息利用容器标识进行区分。
[0250]C33、根据C24-C32任一项所述的装置,其中,所述装置每隔预定时间运行一次。
[0251]C34、根据C33所述的装置,其中,所述预定时间是依据系统性能来设定的。
[0252] 本发明还公开了:D35、一种对宿主机中容器进行本地实时监控的系统,包括: C24-C34任一项所述的对宿主机中容器进行本地实时监控的装置以及终端;
[0253] 所述终端适于:向所述装置发送监控命令,以及接收所述装置返回的所有容器的 监控信息并显示。
[0254]D36、根据D35所述的系统,其中,所述终端进一步适于:将各个容器的监控信息插 入到对应的显示区域进行显示。
【主权项】
1. 一种对宿主机中容器进行本地实时监控的方法,包括: 扫描宿主机内处于存活状态的容器,更新容器列表; 为所述容器列表中每个处于存活状态的容器配置对应的进程; 各个进程同步抽取各自容器的原始状态信息;以及 对各容器的原始状态信息进行处理得到监控信息,以进行显示。2. 根据权利要求1所述的方法,其中,所述为所述容器列表中每个处于存活状态的容 器配置对应的进程进一步包括: 为所述容器列表中每个处于存活状态的容器创建对应的进程。3. 根据权利要求1所述的方法,其中,所述为所述容器列表中每个处于存活状态的容 器配置对应的进程进一步包括: 查找所述容器列表中每个容器对应的进程,对于未查找到对应的进程的容器,创建该 容器对应的进程。4. 根据权利要求1-3任一项所述的方法,其中,若所述宿主机内存在所述容器列表内 未记录的容器对应的进程,销毁该进程。5. 根据权利要求1-4任一项所述的方法,其中,所述宿主机为基于Docker应用容器引 擎的服务器,以及 所述扫描宿主机内处于存活状态的容器具体为:调用Docker应用容器引擎的接口,查 看处于存活状态的容器。6. 根据权利要求1-5任一项所述的方法,其中,所述监控信息包含以下信息的一项或 多项: cpu占用信息、内存占用信息、网络流量信息以及磁盘占用信息。7. 根据权利要求1-6任一项所述的方法,其中,所述各个进程同步抽取各自容器的原 始状态信息;以及对各容器的原始状态信息进行处理得到监控信息进一步包括: 所述进程在Docker应用容器引擎的指定目录下抽取所述宿主机内部所有cpu的中断 值; 所述进程获取对应的容器所占用的cpu总中断值;以及 根据所述宿主机的cpu共享策略,对所述容器所占用的cpu总中断值进行处理得到所 述容器的cpu占用信息。8. -种对宿主机中容器进行本地实时监控的方法,包括: 根据终端发送的监控命令,扫描宿主机内处于存活状态的容器,更新容器列表; 为所述容器列表中每个处于存活状态的容器配置对应的进程; 各个进程同步抽取各自容器的原始状态信息;以及 对各容器的原始状态信息进行处理得到监控信息; 将所有容器的监控信息发送给所述终端,所述终端显示所有容器的监控信息。9. 一种对宿主机中容器进行本地实时监控的装置,包括: 扫描模块,适于扫描宿主机内处于存活状态的容器,更新容器列表; 配置模块,适于为所述容器列表中每个处于存活状态的容器配置对应的进程; 抽取模块,适于利用各个进程同步抽取各自容器的原始状态信息; 处理模块,适于对各容器的原始状态信息进行处理得到监控信息,以进行显示。10. -种对宿主机中容器进行本地实时监控的系统,包括:权利要求9所述的对宿主机 中容器进行本地实时监控的装置以及终端; 所述终端适于:向所述装置发送监控命令,以及接收所述装置返回的所有容器的监控 信息并显示。
【专利摘要】本发明公开了一种对宿主机中容器进行本地实时监控的方法、装置及系统。其中方法包括:扫描宿主机内处于存活状态的容器,更新容器列表为所述容器列表中每个处于存活状态的容器配置对应的进程;各个进程同步抽取各自容器的原始状态信息;以及对各容器的原始状态信息进行处理得到监控信息,以进行显示。本发明与现有技术繁琐的手动方式相比,大大提高了执行效率。而且,由于多个进程同步抽取监控信息,这样刷新展示的时候显示的是多个容器在同一时刻的监控数据,更有利于反映出宿主机内各个容器的运行状态,提升了监控效率。
【IPC分类】G06F11/34, G06F11/30
【公开号】CN104899126
【申请号】CN201510325786
【发明人】赵鹏
【申请人】北京奇虎科技有限公司, 奇智软件(北京)有限公司
【公开日】2015年9月9日
【申请日】2015年6月12日