
从传统物理机、虚拟机到云原生环境基础设施的形态在变但主机层的基础指标始终是性能分析与稳定性排查的基石。CPU、内存、磁盘、网络这四类资源的数据几乎决定了上层应用能否平稳运行。也正因如此如何高效、准确地采集这些指标成为可观测性建设中绕不开的第一步。node_exporter 正是为这一目标而生的。它是 Prometheus 官方维护的主机指标导出器隶属于 CNCF 生态使用 Go 语言编写。它遵循 Prometheus 的文本指标格式通过 50 多个 Collector 从 /proc、/sys 等内核接口读取硬件与操作系统指标再经由 HTTP :9100/metrics 端点暴露给 Prometheus 拉取。在整个 Prometheus 监控体系中它扮演着 Exporter 这一关键角色。如今node_exporter 已成为 Linux 主机指标采集事实上的标准方案。在云原生与 Kubernetes 环境中它通常以 DaemonSet 方式在每个节点部署一个实例配合 hostNetwork、hostPID 获取节点的物理指标并与 Prometheus、Grafana、Alertmanager 组成一套成熟的监控告警组合。横向对比来看Telegraf 插件丰富更适合 push 模式与中间件采集Zabbix Agent 扎根传统机房主动加被动功能全面但相对较重而 node_exporter 胜在轻量与专注——只做主机基础资源这一件事却与 Prometheus 生态深度集成因而成为 K8s 场景的首选。正因如此掌握 node_exporter 的安装、核心指标与告警配置是构建主机层可观测性的基础。本文即围绕这三点逐一展开。一、node_exporter 安装1、二进制文件安装下载地址https://github.com/prometheus/node_exporter/releases$ tar xvfz node_exporter-1.12.1.linux-amd64.tar.gz $ sudo cp node_exporter-1.12.1.linux-amd64/node_exporter /usr/local/bin/创建 Node Exporter 的 systemd 服务文件$ sudo tee /etc/systemd/system/node_exporter.service /dev/null EOF [Unit] DescriptionNode Exporter Wantsnetwork-online.target Afternetwork-online.target [Service] Userroot ExecStart/usr/local/bin/node_exporter [Install] WantedBymulti-user.target EOF启动并使 Node Exporter 服务开机自启$ sudo systemctl start node_exporter $ sudo systemctl enable node_exporter验证http://127.0.0.1:9100/metrics2、容器方式安装通过 Docker 直接进行部署docker run -d \ --nethost \ --pidhost \ -v /:/host:ro,rslave \ quay.io/prometheus/node-exporter:latest \ --path.rootfs/host若部署环境为 Kubernetesk8s则采用 DaemonSet 方式在每个宿主机节点上自动安装 node-exporter。二、核心指标解析1、CPU 指标Collector:cpu|来源:/proc/stat核心指标node_cpu_seconds_total{cpu, mode}是 Counter 类型记录每颗 CPU 核心在各模式下累计运行的秒数。常见 mode 标签:idle、user、system、iowait、steal、irq、softirq、nice。主要指标Prometheus 指标名指标类型含义说明node_cpu_seconds_totalCounterCPU 花费在不同模式如 user、system、idle下的累计秒数用于计算 CPU 使用率常用 PromQL# 整机 CPU 使用率(%) 100 - (avg by(instance) (rate(node_cpu_seconds_total{modeidle}[5m])) * 100) # 按核心查看 CPU 使用率 100 - (avg by(instance, cpu) (rate(node_cpu_seconds_total{modeidle}[5m])) * 100) # iowait 占比(高值提示磁盘瓶颈) avg by(instance) (rate(node_cpu_seconds_total{modeiowait}[5m])) * 100分析要点使用率持续 85% 判定严重70%-85% 判定警告iowait 持续 20% 需关联检查磁盘 I/O 指标各 mode 标签含义标签名称含义idle空闲CPU 空闲没有任务在跑。idle 高 CPU 不忙idle 低 CPU 繁忙。user用户态运行用户程序消耗的 CPU业务代码、应用进程不含内核。user 高业务应用本身计算量大。system (sys)内核态操作系统内核执行的 CPU 时间系统调用、内存管理、进程调度等。sys 高频繁系统调用、锁竞争、内核开销大。nice低优先级用户态nice 值调整过优先级的用户进程占用 CPU。一般服务器默认接近 0手动调低进程优先级才会上涨。iowaitIO 等待CPU 等待磁盘 IO 完成的时间。⚠️ 重点不是 CPU 忙是进程在等磁盘。iowait 高说明磁盘瓶颈CPU 没事干在等 IO。irq硬中断硬件中断占用 CPU 时间网卡、磁盘控制器等硬件发来中断信号。irq 飙升网卡流量巨大、磁盘硬件中断频繁。softirq软中断内核的软件中断中断下半部比如网络收包、定时器。softirq 高常见于网络大包、高并发网络流量。steal窃取时间虚拟化环境KVM/VMware专用。宿主机把 CPU 时间抢走给其他虚拟机。steal0当前虚拟机 CPU 资源被宿主机上其他 VM 抢占虚拟机 CPU 资源不足。2、内存指标Collector:meminfo|来源:/proc/meminfo主要指标Prometheus 指标名指标类型含义说明node_memory_MemTotal_bytesGauge物理内存总量node_memory_MemAvailable_bytesGauge可用内存(含可回收缓存)node_memory_MemFree_bytesGauge完全空闲内存node_memory_Buffers_bytesGauge内核缓冲区node_memory_Cached_bytesGauge页面缓存node_memory_SwapTotal_bytesGaugeSwap 总量node_memory_SwapFree_bytesGaugeSwap 空闲常用 PromQL# 内存使用率(%) (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 # Swap 使用率(持续增长说明内存不足) (node_memory_SwapTotal_bytes - node_memory_SwapFree_bytes) / node_memory_SwapTotal_bytes * 100 # 整机内存使用变化速率MB/s检测内存泄漏 # 200 主机内存持续消耗 {{ $value }} MB/h - increase(node_memory_MemAvailable_bytes[1h]) /1024/1024 increase(node_memory_MemAvailable_bytes[1h]) * -1 / 1024 / 1024分析要点可用内存持续下降且不回收可能存在内存泄漏Swap 使用量 0 表明物理内存不足需关注性能影响Available 内存 总内存 10% 判定严重主机内存持续消耗如持续3小时消耗200M/h可能存在内存泄漏功能与第一条相似3、磁盘 I/O 指标Collector:diskstats|来源:/proc/diskstats主要指标Prometheus 指标名指标类型含义说明node_disk_read_bytes_total{device}Counter累计读取字节数node_disk_written_bytes_total{device}Counter累计写入字节数node_disk_reads_completed_total{device}Counter累计完成读操作数node_disk_writes_completed_total{device}Counter累计完成写操作数node_disk_io_time_seconds_total{device}Counter累计 I/O 耗时node_disk_io_now{device}Gauge当前在途 I/O 数常用 PromQL# 磁盘读写吞吐MB/s rate(node_disk_read_bytes_total[5m]) / 1024 / 1024 rate(node_disk_written_bytes_total[5m]) / 1024 / 1024 # 磁盘 IOPS rate(node_disk_reads_completed_total[5m]) rate(node_disk_writes_completed_total[5m]) # 磁盘 I/O 利用率(% 时间在做 I/O) rate(node_disk_io_time_seconds_total[5m]) * 100 # I/O 延迟 rate(node_disk_read_time_seconds_total[5m]) / rate(node_disk_reads_completed_total[5m]) rate(node_disk_write_time_seconds_total[5m]) / rate(node_disk_writes_completed_total[5m]) # 排除分区设备,只看物理盘 rate(node_disk_read_bytes_total{device~sd[a-z]|nvme[0-9]n[0-9]}[5m])分析要点io_time 持续 20% 表示 I/O 成为瓶颈读写延迟 10ms 需关注磁盘健康度关联 CPU iowait 指标交叉验证4、文件系统指标Collector:filesystem|来源:/proc/mountsstatvfs主要指标Prometheus 指标名指标类型含义说明node_filesystem_size_bytes{device,mountpoint,fstype}Gauge分区总容量node_filesystem_avail_bytesGauge可用空间node_filesystem_free_bytesGauge空闲空间(含 root 保留)node_filesystem_filesGauge总 inode 数node_filesystem_files_freeGauge空闲 inode 数node_filesystem_readonlyGauge只读标记(0/1)常用 PromQL# 磁盘使用率(%) (1 - node_filesystem_avail_bytes{fstype!~tmpfs|overlay|squashfs} / node_filesystem_size_bytes{fstype!~tmpfs|overlay|squashfs}) * 100 # inode 使用率(%) (1 - node_filesystem_files_free{fstype!~tmpfs|overlay|squashfs} / node_filesystem_files{fstype!~tmpfs|overlay|squashfs}) * 100 # 过滤掉伪文件系统(常用排除项) (node_filesystem_avail_bytes{fstype!~tmpfs|overlay|squashfs|iso9660}) # 磁盘空间剩余 GB node_filesystem_avail_bytes{fstype!~tmpfs|overlay|squashfs} / 1024 / 1024 / 1024 # 按增长速率预测磁盘满时间 - deriv(node_filesystem_avail_bytes{mountpoint/data}[1h]) * 24分析要点使用率 90% 判定严重需立即处理inode 使用率与空间使用率差异大时需单独关注小文件过多通过增长率预测磁盘满时间提前预警5、网络指标Collector:netdev|来源:/proc/net/dev主要指标Prometheus 指标名指标类型含义说明node_network_receive_bytes_total{device}Counter累计接收字节node_network_transmit_bytes_total{device}Counter累计发送字节node_network_receive_errs_total{device}Counter接收错误数node_network_transmit_errs_total{device}Counter发送错误数node_network_receive_drop_total{device}Counter接收丢包数常用 PromQL# 网络接收吞吐(Bytes/s) rate(node_network_receive_bytes_total{device!~lo|veth.*|docker.*}[5m]) # 网络发送吞吐(Bytes/s) rate(node_network_transmit_bytes_total{device!~lo|veth.*|docker.*}[5m]) # 网络错误率 rate(node_network_receive_errs_total[5m])分析要点丢包率 0.1% 需排查网络设备或网卡问题6、系统负载Collector:loadavg|来源:/proc/loadavg主要指标Prometheus 指标名指标类型含义说明node_load1Gauge1 分钟平均负载node_load5Gauge5 分钟平均负载node_load15Gauge15 分钟平均负载node_procs_runningGauge运行中进程数node_procs_blockedGauge阻塞进程数常用 PromQL# 负载与 CPU 核心数比率(1 表示过载) node_load1 / count by(instance) (node_cpu_seconds_total{modeidle}) # 阻塞进程数(非零说明 I/O 瓶颈) node_procs_blocked分析要点load1 持续 CPU 核心数 * 1.5 表示过载对比 load1 / load15 判断是否为突发负载7、其他指标1文件描述符(filefdcollector)Prometheus 指标名 / 表达式指标类型含义说明备注node_filefd_allocatedGauge当前系统已分配的文件描述符FD数量来自 node-exporter主机级指标通常对应/proc/sys/fs/file-nr中已分配数量node_filefd_maximumGauge系统允许的最大文件描述符数量来自 node-exporter主机级指标通常对应/proc/sys/fs/file-maxnode_filefd_allocated / node_filefd_maximum * 100Gauge / 百分比文件描述符使用率FD 使用率派生表达式用于衡量当前 FD 消耗占比2TCP 连接(netstatsockstatcollector)主要指标Prometheus 指标名指标类型含义说明备注node_netstat_Tcp_CurrEstabGauge当前处于 ESTABLISHED 状态的 TCP 连接数反映当前活跃 TCP 连接规模来自 node-exporter主机级指标node_netstat_Tcp_RetransSegsCounterTCP 重传报文段总数用于计算 TCP 重传率需配合rate()使用node_sockstat_TCP_twGauge处于 TIME_WAIT 状态的 TCP 套接字数过多可能占用本地端口资源来自 node-exporter主机级指标node_sockstat_TCP_inuseGauge正在使用中的 TCP 套接字数表示已分配且未释放的 TCP socket 数量来自 node-exporter主机级指标常用 PromQL# TCP 重传速率(高值提示网络质量问题) rate(node_netstat_Tcp_RetransSegs[5m]) # TIME_WAIT 堆积 node_sockstat_TCP_tw分析要点TCP 重传率 2% 表明网络质量差连接数持续增长需检查是否存在连接泄漏3系统信息(boottimeunametimecollector)主要指标Prometheus 指标名指标类型含义说明备注node_boot_time_secondsGauge系统启动时间Unix 时间戳单位秒来自 node-exporter主机级指标node_time_secondsGauge当前系统时间Unix 时间戳单位秒来自 node-exporter用于检测节点时钟偏移node_uname_infoGauge / Info内核与系统信息值恒为1通过标签携带sysname、nodename、release、version、machine等来自 node-exporter可用标签提取内核版本等信息常用 PromQL# 系统运行时长秒 time() - node_boot_time_seconds # 系统运行时长天 (time() - node_boot_time_seconds) / 86400 # 检测节点时钟偏移秒 node_time_seconds - time() # 查看内核版本信息 node_uname_info # 按内核版本聚合 count by (release, version) (node_uname_info)三、告警规则参考#分类告警名称 (alert)级别for触发条件 / 阈值说明1CPUHostHighCpuLoadwarning5mCPU 使用率 70%主机 CPU 使用率过高2CPUHostCriticalCpuLoadcritical5mCPU 使用率 85%主机 CPU 使用率严重需立即排查3内存HostMemoryUsageHighwarning5m内存使用率 75%主机内存使用率过高4内存HostMemoryUsageCriticalcritical5m内存使用率 90%内存严重不足存在 OOM 风险5SwapHostHighSwapUsagewarning3mSwap 使用率 80% 且 SwapTotal 0物理内存不足存在换页风险6磁盘HostDiskSpaceWarningwarning5m磁盘使用率 80%排除 tmpfs/overlay/squashfs磁盘空间不足警告7磁盘HostDiskSpaceCriticalcritical5m磁盘使用率 90%排除 tmpfs/overlay/squashfs磁盘空间严重不足需立即清理8磁盘 I/OHostDiskIOHighwarning5mI/O 时间占比 20%磁盘 I/O 等待过高9磁盘 I/OHostDiskIOCriticalcritical5mI/O 时间占比 40%磁盘 I/O 严重瓶颈10网络带宽HostNetworkBandwidthHighwarning5m带宽利用率 70%按 1Gbps 网卡网络带宽利用率过高11网络带宽HostNetworkBandwidthCriticalcritical5m带宽利用率 85%按 1Gbps 网卡网络带宽利用率严重12网络丢包HostNetworkRxPacketLossHighwarning3m接收丢包率 0.1% 且接收包数 0网卡接收丢包率过高13网络丢包HostNetworkTxPacketLossHighwarning3m发送丢包率 0.1% 且发送包数 0网卡发送丢包率过高14系统负载HostHighLoad1OverCPUCorewarning5mload1 CPU 核数 × 1.5系统负载过高可用 load1/load15 判断突发负载15TCP 连接HostTcpRetransRateHighwarning3mTCP 重传率 2% 且报文数 0网络质量异常存在报文丢失16TCP 连接HostTcpTimeWaitAccumulatewarning5mTIME_WAIT 增速 50/sderiv 10mTIME_WAIT 持续堆积疑似连接泄漏编写 PromQL 时需注意Counter vs Gauge: 所有_total后缀的指标为 Counter(只增不减)查询时必须使用rate()或increase()无_total后缀的指标为 Gauge(可增可减)直接使用即可。四、小结至此我们完整走过了 node_exporter 从定位、安装到指标采集与告警规则落地的全部流程。指标虽多但不必面面俱到。日常部署的应用主要侧重于 CPU 计算与内存使用磁盘、网络等指标通常仅在少数特定应用中才需重点关注。因此在 Grafana 主监控面板中展示 CPU 与内存使用率即可其余指标按需在专项面板中查看。