用 Prometheus 与 Node Exporter 监控 Linux 主机

Node Exporter + Prometheus 监控 Linux 主机的完整搭建:安装配置、采集器裁剪、CPU/内存/磁盘/网络核心指标解读、textfile 自定义指标与 FAQ。

最佳实践
用 Prometheus 与 Node Exporter 监控 Linux 主机技术指南封面

Node Exporter 是 Prometheus 生态监控 Linux 主机的标准组件:一个轻量进程,把内核暴露的 CPU、内存、磁盘、网络等数百项指标翻译成 Prometheus 格式。本文是完整的搭建与使用指南。

第一步:部署 Node Exporter

下载解压即用(生产环境建议做成 systemd 服务):

wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
tar xzf node_exporter-*.tar.gz
cd node_exporter-*/
./node_exporter &

systemd 托管(推荐):

# /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target

[Service]
ExecStart=/usr/local/bin/node_exporter
Restart=always

[Install]
WantedBy=multi-user.target

验证:curl localhost:9100/metrics | head 能看到指标即成功。

第二步:Prometheus 抓取配置

scrape_configs:
  - job_name: node
    static_configs:
      - targets: ['server1:9100', 'server2:9100']

采集器裁剪:只采需要的

Node Exporter 默认启用几十个采集器(collector),很多你用不上(如 zfsinfiniband)。裁剪降低开销与基数:

# 只看需要的
node_exporter --collector.disable-defaults \
  --collector.cpu --collector.meminfo --collector.diskstats \
  --collector.filesystem --collector.netdev --collector.loadavg

核心指标速查与解读

CPU

# 使用率(%)
100 - avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100
# 负载
node_load1 / count by (instance) (node_cpu_seconds_total{mode="idle"})   # 每核负载

内存

# 使用率
(1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100

注意用 MemAvailable 而不是 MemFree——Linux 会把空闲内存拿去做缓存,MemFree 低不代表内存紧张。

磁盘

# 分区使用率
(1 - node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes) * 100
# IO 繁忙度
rate(node_disk_io_time_seconds_total[5m])

网络

rate(node_network_receive_bytes_total{device="eth0"}[5m]) * 8   # 入方向 bps
rate(node_network_transmit_bytes_total{device="eth0"}[5m]) * 8  # 出方向 bps

进阶:textfile 自定义指标

Node Exporter 的 textfile 采集器可以"采集任何你能写成文本的东西"——cron 任务结果、备份完成时间、证书剩余天数:

#!/bin/bash
# /usr/local/bin/backup-metric.sh
OUT=/var/lib/node_exporter/textfile/backup.prom
mkdir -p $(dirname $OUT)
cat > "$OUT.$$" <<EOF
backup_last_success_timestamp $(date +%s)
backup_size_bytes $(du -sb /backups | cut -f1)
EOF
mv "$OUT.$$" "$OUT"     # 原子写入,防止采集到半截文件

cron 定期执行,启动 node_exporter 时加 --collector.textfile.directory=/var/lib/node_exporter/textfile

观测云对照

不想每台机器部署 exporter + 维护抓取配置的话,观测云 DataKit 一条命令安装即自动采集主机指标——CPU/内存/磁盘/网络/进程全覆盖,内置主机监控仪表盘开箱即用;磁盘使用率、inode、负载的告警模板预置,安装完成即进入"有监控"状态。混合云、边缘节点场景下,DataKit 统一采集比逐台维护 exporter 省心得多。

常见问题(FAQ)

Q:Node Exporter 和直接装监控 Agent(如 DataKit)怎么选?
A:已有 Prometheus 体系、团队熟悉 PromQL → Node Exporter 顺路;想要开箱即用、指标+日志+APM 一体 → DataKit 类的一体化 Agent 更高效。

Q:容器里的 Node Exporter 看到的是容器还是宿主?
A:默认看到的是容器自己的命名空间。要监控宿主机需要挂载 /proc/sys 并加 --path.procfs 等参数,或用 hostPID/hostNetwork。K8s 里用 DaemonSet 部署。

Q:9100 端口要对外开放吗?
A:不要。只允许 Prometheus 服务器的 IP 访问(防火墙/安全组限制),或加 basic auth/TLS。metrics 端点暴露的信息(内核版本、挂载点)对攻击者有用。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台