首頁

目前文章總數:190 篇

  

最後更新:2025年 07月 26日

0009. 使用 Google cAdvisor 監控 Docker 容器資源:輕量級監控工具搭建與教學

日期:2025年 08月 30日

標籤: Docker Docker-Compose Container Ubuntu Linux cAdvisor

摘要:Docker


解決問題:Docker Container 的資源要如何監控,可透過 Google 開源的輕量化監控工具 cAdvisor 來監控,並介紹如何搭建、使用。
相關參考:0014. Ubuntu 上 Docker 容器化搭建監控平台:Grafana + Prometheus + Node Exporter 監控 CPU & 記憶體
基本介紹:本篇分為 4 部分。
第一部分:cAdvisor 介紹 & 目的
第二部分:部署方式
第三部分:DEMO 驗證成果
第四部分:遺留問題 - 未來解決方案






第一部分:cAdvisor 介紹 & 目的

Step 1:介紹 cAdvisor

cAdvisor 全名意為 Container Advisor (容器顧問),屬於 Google 的Github開源,以下是來源於官方 Github 上的介紹:

cAdvisor (Container Advisor) provides container users an understanding of the resource usage and performance characteristics of their running containers. It is a running daemon that collects, aggregates, processes, and exports information about running containers. Specifically, for each container it keeps resource isolation parameters, historical resource usage, histograms of complete historical resource usage and network statistics. This data is exported by container and machine-wide.


簡要的說:專門用來收集容器的資訊,也記錄了每個容器的參數,100% 支援原生的 Docker 的 Container
標誌性的 Log 為貓頭鷹,並且當前版本雖然為 0.53 (通常認知 1.0 才為正式版),但實際上已屬於穩定版本,版本號屬於開源者自定義。


Step 2:緒論:cAdvisor - 適合場景

如果需要監控 Docker 容器,並且 收集、處理和輸出運行中容器的性能指標,加上快速搭建、占用最小資源、Web UI 可控介面,那麼使用 cAdvisor 就很合適了

項目 適合使用 cAdvisor 的情境 不適合使用 cAdvisor 的情境
使用環境 單機 Docker / 開發機 Kubernetes 多節點集群
部署複雜度 非常簡單,docker run 即可使用 需額外整合 Prometheus / Grafana,才有實用性
監控範圍 單機容器的資源(CPU、記憶體、網路) 跨節點、跨應用的綜合性指標(Pod、Deployment 狀態等)
指標類型 容器層級資源使用(即時) Pod、K8s 資源狀態、自訂應用指標
Web UI 簡單即時畫面,適合快速查看 無歷史資料、無儀表板、無深度分析
整合能力 可作為 Prometheus 資料來源 不提供事件、告警、自訂監控規則等功能
使用目的 容器性能觀察 正式監控、大規模集群、企業級可觀察性平台
告警支援 無內建告警 需搭配 Alertmanager 或其他系統
架構彈性 輕量級、單容器即可 功能單一、擴充性低
成本考量 完全免費、可商業使用,並且由 Google 維護 資金充足,可使用雲端託管方案,對 SLA、維運穩定性有高需求


簡言之: cAdvisor 是針對單一機器,多機器架構下,無法全部監控。

Step 3:cAdvisor - 優點、缺點

依照適合場景可以延伸出 cAdvisor 的優點:

優點 說明
輕量級 部署方便,佔用資源低,特別適合在每台節點上運行
即時監控 能即時顯示容器的 CPU、記憶體、網路、磁碟等資源使用情況
自動偵測容器 不需手動設定,會自動偵測所有在該節點上運行的容器
Web UI 內建簡易的 Web UI 網頁介面,查看容器性能資料
Prometheus 整合 支援以 Prometheus 格式輸出指標,方便進一步整合 Grafana 等工具
開源且由 Google 維護 穩定、可靠,社群活躍,文件豐富



相對的,因為輕量化的關係,直接使用會有以下的缺點:

缺點 說明
無法跨主機監控 它只能監控本機上的容器,無內建集中管理與整合功能(需配合 Prometheus 等工具實作)
資料保存能力有限 預設只儲存短期資料,無長期儲存功能,需要搭配外部系統(如 Prometheus、InfluxDB)
無自訂告警機制 本身不提供告警功能,需搭配其他系統使用
對非 Docker 容器支持較弱 雖支援 cgroups,但主力仍在 Docker,對 newer runtimes(如 containerd、CRI-O)支援有限或需調整
Web UI 功能有限 僅提供簡易即時監控畫面,無法滿足進階需求,如視覺化儀表板、歷史趨勢分析等


純粹用 cAdvisor 已具備監控容器的資源狀況,但如果需要長期資料、告警、趨勢分析等,仍需要搭配其他工具組合來呈現,例如: Prometheus + Grafana 的方式

