容器与通常的虚拟机在虚拟化程度上存在着差异,在监控手段上也有不同。一台虚拟机,我们可以当做一个物理机对待,而容器虽然也可以当做虚拟机,但这不符合容器的使用理念。在监控的实现过程中,我们更倾向于把容器看做是宿主机上的一系列进程树。
业界已经出现的一些 Docker监控方案,如 Docker Stats、CAdvisor、Scout等,也都是在宿主机上对容器进行监控的。
模型化容器监控方案
这一方案有利于和运维基础的 CMDB系统打通,同时能兼顾到更多层次上的监控。监控系统一般会涉及:数据采集、数据存储、数据分析和报警、数据展示等几个部分。
1.监控对象模型
这里我们将使用一种产品树的结构来建模监控对象。把监控对象分为四类,分别是产品、应用、集群、节点。
产品:一般是一个高层次的概念,一个产品一般可以独立输出,对外提供服务。应用:是产品下的模块组成,多个应用共同形成一个产品。集群:是应用的存在形式。同一个应用,一般会根据环境,地域等,部署多个集群。节点:集群内承载服务的资源,包括前文提到的服务器,虚拟机,容器等。
这样,我们的监控数据采集,和视图展示,就可以基于产品树这个层次化的监控对象来做。每种监控对象上都可以有自定义的监控项,也可以继承上层的监控项。同时,分层次的监控对象,在很好地组织监控结构的时候,又可以从多种层次角度来反映出系统的运行状态和问题。
2.采集器模型
主要用于采集数据的模块,同时满足数据输出规范,为了便于解析,同时具备较好的数据结构展示,我们可以采用 Json格式作为数据规范。在数据的语义上需要匹配对应的数据模型。例如,针对节点模型的采集器,可以是一个脚本,通过捕获脚本执行输出来获取相应数据模型的数据。而上层节点的采集器,则一般是基于节点数据模型的一些计算,这些计算一般包括 sum,avg,max,min等,一般反映的是整个集群下节点的一些聚合数据。
3.数据模型
用来定义监控数据格式,模型包括数据项和指标项。一个数据项一般包含一个或者多个指标项。数据模型中的数据来自于对应的采集器。
例如,针对 CPU可以监控如下模型:数据项:cpu,指标项:usr,sys,idle
4.报警规则模型
在数据模型的基础上,针对每个数据指标项目,可以设置报警模型。例如,空闲 CPU少于 50%的时候触发报警,则可以建立如下规则:cpu.idle < 50
5.视图模型
这个模型将数据模型和视图关联起来了。包含数据展示方式定义,例如,可以是趋势图,表格等。可以结合数据模型中的数据项与指标项,描述具体数据指标的视图展示方式。不同监控对象上的视图,一般都能从不同层次体现出监控。
6.监控项模型
监控项模型,包含了采集器模型,数据模型,报警规则模型,视图模型等的组合。通过将监控项运用于监控对象上。从而可以对监控对象进行自定义模型化的监控。
西部数码的容器云产品就是通过docker技术,在集群服务器上部署容器服务实现,功能强大、简单易用,拥有上万linux镜像,秒级开通,高性价比的容器云产品链接 https://www.west.cn/paas/container/