这个坑值得记一笔。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 这个布尔值。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
