极速飞艇源码搭建搭建详情 Container及其内部进程监控...

2019-08-27 18:20 966 9
目前市场上的虚拟化技术种类很多,例如moby(docker)LXCRKT等等。在带来方便应用部署和资源充分利用的好处的同时,极速飞艇源码搭建搭建(企鹅:917_899_899)(恻试bbs.yasewl.com)如何监控相应Container及其内部应用进程成为运维人员不可避免遇到的新情况。UAV.Container从虚拟化技术的基础原理和Linux操作系统的内核特性出发,得到Container容器和内部进程的各维度监控数据,使无论是虚拟机或物理机运维人员,还是业务运维人员角度,都能得到合适的监控维度。
虚拟化技术从基础原理上主要是cgroupsnamespacefile system的应用,而操作系统作为cgroupnamespace根节点,无论在container里启动何种应用,从内核角度上来说,肯定在操作系统有其一定的特征和表现形式。我们需要做的就是对这些特征做加工处理,以得到相应的监控数据。
下面我们以docker技术举例,其他虚拟化技术类似。
一、Container ID
Container ID是一个Container的唯一标识。从容器监控的角度我们需要能得到该进程在哪个Container里运行。在操作系统层面,进程的cgroup的挂载情况就能有所体现。如图所示,我们在一个ID3411554ff684Container内部跑一个Tomcat进程。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.jpg
由于Containerpidnamespace是操作系统的pidnamespace的子namespace,那么该进程在操作系统级也应该有相应的pid,用docker top命令验证一下:
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
该容器内进程在宿主机上的进程号为1848。接下来进入/proc/1848/cgroup下看看该进程的cgroup挂载情况
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg
cgroup文件里清楚的显示了实现了该容器的虚拟化技术、Container ID和此container的资源挂载路径,对比一下这里面显示的Container ID,和创建Container时的ID完全相同。这也验证了通过扫描宿主机进程的cgroup信息可以获得Container ID。这样就将pidContainer ID做了关联。
二、CPU
虽然cgroup管控了该cgroup下所有进程的CPU使用情况,但从操作系统的角度上,不论进程是否隶属于某个子cgroup下,仍然是共用宿主机的CPU。所以监控宿主机上该进程的CPU就能得到进程的CPU监控指标。
Linux上常用的CPU监控命令是toptopCPU监控的原理是在time1时刻获取CPU从启动时的累计总时间countAll1busy总时间countBusy1,再到time2时刻获取CPU总时间countAll2busy总时间countBusy2,最后用busy的时间差值减去总时间的差值得到了在time1time2这个时间段内机器CPU的占用情况。也就是:
CPU占用率(%)= (countBusy2 - countBusy1)/(countAll2 - countAll1) * 100
进程同理,在两个时刻分别得到每个进程的busy总时间countProcBusy1countProcBusy2,则得到进程CPU占用率:
进程CPU占用率(%)= (countProcBusy2 - countProcBusy1)/(countProcAll2 - countProcAll1)*100
宿主机从启动开始的CPU总时间片可以从/proc/stat下获取:
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg
第一行是总的CPU使用情况,具体参数的意思:
所以,选择当前为time13秒后为time2countAll = user + nice + system +idle + iowait + irq + softirq + stealstolean + guest + guest_nicecountBusycountAll减去idle的值,这样上面第一个公式的所有需要的值就齐了,可以直接计算。
第二行、第三行是每个逻辑CPU的使用情况,这里记下有两个逻辑CPUCPU的逻辑核数与CPU显示模式irixsolaris有关。
接下来是countProcBusy的计算,进程的CPU时间片位于/proc/$pid/stat下,如图所示:
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image005.jpg
这个文件里面体现了很多进程的相关信息。其中第14151617个参数与CPU有关。
所以,countProcBusy = utime + stime + cutime + cstime,该值包括其所有线程的cpu时间。而countProcAll2-countProcAll1=3s,通过两个时刻的countProcBusycountProcAll,进程CPU的占用率就能得到了。
其中需要注意的问题有两点:
1) jiffies实际上指的是内核时钟使用的节拍总数,所以这里的jiffies需要换算成秒才能应用上面的除法公式。
2) 刚刚我们谈到CPU显示模式irixsolaris,简单来说irix模式就是机器有N个逻辑CPUCPU显示上限就是N*100%solaris模式就是不管机器有多少逻辑CPUCPU显示上限就是100%,而/proc/$pid/stat显示的是计算了所有逻辑CPU时间的,所以两种显示方式意味着计算方法稍有差异,solaris模式的结果需要在上面进程CPU占用率公式基础之上除以逻辑核数。

点评

dfh
海!外直播 t.cn/RxmJTRa **视频 t.cn/RxkPOKC 这台湾的蔡英文把执政党赶下台在赵国是颠覆国家政权罪的行为,看来全国媒体都要对台湾大选和蔡英文要好好批判一番...呵呵   发表于 2019-11-18 09:02
dfh
海!外直播 t.cn/RxmJTrS **视频 t.cn/RJJZmvp 小人都想扮成君子,可见君子是受人尊重的;荡妇也想装成淑女,可见淑女是受人喜爱的;现在连朝鲜都想炫耀自己民主,可见...   发表于 2019-11-17 03:03
您需要登录后才可以回帖 登录 | 立即注册