这个坑值得记一笔。Ubuntu 20.04 上新装 node_exporter,systemd 显示 active,Prometheus 也能抓到 9100,但 node_cpu_seconds_total 这些指标全都没有,访问 http://ip:9100/metrics 返回的是一个业务接口的 JSON。

刚开始盯着「Prometheus 只检查端口存活,没有校验指标内容」,折腾了半个多小时,排掉了。

这类报错背后常见的原因有几处,逐个排除就行。9100 已经被另一个 Java 应用占用,node_exporter 启动失败;systemd 的 Restart=always 让它反复重启,失败日志被刷掉;应用监听的是 0.0.0.0:9100,和 exporter 抢同一个端口。

先看端口被哪个进程占着

ss -lntp | grep 9100

随后查 node_exporter 的真实启动日志

journalctl -u node_exporter -n 50 --no-pager

给 exporter 换一个监听端口

node_exporter --web.listen-address=:9101

末了验证新端口返回的是标准指标

curl -s http://127.0.0.1:9101/metrics | grep node_cpu_seconds_total | head

白天有业务在跑,能验证的部分都压到了晚上做。

当时还开着另一个排查窗口,两边日志对照着看才定位到。

改完先别撤,确认这几项。9101 返回标准 node_exporter 指标,Prometheus 里 node_cpu_seconds_total 有数据,up 保持为 1。

端口通不代表服务对,抓取配置里最好加指标存在性告警,别只看 up 这个布尔值。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189