容器监控:容器监控原理及cAdvisor的安装与使⽤容器的特性
1.  短期存活,可以动态调度
2. 本质是进程,⽽不是⼀个完整的操作系统
3. ⾮常轻量,所以容器的创建和销毁也会⽐传统虚拟机更加频繁
docker容器的监控⽅案
1. ⾃带的docker stats 命令
2. 开源的解决⽅案:sysdig,cAdvisor,Prometheus
使⽤docker stats 监控演⽰
⾸先在主机上启动⼀个资源限制为1核2G的nginx容器
命令
docker run --cpus=1 -m=2G --name=nginx nginx
使⽤docker stats 命令查看容器的资源使⽤状态
docker stats nginx
状态如下
这种⽅法的缺点很明显,只能查询本容器数据,⽽且不能查询历史数据。所以,通常不⽤这种⽅法监控容器
⽣产环境中,我们通常⽤cAdvisor这种⽅案来监控
cAdvisor是⾕歌开源的⼀款通⽤容器监控解决⽅案
它有如下优势:
1. 可以采集机器上所有运⾏的容器信息
2. 提供了基础的查询界⾯和HTTP接⼝
所以,cAdvisor很快成为了流⾏的容器监控指标中最常⽤的组件,并且k8s也集成了cAdvisor作为容器监控的默认⼯具。cAdvisor的安装与使⽤
这⾥⽤docker的⽅式进⾏安装
访问本地8080端⼝即可。值得⼀提的是,cAdvisor不仅可以监控容器的资源使⽤情况,也可以监控主机的资源使⽤情况。使⽤cAdvisor查看资源的使⽤情况
cAdvisor监控的特点
可以同时采集物理机容器的状态
docker进入容器可以展⽰监控历史数据
容器监控的原理
Docker是基于Namespace、Cgroups和联合⽂件系统实现的
Cgroups不仅可以⽤于容器资源的限制,还可以提供容器的资源使⽤率。不管⽤什么监控⽅案,底层数据都来源于Cgroups
Cgroups的⼯作⽬录  /sys/fs/cgroup 下包含了Cgroups的所有内容。Cgroups包含了很多⼦系统,可以对CPU,内存,PID,磁盘IO等资源进⾏限制和监控。
查看 /sys/fs/cgroup ⽂件夹
每⼀个⽂件夹都代表了Cgroups的⼦系统,docker会在Cgroups的⼦系统下创建docker⽂件夹。
以memory⼦系统为例介绍监控组件获取到容器的资源和使⽤状态的原理
在主机上启动⼀个资源限制为1核2G的tomcat容器
docker  run -d  --cpus=1  -m=4G --name=tomcat  tomcat
666502d11f739b135731de20fc2e86320f339009bc24d5690fd35987ded645ac
容器会在/sys/fs/cgroups/memory/docker 下创建以容器ID命名的⽂件夹
查看/sys/fs/cgroups/memory/docker⽂件夹
进⼊以该容器ID命名的⽂件夹
cd  666502d11f739b135731de20fc2e86320f339009bc24d5690fd35987ded645ac/
查看该⽂件夹下的内容
memory.limit_in_bytes ⽂件就是存放内存总量信息的⽂件
使⽤cat命令查看⽂件内容
cat memory.limit_in_bytes
4294967296
单位为byte,换算后⼤约为4G
内存使⽤情况存在 memory.usage_in_bytes ⽂件⾥,查看该⽂件
cat memory.usage_in_bytes
65040384
换算后⼤约62Mb
下⾯看下⽹络监控的数据来源
监控数据是在/proc/PID/net/dev/下
使⽤docker  inspect 命令查看tomcat容器的PID
docker inspect tomcat  | grep Pid
"Pid": 16667,
"PidMode": "",
"PidsLimit": null,
得知tomcat容器的PID是16667
查看/proc/16667/net/dev⽂件
cat /proc/16667/net/dev
Inter-|  Receive                                                |  Transmit
face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
eth0:      0      0    0    0    0    0          0        0        0      0    0    0    0    0      0          0
lo:      0      0    0    0    0    0          0        0        0      0    0    0    0    0      0          0
现在我们已经知道,容器的监控原理就是定时读取linux上的相关⽂件并展⽰给⽤户了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。