CAdvisor是Google开源的一款用于展示和分析容器运行状态的可视化工具。通过在主机上运行CAdvisor用户可以轻松的获取到当前主机上容器的运行统计信息,并以图表的形式向用户展示。
命令行监控Docker容器-docker stats
访问地址
http://localhost:8080/containers/
1、直接启动容器方式安装
在本地运行CAdvisor也非常简单,直接运行一下命令即可:
# CentOS
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 \
--privileged=true \
google/cadvisor:latest
- 通过访问http://localhost:8080可以查看,当前主机上容器的运行状态,如下所示:
- CAdvisor是一个简单易用的工具,相比于使用Docker命令行工具,用户不用再登录到服务器中即可以可视化图表的形式查看主机上所有容器的运行状态。
- 而在多主机的情况下,在所有节点上运行一个CAdvisor再通过各自的UI查看监控信息显然不太方便,同时CAdvisor默认只保存2分钟的监控数据。
好消息是CAdvisor已经内置了对Prometheus的支持。访问http://localhost:8080/metrics即可获取到标准的Prometheus监控样本输出
2、采用docker-compose方式安装
创建:docker-compose.yml
version: '3'
services:
cadvisor:
image: google/cadvisor:latest
ports:
- "8080:8080"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
restart: always
运行
# 开启
docker-compose up -d
# 关闭
docker-compose down
3、优势:
- 轻量级和简单:
- cAdvisor 设计精巧,轻量级,易于部署和使用。
- 它专注于提供有关容器性能的基本信息,使其成为监控容器的入门工具。
- 集成容器环境:
- cAdvisor 针对容器环境进行了优化,可以无缝集成到 Docker 和 Kubernetes 等容器管理平台中。
- 它能够获取有关每个运行中容器的 CPU 使用、内存使用、网络统计等信息。
- 支持多种容器运行时:
- cAdvisor 不仅适用于 Docker,还支持其他容器运行时,如 containerd、CRI-O 等,使其具有更广泛的适用性。
- 实时监控和历史数据:
- cAdvisor 提供实时监控和历史数据记录,允许用户查看容器的性能趋势和历史变化。
- 容器资源隔离分析:
- cAdvisor 提供有关容器资源隔离和使用的信息,有助于分析容器之间的资源竞争和隔离情况。
4、劣势:
- 功能相对简单:
- cAdvisor 的设计目标是提供基本的容器性能监控,因此相对于一些高级监控工具,它的功能可能显得相对简单。
- 不适用于大规模系统:
- 对于大规模和复杂的系统,可能需要更强大和高级的监控解决方案,而 cAdvisor 可能无法提供足够的灵活性和功能。
- 可能需要额外的存储和可视化工具:
- cAdvisor 提供了一些基本的可视化能力,但对于一些复杂的监控场景,可能需要额外的存储和可视化工具来更好地分析和呈现数据。
5、与Prometheus集成
修改/etc/prometheus/prometheus.yml,将cAdvisor添加监控数据采集任务目标当中:
- job_name: cadvisor
static_configs:
- targets:
- localhost:8080
启动Prometheus服务:
prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/data/prometheus
启动完成后,可以在Prometheus UI中查看到当前所有的Target状态:
通过:http://localhost:3000/graph,查看更详细的监控数据:
几个常见的采集参数:
- 表达式计算容器的CPU使用率:
sum(irate(container_cpu_usage_seconds_total{image!=“”}[1m])) without (cpu) - 查询容器内存使用量(单位:字节):
container_memory_usage_bytes{image!=“”} - 查询容器网络接收量速率(单位:字节/秒):
sum(rate(container_network_receive_bytes_total{image!=“”}[1m])) without (interface) - 查询容器网络传输量速率(单位:字节/秒):
sum(rate(container_network_transmit_bytes_total{image!=“”}[1m])) without (interface) - 查询容器文件系统读取速率(单位:字节/秒):
sum(rate(container_fs_reads_bytes_total{image!=“”}[1m])) without (device) - 查询容器文件系统写入速率(单位:字节/秒):
sum(rate(container_fs_writes_bytes_total{image!=“”}[1m])) without (device)
参考地址:
- github cadvisor
- cadvisor running docs
- 容器监控:cAdvisor