监视 Docker Container 资源 (cAdvisor + node-exporter + prometheu

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

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章

5 点赞(415) 阅读(67)