通过cAdvisor监控容器性能指标
【容器监控面临的问题】
容器生命周期很短,经常变化,直接从容器中获取性能指标很困难。
【解决思路】
容器最终是在宿主机上面运行,容器的相关数据也是放在宿主机上面。我们可以不直接监控容器,而是通过监控容器所在宿主机的目录。分析容器相关文件数据从而把容器相关信息获取到。
【解决方案】
在宿主机上部署cAdvisor来导出正在运行容器的相关信息。
注意:一个cAdvisor仅对一台主机进行监控,如果有多台主机需要监控,每台主机都需要部署cAdvisor。
cAdvisor简介:基于Go语言开发,对Node机器上的资源及容器进行实时监控和性能数据采集,包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况,利用Linux的cgroups获取容器的资源使用信息,可用于对容器资源的使用情况和性能进行监控。
项目地址:http://github.com/google/cadvisor
部署cAdvisor
编译安装
官方编译安装说明:https://github.com/google/cadvisor/blob/master/docs/development/build.md
1.安装go环境,go版本不要太高(1.14+,1.18以下)
wget https://studygolang.com/dl/golang/go1.17.12.linux-amd64.tar.gz
tar xvf go1.17.12.linux-amd64.tar.gz -C /usr/local/
echo 'export GOROOT=/usr/local/go' > /etc/profile.d/go.sh
echo 'export PATH=$PATH:$GOROOT/bin' >> /etc/profile.d/go.sh
source /etc/profile.d/go.sh
准备好go环境后,通过go version
命令验证下
root@wang:~# go version
go version go1.17.12 linux/amd64
2.获取cAdvisor源代码
wget https://github.com/google/cadvisor/archive/refs/tags/v0.45.0.tar.gz
tar xvf v0.45.0.tar.gz -C /usr/local/
ln -s /usr/local/cadvisor-0.45.0 /usr/local/cadvisor
cd /usr/local/cadvisor/
3.获取软件依赖
go env -w GOPROXY=https://goproxy.cn
go get -d github.com/google/cadvisor
4.安装依赖库
ubuntu系统
apt -y install gcc make libpfm4 libpfm4-dev jq
centos系统
yum -y install gcc make
5.编译安装
make build
6.运行
以后台方式启动
cd _output/
./cadvisor -port=8080 &>>/var/log/cadvisor.log &
浏览器访问 主机地址:监听端口,可以查看cadvisor的默认ui页面的浏览器效果
PS:-port是指定监听的端口
以service方式启动
vim /usr/lib/systemd/system/cadvisor.service
[Unit]
Description=cadvisor
Documentation=https://github.com/google/cadvisor/tree/master/docs
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/cadvisor/_output/cadvisor -port 8080
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now cadvisor.service
docker方式运行
注意:hub.docker.com只有旧版的cadvisor,如果获取cadvisor的最新版的docker镜像,要访问google自己的仓库(gcr.io/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 \
google/cadvisor:latest
新版本运行方法
如果机器可以访问gcr.io,直接运行
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.io/cadvisor/cadvisor:v0.44.0
如果机器不能访问gcr.io,可以在能访问的机器上面将镜像下载下来打包,然后再导入。类似下面这样
docker pull gcr.io/cadvisor/cadvisor:v0.44.0
docker load -i cadvisor-v0.44.0.tar.gz