容器监控:容器监控原理及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是基于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上的相关文件并展示给用户了。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM