使用CADVISOR监控DOCKER容器的指标


cAdvisor(容器顾问的简称)分析并公开运行容器的资源使用和性能数据。 cAdvisor开箱即用暴露Prometheus指标。 在本指南中,我们将:

  • 创建一个本地多容器Docker Compose安装,其中包括分别运行Prometheus,cAdvisor和Redis服务器的容器
  • 检查由Redis容器生成的一些容器指标,由cAdvisor收集并由Prometheus抓取

Prometheus配置

首先,您需要配置Prometheus以从cAdvisor中获取指标。 创建一个prometheus.yml文件并使用以下配置填充它:

  1. scrape_configs:
  2. - job_name: cadvisor
  3. scrape_interval: 5s
  4. static_configs:
  5. - targets:
  6. - cadvisor:8080

Docker Compose配置

现在我们需要创建一个Docker Compose配置,指定哪些容器是我们安装的一部分,以及每个容器暴露的端口,使用哪些卷等等。

在您创建prometheus.yml文件的同一文件夹中,创建一个docker-compose.yml文件并使用此Docker Compose配置填充它:

  1. version: '3.2'
  2. services:
  3. prometheus:
  4. image: prom/prometheus:latest
  5. container_name: prometheus
  6. ports:
  7. - 9090:9090
  8. command:
  9. - --config.file=/etc/prometheus/prometheus.yml
  10. volumes:
  11. - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
  12. depends_on:
  13. - cadvisor
  14. cadvisor:
  15. image: google/cadvisor:latest
  16. container_name: cadvisor
  17. ports:
  18. - 8080:8080
  19. volumes:
  20. - /:/rootfs:ro
  21. - /var/run:/var/run:rw
  22. - /sys:/sys:ro
  23. - /var/lib/docker/:/var/lib/docker:ro
  24. depends_on:
  25. - redis
  26. redis:
  27. image: redis:latest
  28. container_name: redis
  29. ports:
  30. - 6379:6379

此配置指示Docker Compose运行三个服务,每个服务对应一个Docker容器:

  1. prometheus服务使用本地prometheus.yml配置文件(由volumes参数导入容器)。
  2. cadvisor服务公开端口8080(cAdvisor度量标准的默认端口)并依赖于各种本地卷(//var/run等)。
  3. redis服务是标准的Redis服务器。 cAdvisor将自动从该容器收集容器指标,即无需进一步配置。

要运行安装:

  1. docker-compose up

如果Docker Compose成功启动所有三个容器,您应该看到如下输出:

  1. prometheus | level=info ts=2018-07-12T22:02:40.5195272Z caller=main.go:500 msg="Server is ready to receive web requests."

您可以使用ps命令验证所有三个容器是否都在运行:

  1. docker-compose ps

您的输出将如下所示:

  1. Name Command State Ports
  2. ----------------------------------------------------------------------------
  3. cadvisor /usr/bin/cadvisor -logtostderr Up 8080/tcp
  4. prometheus /bin/prometheus --config.f ... Up 0.0.0.0:9090->9090/tcp
  5. redis docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp

探索cAdvisor Web UI

您可以访问位于http://localhost:8080的cAdvisor Web UI。 您可以在我们的安装位置http://localhost:8080/docker/<container>中浏览特定Docker容器的统计信息和图形。 例如,可以在http://localhost:8080/docker/redis,Prometheus在http://localhost:8080/docker/prometheus上访问Redis容器的度量标准,依此类推。

在表达式浏览器中探索指标

cAdvisor的Web UI是一个有用的界面,用于探索cAdvisor监控的各种事物,但它没有提供用于探索容器度量的界面。 为此,我们需要Prometheus表达式浏览器,它可以在http://localhost:9090/graph中找到。 您可以在表达式栏中输入Prometheus表达式,如下所示:

prometheus-expression-bar

让我们首先探索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容器中抓取指标,该容器反过来收集由Redis容器生成的指标。 然后,我们使用Prometheus表达式浏览器探索了一些cAdvisor容器指标。