通过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页面的浏览器效果

image

image

image

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

image

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

image

如果机器不能访问gcr.io,可以在能访问的机器上面将镜像下载下来打包,然后再导入。类似下面这样

docker pull gcr.io/cadvisor/cadvisor:v0.44.0
docker load -i cadvisor-v0.44.0.tar.gz
posted @ 2022-10-15 10:43  wangxupeng  阅读(510)  评论(0编辑  收藏  举报