Docker监控:cAdvisor的安装和使用

  • Docker容器的监控方案有很多,除了Docker自带的docker stats命令,还有其他的开源解决方案,例如sysdig、cAdvisor、Prometheus等,都是常用的监控工具。
  • 这里主要介绍一下cAdvisor的安装和使用。
  • cAdvisor是谷歌开源的一款通用容器监控工具。它不仅可以采集机器上所有运行的容器信息,还提供了基础的查询界面和HTTP接口,更方便与外部系统结合。所以cAdvisor很快成了容器指标监控的最常用组件,并且Kubernetes也集成了cAdvisor作为容器监控指标的默认工具。
  • 下面我们主要介绍cAdvisor0.37.0版本相关的安装和使用方法,因为cAdvisor官方提供了Docker镜像,所以我们只需要拉取镜像并且启动即可。
  • 启动命令:
docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --volume=/dev/disk/:/dev/disk:ro --publish=8080:8080 --detach=true --name=cadvisor --privileged --device=/dev/kmsg lagoudocker/cadvisor:v0.37.0
  • 查看docker看,确认cadvisor容器正常启动:
docker ps
  • 访问http:localhost:8080/containers/,在首页可以查看到主机的资源使用情况,包括CPU、内存、文件系统、网络等,如下图所示:

Docker监控:cAdvisor的安装和使用_第1张图片

  • 访问http://localhost:8080/docker/地址,查看Docker的基本信息和运行的容器情况,如下图所示:

Docker监控:cAdvisor的安装和使用_第2张图片

  • nginx容器是以下命令启动的:
docker run --cpus=1 -m=1g --name=nginx -d nginx
  • 子容器那里显示了本机上跑的所有容器列表,选一个容器进入可以查看到具体的容器运行状态,如下图所示(这是cAdvisor容器的资源使用情况):

Docker监控:cAdvisor的安装和使用_第3张图片

  • 使用cAdvisor监控容器有以下特点:1.可以同时采集物理机和容器的状态;2.可以显示监控历史数据。
  • Docker是基于Namespace、Cgroups和联合文件系统实现的。其中Cgroups不仅可以用于容器资源的限制,还可以提供容器的资源使用率。无论何种监控方案的实现,底层数据都是来源于Cgroups。
  • Cgroups的目录在/sys/fs/cgroup, 这个目录下包含了Cgroups的所有内容,以此用来对不同资源进行限制。例如CPU、内存、PID、磁盘IO等,如下图所示:

Docker监控:cAdvisor的安装和使用_第4张图片

  • 这些目录代表了Cgroups的子系统,Docker会在每一个Cgroups子系统下创建docker文件夹。
  • 我们上面启动的nginx容器(docker run --cpus=1 -m=1g --name=nginx -d nginx),通过进入memory子系统去查看一下cAdvisor是如何获取容器资源的,如下图所示:

Docker监控:cAdvisor的安装和使用_第5张图片

  • 我们找到nginx启动容器的id,然后进入/sys/fs/cgroup/memory/system.slice/docker-7e41592eba72953ce88f30f6db3076504f8dc0431b13241968e6064a62792918.scope目录,获取对应的当前内存使用资源和总的限制内存大小,如下图所示:

在这里插入图片描述

  • 网络的监控数据来自于/proc/{PID]/net/dev,容器PID可以通过以下命令查看:

Docker监控:cAdvisor的安装和使用_第6张图片

  • 可以看到容器的PID是1005,使用cat命令查看一下/proc/1005/net/dev的内容如下:

在这里插入图片描述

  • /proc/1005/net/dev文件记录了该容器每一个网卡的流量接收和发送情况,以及错误数、丢包数等信息。可见容器的网络监控数据都是定时从这里读取并且展示的。
  • 总结一下,容器的监控原理其实就是定时读取Linux主机上相关的文件并展示给用户。

你可能感兴趣的:(docker和k8s,运维之道,运维常用,docker,linux,cAdvisor,容器,监控)