cAdvisor 是一个开源的容器资源使用情况和效能分析工具,主要由 Google 开发。它专门用于收集、聚合、处理和汇出有关执行中容器的资讯。
Node-Exporter 收集主机层级的各种指标,包括:CPU 使用率、记忆体使用情况、磁碟 I/O 统计、网路流量、档案系统使用率、系统负载
- Node Exporter:关注整个主机/节点层级的指标
 - cAdvisor:专注于容器层级的指标
 
再搭配上 Prometheus 收集指标,用 Grafana 呈现资讯
出自 https://blog.techbridge.cc/2019/08/26/how-to-use-prometheus-grafana-in-flask-app/
开发环境
- Windows 11 Home
 - WSL2
 - Untuntu 24.04.01
 
设定
docker-compose.yml 配置如下:
version: "3"
networks:
  prometheus:
    driver: bridge
services:
  node-exporter:
    image: prom/node-exporter:v1.9.0
    container_name: node-exporter
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.sysfs=/host/sys'
      - --collector.filesystem.ignored-mount-points
      - "^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/)"
    ports:
      - "9100:9100"
    networks:
      - prometheus
  
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:v0.49.1
    container_name: cadvisor
    #network_mode: "host"
    ports:
      - "8080:8080"
    volumes:
      - /:/rootfs
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
      - /dev/disk/:/dev/disk
    privileged: true
    devices:
      - "/dev/kmsg"
    networks:
      - prometheus
  
  prometheus:
    image: prom/prometheus:v3.1.0
    container_name: prometheus
    #network_mode: "host"
    ports:
      - "9090:9090"
    volumes:
      - ./config/prometheus:/etc/prometheus
    networks:
      - prometheus
  
  grafana:
    image: grafana/grafana:11.4.0
    container_name: grafana
    #network_mode: "host"
    volumes:
      - ./data/grafana:/var/lib/grafana
      - ./config/grafana/provisioning:/etc/grafana/provisioning  # 添加 provisioning 映射
    environment:
      - GF_PATHS_PROVISIONING=/etc/grafana/provisioning
      - GF_AUTH_ANONYMOUS_ENABLED=true
      - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
    ports:
      - "3000:3000"
    depends_on:
      - loki
      - prometheus
    networks:
      - prometheus 
./config/grafana/provisioningdashboards
里面有两个 Dashboard
Docker Containers
https://github.com/yaochangyu/sample.dotblog/blob/master/Prometheus/Docker%20Monitor/config/grafana/provisioning/dashboards/Docker%20Containers.json
Docker Host
https://github.com/yaochangyu/sample.dotblog/blob/master/Prometheus/Docker%20Monitor/config/grafana/provisioning/dashboards/Docker%20Host.json
./config/grafana/provisioning/datasources/datasources.yml
datasources:
  - name: prometheus
    type: prometheus
    url: http://prometheus:9090  # 修改为容器名称
    access: proxy
    isDefault: true
./config/prometheus.yml
每 15 秒收集一次资讯
global:
  scrape_interval: 15s #Scrape interval to every 15 seconds.
  evaluation_interval: 15s #Evaluate rules every 15 seconds.
  
scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["prometheus:9090"]
  - job_name: 'node-exporter'
    static_configs:
      - targets: ['node-exporter:9100']
  - job_name: "cadvisor"
    static_configs:
      - targets: ["cadvisor:8080"]
档案结构,如下图
準备好相关配置之后,就可以部署到测试环境,我将使用 WSL2,可以参考上篇
https://dotblogs.com.tw/yc421206/2025/02/23/installing_docker_on_windows_wsl
把档案放到 WSL 最简单的方式就是在档案总管访问 \\wsl$,以我的电脑为例 Ubuntu-24.04 的路径为 \\wsl.localhost\Ubuntu-24.04,把 docker-compose.yml 複製到 \\wsl.localhost\Ubuntu-24.04 并增加 data 资料夹
修改 data 权限
sudo chown -R 472:472 ./data
sudo chmod -R 755 ./data
接下来把 lab 叫起来,docker compose up
访问 cAdvisor,http://localhost:8080/,可以看到他已经收集到了 container
访问 Node Exporter,http://localhost:9100/
访问 prometheus,http://localhost:9100/
访问 grafana,http://localhost:3000/,查看 dashboard
心得
这是一个蛮简单的 Lab,可以从网路上面找到很多範例,但是卡了我好久,不论我怎么调整配置,cAdvisor 都不会有 container 的数据,最后,我从原本的 Docker Desktop 换成了 WSL + Docker,数据就蒐集到了。
範例位置
https://github.com/yaochangyu/sample.dotblog/tree/master/Prometheus/Docker%20Monitor
若有谬误,烦请告知,新手发帖请多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

	    	微信扫一扫打赏
	    
	    	支付宝扫一扫打赏