跳轉至

Node Exporter

概述

Node Exporter 係 Prometheus 生態系統入面最核心嘅元件之一,主要負責收集主機層面嘅硬件同操作系統指標,並以 HTTP 端點嘅形式暴露俾 Prometheus Server 進行抓取。佢由 Prometheus 官方團隊維護,以 Go 語言編寫,執行時無需外部依賴,支援 Linux、Windows、macOS 等多個平台。

Node Exporter 收集嘅指標包括 CPU 使用率、記憶體用量、磁碟 I/O、網絡流量、檔案系統剩餘空間、負載平均值、運作時間,以至每個核心嘅細緻統計數據。呢啲數據透過 /metrics 端點以純文字格式輸出,遵循 Prometheus 嘅 exposition format,方便下游系統直接消費。

架構

Node Exporter 本質上係一個單一進程嘅 HTTP 服務,預設監聽 TCP 端口 9100。佢內部採用 Collector(收集器)模式,每個 Collector 負責特定範疇嘅指標。例如:

  • node_cpu_seconds_total:CPU 各狀態累計時間。
  • node_memory_MemTotal_bytes:實體記憶體總量。
  • node_filesystem_avail_bytes:檔案系統可用空間。
  • node_network_receive_bytes_total:網絡介面接收位元組。

執行時可以用 --collector. 前綴開關啟用或停用特定收集器,例如 --collector.systemd 監控 systemd 服務狀態,或 --collector.textfile 讀取自訂文字檔案以產生業務相關指標。呢個設計令 Node Exporter 保持輕量,同時容許靈活擴充。

Node Exporter 本身唔做數據儲存或告警,佢只負責「暴露」指標。Prometheus Server 透過 /api/v1/targets 進行定期抓取(scrape),將數據存入 TSDB,再配合 Grafana 等可視化工具呈現。

部署

喺本機環境中,Node Exporter 使用 Docker 容器方式執行,鏡像為 prom/node-exporter:v1.12.1。由於 compose 檔案未能直接還原,實際運行參數可以透過 docker container inspect 確認。典型部署指令如下:

docker run -d \
  --name node-exporter \
  --restart unless-stopped \
  --net=host \
  --pid=host \
  --volume "/proc:/host/proc:ro" \
  --volume "/sys:/host/sys:ro" \
  --volume "/:/rootfs:ro" \
  prom/node-exporter:v1.12.1 \
  --path.procfs=/host/proc \
  --path.sysfs=/host/sys \
  --path.rootfs=/rootfs \
  --collector.systemd \
  --collector.textfile.directory=/etc/node-exporter

使用 --net=host 原因係要直接讀取主機網絡介面數據,並令 Prometheus 可以透過主機 IP 訪問 9100 端口。--pid=host 則允許收集各進程嘅 CPU 同記憶體資訊。假如本機有特定網絡配置(例如 cf_network 相關介面),需要確保防火牆允許 Prometheus Server 所在機器連接到 9100

配置

Node Exporter 支援多種命令行參數同環境變數。常用配置包括:

  • --web.listen-address:更改監聽地址,預設 :9100
  • --web.telemetry-path:更改指標路徑,預設 /metrics
  • --collector.disable-defaults:停用所有預設收集器,再按需啟用。
  • --collector.filesystem.ignored-mount-points:忽略特定掛載點,避免過度收集。
  • --collector.netclass.ignored-devices:忽略特定網絡裝置,例如 cf_network*

如果部署喺 Kubernetes,可以透過 Prometheus Operator 定義 ServiceMonitor 去自動發現並抓取指標。對於本機單體環境,最簡單做法係修改 Prometheus 設定檔 prometheus.yml

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['127.0.0.1:9100']

記得設定 honor_labels: true 以保留 Node Exporter 提供嘅標籤,並考慮以 relabel_configs 加入機房或環境標籤。

維運與監控

日常維運需要留意以下幾點:

  1. 確保 Node Exporter 進程處於運行狀態,可以設定 systemd service 或 Docker restart policy。
  2. 監察 /metrics 端點嘅回應時間同 HTTP 狀態碼,若 5xx 或逾時則代表收集異常。
  3. 透過 Grafana 建立儀表板,常見模板編號為 1860(Node Exporter Full)。
  4. 設定告警規則,例如 node_up == 0node_filesystem_avail_bytes / node_filesystem_size_bytes * 100 < 10 等。

本機網絡方面,如果 Prometheus Server 位於其他主機,需要確保 TCP 9100 端口有恰當嘅 ACL。若透過 Cloudflare Tunnel 暴露服務,應避免將 /metrics 直接公開到互聯網,因為入面包含主機名稱、內核版本等敏感資訊。可以使用如 [cloudflare-tunnel](<./cloudflare-tunnel.md>) 搭配 Access 保護,或將抓取動作限制於內網。

常見問題

Q: 點解摸不到 /metrics
先檢查節點是否啟動:curl http://127.0.0.1:9100/metrics。若成功但外網唔通,檢查防火牆同網絡命名空間。喺 Docker 使用 --net=host 時,一定要確認容器同主機共享網絡。

Q: 指標入面出現大量 go_process_ 前綴?
呢啲係 Node Exporter 自身運行時嘅 Go runtime 指標,屬於正常現象。可以用 --web.disable-exporter-metrics 參數過濾。

Q: 點解磁碟用量同 df 顯示唔一致?
Node Exporter 讀取 /proc/sys 檔案系統,忽略部分掛載點(如 tmpfs)可能導致差異。請檢查 --collector.filesystem.ignored-mount-points 設定。

Q: 記憶體指標中 availablefree 有咩分別?
node_memory_MemAvailable_bytes 反映可用記憶體,包含可回收嘅 page cache;而 node_memory_MemFree_bytes 只係完全空閒嘅記憶體。一般監控應使用 available

相關鏈接

  • docker — Node Exporter 以容器形式運行嘅底層技術。
  • prometheus — 消費者端,負責抓取同儲存指標。
  • grafana — 可視化 Node Exporter 數據嘅儀表板平台。
  • litellm — 若喺同一主機部署 LLM Gateway,可透過 Node Exporter 監控資源瓶頸。
  • cloudflare-tunnel — 用於安全暴露內部服務,但需避免公開敏感指標端點。

來源

自動生成(2026-08-19 容器覆蓋率補完第二批)