cAdvisor 可以对节点机器上的资源及容器进行实时监控和性能数据采集,包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况,cAdvisor集成在Kubelet中,当kubelet启动时会自动启动cAdvisor,即一个cAdvisor仅对一台Node机器进行监控。kubelet的启动参数 –cadvisor-port 可以定义cAdvisor对外提供服务的端口,默认为4194。

cAdvisor原生支持 Docker 容器,cAdvisor 容器是基于Google的 Imctfy 开发。cAdvisor 运行一个守护进程用来收集每一个容器的数据,cAdvisor 的数据可以使用一下方式获取:

  • cAdvisor 网页界面,cAdvisor 守护进程会暴露一个有好的UI界面用来展示手机的数据。显示的数据是实时的,可以用来debug
  • Influxdb Influxdb 是一个时序列数据库,cAdvisor 可以将监控的数据存储到 Influxdb 数据库中,以便于未来使用客户端来查询
  • Rest API cAdvisor 会暴露一个 RESTful API,使用该接口可以自己实现逻辑
  • Elasticsearch 在 pre release 的版本中,可以使用 Elasticsearch 来存储数据

更多的内容可以访问项目主页:http://github.com/google/cadvisor

使用方法

cAdvisor 有两种方法来运行,一种是以二进制可执行文件,另一种是以 Docker 容器运行。

Docker 容器运行

这里先介绍使用 Docker 容器运行的方法,使用docker容器运行cadvisor的方法如下:

docker run \
    --volume=/:/rootfs:ro \
    --volume=/var/run:/var/run:rw \
    --volume=/sys:/sys:ro \
    --volume=/var/lib/docker/:/var/lib/docker:ro \
    --publish=8080:8080 \
    --detach=true \
    --name=cadvisor \
    google/cadvisor:latest

运行之后,便可通过http://IP:8080来访问web界面。可以看到CPU的使用率、内存使用率、网络吞吐量以及磁盘空间利用率,点击界面顶部 docker 可以进入查看某个docker容器的详细信息。

注意,在 Ret Hat, CentOS, Fedora 等发行版上需要传递如下参数,因为 SELinux 加强了安全策略:

--privileged=true

设置为true之后,容器内的root才拥有真正的root权限,可以看到host上的设备,并且可以执行mount;否者容器内的root只是外部的一个普通用户权限。由于cadvisor需要通过socket访问docker守护进程,在CentOs和RHEL系统中需要这个这个选项。

--volume=/cgroup:/cgroup:ro 

对于CentOS和RHEL系统的某些版本(比如CentOS6),cgroup的层级挂在/cgroup目录,所以运行cadvisor时需要额外添加–volume=/cgroup:/cgroup:ro选项。

二进制运行

cAdvisor 项目在他的 release 页面发布了可执行的二进制,这些文件可以直接下载并执行

wget https://github.com/google/cadvisor/releases/download/v0.26.1/cadvisor
chmod 755 cadvisor
./cadvisor

默认情况下 cAdvisor 的网页端口为 8080,直接访问本地 http://localhost:8080 即可。

REST API

cadvisor还提供远程调用的REST API,详情可以参考如下文档:https://github.com/google/cadvisor/blob/master/docs/api.md

另外,github上还有提供了一个用Go语言实现的调用REST API的客户端:https://github.com/google/cadvisor/tree/master/client

reference