Mark Ku's Blog

前言

在先前的文章中,我們展示了如何使用 Prometheus 來監控 Nginx 的效能,隨著容器化技術的普及,監控 Docker 容器的資源使用情況同樣重要。本篇文章+將介紹如何使用 cAdvisor(Container Advisor)結合 Prometheus 和 Grafana,來全面監控 Docker 容器的 CPU、記憶體、磁碟和網路等資源。

什麼是 cAdvisor?

cAdvisor 是 Google 開發的開源工具,用於即時監控容器的資源使用情況及性能數據。相較於基本的 Docker 命令(如 docker stats),cAdvisor 提供了更詳細的數據及圖型化的界面來查詢,並可與 Prometheus 及 Grafana 無縫整合。

安裝和部署 cAdvisor

首先,我們需要啟動 cAdvisor 容器來收集 Docker 資源數據。

啟動 cAdvisor 容器

使用以下指令啟動 cAdvisor 容器:

docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:rw \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --publish=8884:8080 \
  --detach=true \
  --name=cadvisor \
  google/cadvisor:latest

這將在本地端口 8884 上啟動 cAdvisor。

訪問 cAdvisor

啟動後,打開瀏覽器,訪問 http://localhost:8884 檢查 cAdvisor 的儀表板,如下圖所示:

cAdvisor 儀表板
cAdvisor 儀表板

設定 Prometheus 監控 cAdvisor

接下來,修改 Prometheus 的設定文件,增加對 cAdvisor 的監控任務。

參考之前Prometheus監控 nginx 文章的Github Repo 的設定檔

複製 Prometheus 採集器的的設定檔 prometheus.yaml 修改成 "prometheus-with-cadvisor.yaml",並在設定文件中新增以下內容:

- job_name: "cadvisor"
  static_configs:
    - targets: ["cadvisor:8080"]  # cAdvisor 的服務地址和埠號

複製部署的設定檔 deployment.yaml 修改成 deployment-with-cadvisor.yaml

  cadvisor:
    image: gcr.io/cadvisor/cadvisor:latest
    container_name: cadvisor
    ports:
      - "8884:8080" # cAdvisor 預設埠號
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro    

建立及運行容器

docker-compose -f ./deployment-with-cadvisor.yaml up -d

驗證Prometheus設定

檢查 Prometheus 的採集器 Target 頁面http://localhost:9090/targets,確認 cAdvisor 是否被正常發現並抓取數據:

Prometheus Target
Prometheus Target

使用 Grafana 可視化數據

Grafana 提供了強大的數據可視化功能,以下是如何將 cAdvisor 的數據集成到 Grafana 儀表板中的步驟:

下載 Grafana 模板

Grafana 官方模板下載針對 cAdvisor 儀表板。

匯入 Dashboard 模板

進入 Grafana 儀表板,點擊 "Import",將下載的 JSON 文件上傳至 Grafana。

匯入 Dashboard
匯入 Dashboard

導入完成後,您將看到即時的容器監控數據,包括 CPU、記憶體、磁碟和網路使用情況。

總結

透過 cAdvisor、Prometheus 和 Grafana 的結合,我們可以實現對 Docker 容器資源的全面監控,從而幫助我們更高效地管理和優化容器化應用。

相關連結

作者

Mark Ku

擁有 10+ 年經驗的資深軟體工程師,現為 AI 應用 Builder,專注於大型平台架構與簡化複雜系統設計,從電商系統到訂閱與收費平台,結合 AI Agent、AI 整合與自動化開發,打造高效率且可持續演進的產品技術基礎。閱讀更多

覺得這篇有幫助?

作者做的免費工具、每日 Podcast 與電子報,都在這裡。

Mark Ku · 本文採用 CC BY 4.0 授權,轉載請註明作者並附上原文連結。

留言

訂閱電子報

訂閱後即時收到新文章通知,不錯過任何技術分享。

提交即表示同意接收電子報,隨時可

熱門文章

View all
Mark Ku
··611

Oracle Cloud 永久免費方案 Linux 主機及固定 IP :0 元打造雲端解決方案

Oracle Cloud 永久免費方案 Linux 主機及固定 IP :0 元打造雲端解決方案
Mark Ku
··474

告別 Postman 收費陷阱!開源 Git 原生 API 測試神器 Bruno 實戰指南

告別 Postman 收費陷阱!開源 Git 原生 API 測試神器 Bruno 實戰指南
Mark Ku
··331

一款免費開源類似於 Notion 類知識庫系統 — Outline Wiki 佈署與備份全攻略

一款免費開源類似於 Notion 類知識庫系統 — Outline Wiki 佈署與備份全攻略
Mark Ku
··237

打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1

打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1
Mark Ku
··236

訓練自己的 AI 語音:硬體門檻、開源模型比較與 LoRA 微調

訓練自己的 AI 語音:硬體門檻、開源模型比較與 LoRA 微調
Mark Ku
··212

在 Ubuntu 上設置 Samba 來共享資料夾,讓 Windows 11 用戶可以存取

在 Ubuntu 上設置 Samba 來共享資料夾,讓 Windows 11 用戶可以存取