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