Step 4:cAdvisor 完全開源、免費

cAdvisor 屬於開源軟體,並且可以用於商業用途,可以放心使用

項目 說明
價格 完全免費(Open Source)
授權條款 Apache License 2.0
商業用途 可以免費用於個人、企業、商業專案
Github 原始碼庫 https://github.com/google/cadvisor(由 Google 維護)






第二部分:部署方式

Step 1:準備 docker-compose.yml

以下是 docker-compose.yml 檔案,從官方的 gcr.io/cadvisor/cadvisor:latest 下載最新的 image
並且我們的 WebUI 使用的是 6060 Port號

version: '3.8'

services:
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:latest
    container_name: cadvisor
    ports:
      - "6060:8080"
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:ro
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
      - /dev/disk/:/dev/disk:ro
    privileged: true
    devices:
      - /dev/kmsg
    command:
      - '--housekeeping_interval=10s'
      - '--storage_duration=60m'
      - '--docker_only=true'


其中 command 是屬於指定的參數,更多的參數可以參考 cAdvisor Github

housekeeping_interval 收集系統和容器資源使用情況的頻率,預設 60 秒,設為 10 秒,是為了 Demo 時更好觀察變化
storage_duration cAdvisor 在內存中保留歷史數據的時間長度,表示保留 60m 表示保留 1 小時資料
docker_only 限制 cAdvisor 只監控 Docker 容器 ,預設會看其他非 Docker 的容器



Step 2:複製檔案到 Ubuntu 主機

將 Step1. 的 docker-compose.yml 複製到遠端的機器上


Step 3:進行安裝

到對應目錄,並且輸入以下 Shell 指令

docker-compose up -d




Step 4:安裝完成 - 確認是否運行

可以輸入以下指令檢查容器是否運行

docker ps -a


或者是有安裝 Portainer 之類的容器管理工具,可以檢查




第三部分:DEMO 驗證成果

Step 1:登入 Web UI

接著可以依照安裝位置進行訪問,其中 192.168.51.93 是我的內部域名主機

http://192.168.51.93:6060




Step 2:檢視 CPU - 總覽

往下檢視 Web,可以觀察到 CPU 的總覽資訊與所有相關的 Process


Step 3:檢視 CPU - 圖表

並且也提供視覺化的檢視


Step 4:檢視 Container - 進入

cAdvisor 最重要的是檢視 Container (容器) 的 CPU / Memory 的使用狀況,因此:
回到最上方 -> 選擇 Containers ->


Step 5:檢視 Container - 選擇某一項

進入後會有 Container Name 與 Container Hash ID ,選擇其中一項


Step 6:檢視 Container - 圖片呈現

選擇某個容器後 -> 瀏覽頁面 -> 可以看動圖片會動態更新,會依照 –housekeeping_interval 的配置(當前範例為10秒),進行 Duration 的變化。
至此,有了可靠可監控容器的輕量化工具


第四部分:遺留問題 - 未來解決方案

Step 1:遺留問題 - 無歷史保留 & 趨勢分析

單純用 cAdvisor 有個致命的缺點,在生產的維運環境中,不可能單靠 cAdvisor 做監控,因為缺少了歷史紀錄,以下說明:
進入 Ubuntu -> 輸入以下 Shell 指令 -> 重啟 cAdvisor

docker-compose down -v
docker-compose up -d




再回到容器檢視 CPU、Memory 會發現全被清除,這是因為 cAdvisor 只有將資料保存於記憶體中,並且保存時間有限制。
備註:cAdvisor 工具定位原因,基於輕量化的取捨,因此不保留長久資料


Step 2:未來解決方案 - 更完整的監控模式

若要完整收集歷史資料與趨勢分析,還需要 Prometheus + Grafana + cAdvisor 三者的結合
以下是結合時負責的功能:

組件 功能
cAdvisor 在每台節點上收集容器的即時資源指標(CPU、記憶體、磁碟、網路)
Prometheus 以 Pull 模式定時從 cAdvisor 抓取指標,並 持久化保存 時間序列資料
Grafana 與 Prometheus 整合,提供 歷史趨勢圖表、儀表板視覺化



Step 3:補充 - Prometheus + Grafana + cAdvisor 資料流說明

並且以下是各組件更詳細的處理內容:

組件 資料流處理內容
cAdvisor 1. 每台節點部署一個(通常用 Docker 或 DaemonSet)
  2. 提供 /metrics HTTP 端點,輸出 Prometheus 可讀的格式
Prometheus 1. 配置 scrape_configs 抓取每個節點上的 cAdvisor /metrics
  2. 儲存歷史時間序列資料(可自訂保留天數)
  3. 支援 Alertmanager 發出告警(進階選項)
Grafana 1. 透過 Data Source 連接 Prometheus
  2. 使用 cAdvisor 指標建立圖表(可用模板或自訂)