cAdvisor 容器监控软件学习
一、cAdvisor 介绍
cAdvisor 官网地址:
https://github.com/google/cadvisor
cAdvisor(Container Advisor)官网 介绍:
cAdvisor(容器顾问)为容器用户提供对其运行容器的资源使用情况和性能特征的理解。它是一个运行的守护进程,收集、聚合、处理和导出有关运行容器的信息。具体来说,对于每个容器,它保持资源隔离参数、历史资源使用情况、完整历史资源使用情况的直方图和网络统计数据。这些数据按容器和全局机器导出。
cAdvisor 对 Docker 容器提供原生支持,应该可以开箱即用地支持几乎所有其他容器类型。我们致力于全面支持,如果情况并非如此,请随时打开一个问题。cAdvisor 的容器抽象基于 lmctfy,因此容器本质上具有嵌套的层次结构。
cAdvisor还可以导出容器监控指标提供给promethus
二、cAdvisor 部署
1. 使用docker部署
cAdvisor 提供了开箱即用的docker镜像,下来将使用多个系统来部署cAdvisor
1.1. 使用centos7.9部署
官网手册:https://github.com/google/cadvisor/blob/master/docs/running.md#centos-fedora-and-rhel
docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys/fs/cgroup/cpu,cpuacct:/sys/fs/cgroup/cpuacct,cpu \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
--privileged=true \
google/cadvisor:latest
1.2. 使用ubuntu22.04部署
使用ubuntu22.04部署时不能使用google/cadvisor:latest这个镜像,因为centos7.9默认使用的是cgroup v1,cgroup v1 会将cpu 挂载到/sys/fs/cgroup/cpu,cpuacct目录,而cgroup v2是直接将所有的cgroup挂载到 /sys/fs/cgroup目录。
所以ubuntu22.04在使用google/cadvisor:latest镜像的时候会报错:
F0808 14:43:01.537184 1 cadvisor.go:146] Failed to create a Container Manager: mountpoint for cpu not found
验证以下cgroup版本和挂载路径:
centos7.9:
docker info | grep -i "cgroup version"
Cgroup Version: 1
mount | grep -i cgroup
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_prio,net_cls)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
ubuntu22.04:
docker info | grep -i "cgroup version"
Cgroup Version: 2
mount | grep -i cgroup
cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate,memory_recursiveprot)
更换镜像gcr.io/cadvisor/cadvisor
就可以解决这个问题,但是GCR镜像仓库无法在国内访问,所有需要配置国内的镜像源,目前发现南京源可以正常下载。
添加南京大学镜像站:
{"registry-mirrors": ["https://docker.nju.edu.cn"]
}
但是需要修改域名,例如将gcr.io
修改为gcr.nju.edu.cn
docker pull gcr.nju.edu.cn/cadvisor/cadvisor
部署cadvisor:
docker run \--volume=/:/rootfs:ro \--volume=/var/run:/var/run:ro \--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 \gcr.nju.edu.cn/cadvisor/cadvisor
三、访问cAdvisor
cAdvisor 默认使用8080端口访问:
默认是主机监控界面:
点击Docker Containers
进入容器监控界面: