node_exporter 默认监听 /metrics,404 多因 --web.disable-exporter-metrics 或绑定地址限制;磁盘 io_time 为 0 需查 /proc/diskstats 原始值;可用 textfile_collector 注入 df 百分比;cpu 指标断点宜用 irate() 替代 rate()。

node_exporter 启动后 curl http://localhost:9100/metrics 返回 404
默认情况下,node_exporter 不监听 /metrics(这是 Prometheus 客户端库的常见路径),而是用 /metrics ——但前提是没被显式禁用。实际 404 多半是启动参数或权限问题。
- 检查是否加了
--web.disable-exporter-metrics:这个参数会删掉基础指标,连/metrics都不暴露,直接去掉它 - 确认监听地址没锁死:默认只绑
127.0.0.1:9100,远程访问要加--web.listen-address=":9100"(注意冒号前无 IP) - systemd 启动时容易漏掉
Restart=always和LimitNOFILE=65536,后者不足会导致连接拒绝,看起来像服务没起来
采集磁盘 I/O 时 node_disk_io_time_seconds_total 为 0 或突变归零
这个指标依赖内核的 /proc/diskstats,但不同发行版、内核版本对“io_time”的统计逻辑有差异,尤其是 NVMe 设备或启用多队列(mq-deadline)调度器时。
ECTouch是上海商创网络科技有限公司推出的一套基于 PHP 和 MySQL 数据库构建的开源且易于使用的移动商城网店系统!应用于各种服务器平台的高效、快速和易于管理的网店解决方案,采用稳定的MVC框架开发,完美对接ecshop系统与模板堂众多模板,为中小企业提供最佳的移动电商解决方案。ECTouch程序源代码完全无加密。安装时只需将已集成的文件夹放进指定位置,通过浏览器访问一键安装,无需对已有
- 先运行
cat /proc/diskstats | awk '{print $13}' | head -3看原始值是否在增长;如果原生文件里就不变,说明内核没上报,不是node_exporter的锅 - 避免用
node_disk_io_time_seconds_total做绝对耗时分析,更适合做同比变化率(比如除以node_disk_reads_completed_total) - 某些云盘(如 AWS EBS gp3)或 LVM thin pool 卷可能压根不提供 io_time,此时应切换到
node_disk_read_time_seconds_total+node_disk_write_time_seconds_total
自定义采集项:想加一个 df -h 里的已用百分比,但不想写 Go 插件
node_exporter 支持通过 textfile_collector 注入外部指标,适合一次性、低频、脚本可生成的数据,比改源码或写 exporter 轻量得多。
- 启用时必须加参数:
--collector.textfile.directory="/var/lib/node_exporter/textfile_collector" - 脚本每分钟生成一个
/var/lib/node_exporter/textfile_collector/df_usage.prom,内容形如:node_filesystem_utilization{mountpoint="/"} 87.3 - 注意:文件名必须以
.prom结尾,且权限得是node_exporter用户可读(常被忽略,导致 metrics 里完全不出现该指标)
和 Prometheus 抓取频率不匹配,node_cpu_seconds_total 出现断点或锯齿
node_cpu_seconds_total 是计数器(counter),本身是单调递增的,Prometheus 用 rate() 计算速率。断点往往不是数据丢了,而是抓取节奏和内核统计精度打架。
- Prometheus 默认抓取间隔
scrape_interval: 15s,但node_exporter内部采样周期是 1s —— 这没问题;真正的问题是,若抓取卡在 CPU 切换瞬间,两次采样间可能跨过多个 tick,造成 rate 计算抖动 - 解决方案不是调高抓取频率,而是改用
irate()(最近两个样本)替代rate()(最近五分钟窗口),对瞬时波动更敏感也更稳 - 另一个隐藏坑:
node_exporter在容器中运行时,若没加--pid=host,看到的 CPU 指标其实是容器 cgroup 的,和宿主机/proc/stat对不上
node_exporter 看到的和 /proc 里的一致。









