使用 cAdvisor 监控 Docker 容器指标
cAdvisor(简称 container Advisor)计算并暴露运行中容器的资源使用和性能数据。cAdvisor 开箱即支持 Prometheus 指标。本指南将指导你完成以下操作:
- 创建本地多容器 Docker Compose 部署,包括 Prometheus、cAdvisor 和 Redis 服务器容器。
- 查看由 Redis 容器生成的容器指标。这些指标由 cAdvisor 收集,并被 Prometheus 抓取。
Prometheus 配置
首先,你需要配置 Prometheus 来抓取 cAdvisor 的指标。你可以创建一个 prometheus.yml
文件,并写入以下配置:
Docker Compose 配置
接下来,我们需要在相同的文件夹中创建一个docker-compose.yml
文件,并填充以下 Docker Compose 配置:
此配置指示 Docker Compose 运行三个服务,每个服务对应一个 Docker 容器:
prometheus
服务使用本地的prometheus.yml
配置文件(通过volumes
参数导入到容器内)。cadvisor
服务暴露端口 8080(cAdvisor 默认端口),并依赖一系列本地卷(/
、/var/run
等)。redis
服务是一个标准的 Redis 服务器。cAdvisor 将自动从此容器收集容器指标,无需进一步配置。
输入以下命令开始部署:
如果 Docker Compose 成功启动所有的三个容器,你应该看到类似以下的输出:
你可以使用ps
命令验证所有三个容器是否正在运行:
你的输出可能会看起来像这样:
探索 cAdvisor Web UI
你可以通过http://localhost:8080
访问 cAdvisor 的 Web UI。你还可以探索特定 Docker 容器的统计信息和图表,详细链接为http://localhost:8080/docker/<container>
。例如,Redis 容器的指标可以通过http://localhost:8080/docker/redis
访问,Prometheus 的指标可以通过 http://localhost:8080/docker/prometheus
访问。
在表达式浏览器中探索指标
cAdvisor 的 Web UI 是一个探索 cAdvisor 监控内容的十分有用的界面,然而,它本身并不提供探索容器指标的接口。为此,我们需要使用 Prometheus 的表达式浏览器,默认访问路径为http://localhost:9090/graph
。你可以在表达式栏中输入 Prometheus 表达式,该栏看起来如下所示:
让我们从探索container_start_time_seconds
指标开始,该指标记录了容器的启动时间(以秒为单位)。我们可以通过name="<container_name>"
表达式选择特定容器。容器名称对应于 Docker Compose 配置中的container_name
参数。例如,[container_start_time_seconds{name="redis"}]
表达式显示了redis
容器的启动时间。
注意:如果你需要完整的 cAdvisor 收集并暴露给 Prometheus 的容器指标列表,请参阅 cAdvisor 文档。
其他表达式
下表列出了其他一些示例表达式:
表达式 | 描述 | 适用于 |
---|---|---|
rate(container_cpu_usage_seconds_total{name="redis"}[1m]) | 过去一分钟内 cgroup 的 CPU 使用情况 | redis 容器 |
container_memory_usage_bytes{name="redis"} | cgroup 的总内存使用情况(以字节为单位) | redis 容器 |
rate(container_network_transmit_bytes_total[1m]) | 容器每秒发送的网络字节数(过去一分钟内) | 所有容器 |
rate(container_network_receive_bytes_total[1m]) | 容器每秒接收的网络字节数(过去一分钟内) | 所有容器 |
总结
在这篇指南中,我们使用 Docker Compose 在单个部署中运行了三个独立容器:一个 Prometheus 容器从 cAdvisor 容器抓取指标,后者又通过 Redis 容器生成指标。最后,我们使用 Prometheus 表达式浏览器探索了一些 cAdvisor 容器指标。
该文档基于 Prometheus 官方文档翻译而成。