使用 cAdvisor 监控 Docker 容器指标
cAdvisor (container Advisor 的缩写)分析并公开正在运行的容器的资源使用情况和性能数据。cAdvisor 开箱即用地公开了 Prometheus 指标。在本指南中,我们将
- 创建一个本地的多容器 Docker Compose 安装,其中包括分别运行 Prometheus、cAdvisor 和一个 Redis 服务器的容器
- 检查一些由 Redis 容器产生、由 cAdvisor 收集并由 Prometheus 抓取的容器指标
Prometheus 配置
首先,你需要配置 Prometheus 从 cAdvisor 抓取指标。创建一个 `prometheus.yml` 文件并用此配置填充它
scrape_configs:
- job_name: cadvisor
scrape_interval: 5s
static_configs:
- targets:
- cadvisor:8080
Docker Compose 配置
现在我们需要创建一个 Docker Compose 配置 ,用于指定哪些容器是我们安装的一部分,以及每个容器暴露的端口、使用的卷等等。
在您创建 `prometheus.yml` 文件的同一个文件夹中,创建一个 `docker-compose.yml` 文件,并用此 Docker Compose 配置填充它
version: '3.2'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- 9090:9090
command:
- --config.file=/etc/prometheus/prometheus.yml
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
depends_on:
- cadvisor
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
container_name: cadvisor
ports:
- 8080:8080
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
depends_on:
- redis
redis:
image: redis:latest
container_name: redis
ports:
- 6379:6379
此配置指示 Docker Compose 运行三个服务,每个服务对应一个 Docker 容器
- `prometheus` 服务使用本地的 `prometheus.yml` 配置文件(通过 `volumes` 参数导入到容器中)。
- `cadvisor` 服务暴露端口 8080(cAdvisor 指标的默认端口),并依赖于各种本地卷(`/`、`/var/run` 等)。
- `redis` 服务是一个标准的 Redis 服务器。cAdvisor 将自动从此容器收集容器指标,即无需任何进一步配置。
要运行该安装
docker-compose up
如果 Docker Compose 成功启动了所有三个容器,您应该会看到类似这样的输出
prometheus | level=info ts=2018-07-12T22:02:40.5195272Z caller=main.go:500 msg="Server is ready to receive web requests."
您可以使用 `ps` 命令验证所有三个容器都在运行
docker-compose ps
您的输出将类似于这样
Name Command State Ports
----------------------------------------------------------------------------
cadvisor /usr/bin/cadvisor -logtostderr Up 8080/tcp
prometheus /bin/prometheus --config.f ... Up 0.0.0.0:9090->9090/tcp
redis docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp
探索 cAdvisor 网页 UI
您可以在 `https://:8080` 访问 cAdvisor 网页 UI 。您可以在 `https://:8080/docker/
在表达式浏览器中探索指标
cAdvisor 的 Web UI 是一个探索 cAdvisor 监控内容的有用界面,但它不提供探索容器_指标_的界面。为此,我们需要 Prometheus 表达式浏览器,它可以在 `https://:9090/graph` 找到。您可以将 Prometheus 表达式输入到表达式栏中,它看起来像这样

让我们从探索 `container_start_time_seconds` 指标开始,它记录了容器的启动时间(以秒为单位)。您可以使用 `name="
注意在 cAdvisor 文档 中可以找到 cAdvisor 收集并暴露给 Prometheus 的容器指标的完整列表。
其他表达式
下表列出了一些其他示例表达式
| 表达式 | 描述 | 对于 |
|---|---|---|
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 容器中抓取指标,而 cAdvisor 容器又从一个 Redis 容器中收集指标。然后,我们使用 Prometheus 表达式浏览器探索了一些 cAdvisor 容器指标。