Node Exporter可以将Linux服务器的CPU、内存、磁盘和网络等资源指标暴露给Prometheus,再通过PromQL进行查询和分析。
本文整理Node Exporter常用监控指标及PromQL查询语句,适合用于Grafana服务器资源看板和基础故障排查。
一、监控目标
本文主要介绍以下监控内容:
- CPU使用率。
- 内存使用率。
- 磁盘使用率。
- 网络接收和发送流量。
- Node Exporter采集状态。
整体数据链路如下:
Linux服务器 → Node Exporter → Prometheus → Grafana
Node Exporter负责采集服务器指标,Prometheus负责保存数据,Grafana负责将查询结果展示为图表。
二、验证Node Exporter服务
Node Exporter默认监听9100端口。
检查服务状态:
sudo systemctl is-active node_exporter
请求指标接口:
curl http://127.0.0.1:9100/metrics | head
如果能够看到类似以下指标内容,说明Node Exporter已经正常运行:
# HELP node_cpu_seconds_total Seconds the CPUs spent in each mode.
# TYPE node_cpu_seconds_total counter
在Prometheus的Targets页面中,检查Node Exporter对应的node目标。
如果状态显示为UP,说明Prometheus能够正常采集Node Exporter指标。
如果目标显示为DOWN,需要继续检查Node Exporter服务、9100端口和Prometheus配置。
三、查询CPU使用率
常用CPU使用率PromQL如下:
100 - (
avg by (instance) (
rate(node_cpu_seconds_total{mode="idle"}[5m])
) * 100
)
这条查询的计算逻辑如下:
node_cpu_seconds_total表示CPU各运行状态累计消耗的时间。mode="idle"表示CPU处于空闲状态。rate(...[5m])计算最近5分钟内的平均速率。- 使用
100减去CPU空闲比例,得到CPU使用率。
执行查询时,avg by (instance)会按照服务器实例进行聚合,适合在多核服务器上查看整体CPU使用率。
不建议只关注瞬时CPU数值。服务器短时间出现高负载并不一定代表故障,可以结合5分钟或10分钟时间窗口观察趋势。
四、查询内存使用率
常用内存使用率PromQL如下:
(
1 - (
node_memory_MemAvailable_bytes
/ node_memory_MemTotal_bytes
)
) * 100
其中:
node_memory_MemTotal_bytes表示服务器总内存。node_memory_MemAvailable_bytes表示系统可以提供给应用使用的内存。- 用总内存减去可用内存,可以计算当前内存使用比例。
相比直接使用free指标,MemAvailable更适合用于估算系统当前可以分配给应用的内存。
如果内存使用率持续偏高,还需要继续检查:
- 占用内存较高的进程。
- Docker容器资源使用情况。
- 数据库缓存和连接数。
- 应用是否存在内存泄漏。
- 系统日志中是否出现内存不足信息。
五、查询磁盘使用率
查看根目录磁盘使用率,可以使用:
(
1 - (
node_filesystem_avail_bytes{
fstype!~"tmpfs|overlay|squashfs",
mountpoint="/"
}
/
node_filesystem_size_bytes{
fstype!~"tmpfs|overlay|squashfs",
mountpoint="/"
}
)
) * 100
这条查询通过文件系统类型和挂载点进行过滤:
- 排除
tmpfs临时文件系统。 - 排除
overlay容器文件系统。 - 排除
squashfs只读压缩文件系统。 - 重点查看根目录
/的使用情况。
如果服务器还挂载了独立数据盘、日志盘或数据库目录,应将对应挂载点加入单独的监控查询。
磁盘使用率过高时,应重点检查:
- 网站和应用日志。
- 数据库文件。
- Docker镜像和容器数据。
- Prometheus监控数据。
- 临时文件和备份文件。
建议为磁盘使用率配置告警,避免磁盘写满后导致数据库停止、日志无法写入或应用无法正常运行。
六、查询网络流量
接收流量
rate(
node_network_receive_bytes_total{device!="lo"}[5m]
)
发送流量
rate(
node_network_transmit_bytes_total{device!="lo"}[5m]
)
其中:
node_network_receive_bytes_total表示网卡累计接收字节数。node_network_transmit_bytes_total表示网卡累计发送字节数。rate(...[5m])计算最近5分钟的平均速率。device!="lo"用于排除本地回环网卡。
如果服务器有多个网络接口,可以按网卡名称进行区分:
rate(
node_network_receive_bytes_total{
device="eth0"
}[5m]
)
实际网卡名称可能是eth0、ens3或其他名称,可以通过以下命令查看:
ip addr
网络流量图表的单位应设置为Bytes/sec或Bps,不要与bits/sec混淆。
七、检查Node Exporter采集状态
Prometheus提供up指标,可以检查采集目标是否正常:
up{job="node"}
返回值通常为:
1
表示Prometheus最近一次采集成功。
返回:
0
表示目标当前无法正常采集。
也可以直接查询所有目标状态:
up
在Grafana中,可以将该指标制作成状态面板,及时发现Node Exporter停止、端口不可访问或配置错误等问题。
八、在Grafana中展示服务器资源
服务器资源看板通常包含以下面板:
- CPU使用率。
- 内存使用率。
- 根目录磁盘使用率。
- 网络接收速率。
- 网络发送速率。
- Node Exporter采集状态。
看板中的每个面板都对应一条或多条PromQL查询语句。
排查问题时,不要只查看图表结果,还应回到Prometheus中执行对应查询,确认:
- 指标名称是否存在。
- 标签筛选是否正确。
- 时间范围是否合适。
- 查询结果是否包含目标实例。
- 数据采集间隔是否满足展示需求。
九、常见问题
问题一:Prometheus查不到Node Exporter指标
先检查指标接口:
curl http://127.0.0.1:9100/metrics
再检查服务状态:
sudo systemctl status node_exporter --no-pager
如果服务正常运行,但Prometheus仍然无法采集,需要检查Prometheus配置文件中的目标地址和端口。
问题二:Grafana面板没有数据
先确认Prometheus是否能够查询到数据:
curl "http://127.0.0.1:9090/api/v1/query?query=up"
如果Prometheus查询不到Node Exporter数据,应先处理采集链路,再检查Grafana数据源和面板配置。
问题三:磁盘指标数量太多
Node Exporter会采集多个文件系统,因此可能返回大量磁盘指标。
可以通过文件系统类型、挂载点和设备名称进行过滤,例如:
node_filesystem_avail_bytes{
fstype!~"tmpfs|overlay|squashfs",
mountpoint="/"
}
实际监控时,优先关注根目录、数据目录、日志目录和数据库所在挂载点。
问题四:CPU使用率与系统命令结果不一致
不同工具的统计时间窗口和计算方式可能不同。PromQL查询使用最近5分钟速率时,结果与top或其他命令的瞬时值出现差异属于正常情况。
排查时,应统一时间窗口,再对比相同实例和相同CPU范围的数据。
十、建议告警阈值
可以根据服务器规格和业务负载设置初始阈值:
- CPU使用率连续10分钟超过85%。
- 内存使用率连续10分钟超过90%。
- 磁盘使用率持续超过85%。
- Node Exporter连续2分钟无法被Prometheus采集。
示例规则中的阈值需要结合实际业务调整。数据库服务器、编译服务器和普通网站服务器的正常负载范围可能不同,不能直接使用同一组阈值。
十一、总结
Node Exporter是Linux服务器基础监控的重要组件。掌握CPU、内存、磁盘和网络流量的PromQL查询后,可以通过Prometheus验证数据,再由Grafana展示趋势和状态。
遇到服务器资源异常时,应按照以下顺序排查:
- 确认Node Exporter服务正常。
- 确认Prometheus Targets为
UP。 - 在Prometheus中执行PromQL查询。
- 检查指标和标签是否正确。
- 最后检查Grafana数据源和面板配置。
这样,Grafana看板就不仅用于展示数据,也可以作为定位服务器问题的运维工具。
-
广告合作
-
QQ群号:4114653






