cAdvisor(全称 container Advisor,容器顾问)分析并暴露运行中容器的资源使用情况和性能数据。cAdvisor 原生支持暴露 Prometheus 指标。在本指南中,我们将:
首先,您需要配置 Prometheus 从 cAdvisor 抓取指标。创建一个 prometheus.yml
文件,并填充以下配置:
scrape_configs:
- job_name: cadvisor
scrape_interval: 5s
static_configs:
- targets:
- cadvisor:8080
现在我们需要创建一个 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
您可以在 http://localhost:8080
访问 cAdvisor Web UI。您可以在 http://localhost:8080/docker/<container>
探索我们环境中特定 Docker 容器的统计信息和图表。例如,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
容器的启动时间。
下表列出了一些其他示例表达式:
表达式 | 描述 | 针对 |
---|---|---|
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 容器指标。
本文档是开源的。请通过提交 issues 或 pull requests 来帮助改进它。