基于cAdvisor和Prometheus进行Docker监控

有时我们希望能够监控 Docker 中每个容器的CPU或内存使用情况,但Docker stats命令太过繁琐。今天我发现了 cAdvisor 这个开源项目,实现了 Docker 的监控与数据导出可视化。这里记录一下如何使用

有时我们希望能够监控Docker中每个容器的CPU或内存使用情况,但使用SSH连接到终端,再执行Docker stats 命令太过繁琐。同时这个命令无法查看历史监控数据,没有可视化展示面板。最好有个图形化的界面能直观展示CPU内存的变化情况。今天我在调研时发现了 cAdvisor这个开源项目。这里记录一下如何使用

# 参考网页

# 通过cAdvisor提供监控数据

cAdvisor 是谷歌开源的一款通用的容器监控解决方案。cAdvisor 不仅可以采集机器上所有运行的容器信息,还提供了基础的查询界面和 HTTP 接口,更方便与外部系统结合。并且 Kubernetes 也集成了 cAdvisor 作为容器监控指标的默认工具。

配置与启动:在需要监控Docker的宿主机上,拉取cAdvisor就可运行监控并暴露到端口供外部查询。可以查询官方github查看如何启动,这里我放一个基于docker-compose启动的例子

例子如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
version: '3'
services:
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:latest
    container_name: cadvisor
    restart: unless-stopped
    ports:
      - "8080:8080"
    privileged: true
    devices:
      - /dev/kmsg
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:ro
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
      - /dev/disk/:/dev/disk:ro

注意

  1. docker 镜像必须为gcr.io/cadvisor/cadvisor,cAdvisor曾经更新过一次镜像地址,导致网上一些老的教程出错
  2. cAdvisor占用了一个很常见的端口8080,可以根据实际情况将其挂载为别的端口防止冲突
  • 访问:http://ip地址:8080查看cAdvisor的web页面
  • 访问:http://ip地址:8080/containers/ 查看主机监控
  • 访问:http://ip地址:8080/docker/ 查看容器监控

# 使用Prometheus进行数据采集

Prometheus的配置教程网上有很多,这里不再赘述。简单记录一下如何使用Prometheus采集cAdvisor的数据

在Prometheus的配置yml中加入如下job内容。将ip address替换为你的cAdvisor地址

1
2
3
4
5
  - job_name: 'cadvisor'
    static_configs:
      - targets: ['cAdvisor ip address:8080']
        labels:
               lable: "docker"

查看Prometheus ip地址:9090/targets 确保 Prometheus成功开始监控cAdvisor提供的数据

# 使用Grafana展示数据

Grafana的配置教程网上也有很多,这里不再赘述。这里简单记录一下如何快速配置Grafana展示Docker中的数据

  1. Grafana的data sources中添加 Prometheus
  2. 在Grafana的Dashboard中选择import Dashboard
  3. 引入 id = 11600的面板,来源于:https://grafana.com/grafana/dashboards/11600-docker-container/
  4. 可以看到Grafana中已经可以正确展示Docker中的数据
使用 Hugo 构建
主题 StackJimmy 设计