iT邦幫忙

2025 iThome 鐵人賽

DAY 25
0

前言

欸,各位工程師,你有沒有半夜三點,被 PagerDuty 或 Slack 叫醒的經驗?你眼睛還半閉著,腦袋裡只想著「拜託,別是我弄壞了吧」,結果一看 log:「🔥 Database exploded again」——欸,不是我炸的,這次應該是主機自己崩潰了吧…

好啦,話說回來,你以為只要 API 回應正常就沒事嗎?錯啦!CPU 飆到 100%,記憶體吃光光,磁碟滿到爆炸,網路像蜗牛一樣慢,你的服務一樣會慢到讓人想跳窗戶。這時候 Node Exporter 就像你的夜班保全,默默告訴你:「欸,你主機快撐不住了啦」。


1️⃣ Node Exporter 核心概念

1.1 Node Exporter 是什麼

Node Exporter 是 Prometheus 官方提供的 Exporter,專門收集 Linux/Unix 系統層面的資源 metrics。你可以把它想像成宿主機的「內心獨白」,它默默告訴你 CPU 怎麼用、記憶體剩多少、磁碟還有空間沒、網路流量飆不飆。

啊對了,這就像你室友半夜偷偷吃你的零食一樣,它不吵你,只是默默把狀況記下來。

1.2 支援的資源指標

類別 常用 metrics 說明
CPU node_cpu_seconds_total CPU 使用率(user/system/idle)
Memory node_memory_MemAvailable_bytes 可用記憶體
Disk node_disk_io_time_seconds_total, node_filesystem_avail_bytes 磁碟 IO 與剩餘空間
Network node_network_receive_bytes_total 網路流量
System node_boot_time_seconds 系統開機時間
Load node_load1, node_load5, node_load15 系統負載

指標細緻到讓你懷疑人生:CPU 在跑什麼?Memory 在做啥?好啦,放心,它會幫你算出來。


2️⃣ Docker Compose 配置示範 — 主機監控不求人

services:
  node-exporter:
    image: prom/node-exporter:v1.8.2
    ports:
      - "127.0.0.1:9100:9100"
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    networks:
      - monitor-net

2.1 配置解析

  • ports:將容器的 9100 端口映射到本機,用於 Prometheus scrape

  • volumes

    • /proc/sys/ 掛載宿主機系統資訊,Node Exporter 才能看清楚你的系統心臟。
  • networks:跟 Prometheus 在同一網路,否則 scrape 不到就像暗戀的人不回訊息一樣。

這種方式好比你偷偷看室友的手機訊息,但不干擾他正常生活。


3️⃣ Prometheus Scrape 設定 — 當你的 metrics 被收集

scrape_configs:
  - job_name: 'app_metrics'
    static_configs:
      - targets:
          - 'node-exporter:9100'
  • node-exporter:9100 就是 Prometheus scrape Node Exporter metrics 的 endpoint
  • 這樣一來,CPU、Memory、磁碟、網路等指標都會被 Prometheus 收集,方便後續告警或 Grafana 可視化。

4️⃣ Node Exporter 常見監控場景 — 看 CPU、Memory 像刷社群一樣上癮

4.1 CPU 與 Load 監控

  • node_cpu_seconds_total 觀察 CPU 各狀態使用比例
  • node_load1, node_load5, node_load15 監控系統負載
  • 適用於:
    • 發現 CPU 飆高的服務
    • 分析高負載導致的延遲或 request timeout

4.2 Memory 與 Swap 監控

  • node_memory_MemAvailable_bytes → 可用記憶體

  • node_memory_SwapFree_bytes → 剩餘 swap 空間

  • 適用於:

    • 觀察是否有記憶體洩漏
    • 避免服務因內存耗盡崩潰

4.3 Disk 與 I/O 監控

  • node_disk_io_time_seconds_total → 磁碟 I/O 使用

  • node_filesystem_avail_bytes → 剩餘空間

  • 適用於:

    • 避免磁碟滿造成 log 無法寫入
    • 分析磁碟瓶頸對 API 響應的影響

4.4 Network 監控

  • node_network_receive_bytes_total / node_network_transmit_bytes_total

  • 適用於:

    • 檢查網路流量異常
    • 發現頻寬不足或網路延遲問題

5️⃣ 專案實戰案例

假設你的 API 服務部署在多台 host 上:

  1. 每台 host 啟動 Node Exporter
  2. Prometheus scrape 所有 Node Exporter
  3. Grafana 統一顯示 CPU、Memory、Disk、Network 狀態
  4. 配合 Blackbox Exporter 監控 API 可用性
  5. 當 CPU 或 Memory 過高,Alertmanager 立即告警

這樣你就可以在半夜放心睡覺,至少知道系統狀況有人盯著…雖然有人盯著不等於有人幫你修。


常見坑 — 哈哈哈別笑,你一定踩過

  • 端口沒映射 → Prometheus 抓不到 metrics
  • volumes 不夠 → Node Exporter 收不到 system 資訊
  • CPU load 與使用率搞混 → load 只是 queue 長短,不是 CPU 真實使用
  • 忽略 swap → 內存不夠還會默默死掉

每個坑都像人生小劇場,踩下去就哭一下。

結語

Node Exporter 是 主機資源監控的基礎利器,尤其適合微服務、API 或容器化部署環境。搭配 Prometheus scrape 與 Grafana 可視化,能夠建立完整的系統健康監控,避免因底層資源耗盡導致服務中斷。


上一篇
Day24|應用端的心跳魔法 🪄:FastAPI 監控實戰
下一篇
Day 26 | 容器怪獸現形!cAdvisor 幫你抓出資源怪
系列文
論文流浪記:我與AI 探索工具、組合流程、挑戰完整平台32
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言