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 加入機房或環境標籤。
維運與監控¶
日常維運需要留意以下幾點:
- 確保 Node Exporter 進程處於運行狀態,可以設定 systemd service 或 Docker restart policy。
- 監察
/metrics端點嘅回應時間同 HTTP 狀態碼,若 5xx 或逾時則代表收集異常。 - 透過 Grafana 建立儀表板,常見模板編號為
1860(Node Exporter Full)。 - 設定告警規則,例如
node_up == 0、node_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: 記憶體指標中 available 同 free 有咩分別?
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 容器覆蓋率補完第二批)