grafana 空面板主因是后端数据源未通:先用 curl 验证 prometheus 指标暴露,docker 中 grafana 需用 host.docker.internal,node exporter 需启用对应采集器并正确配置 textfile,面板指标名需匹配实际名称,cpu 查询须先 rate 再 avg by(instance),且 scrape_interval 至少为 rate 窗口的 1/4。

Grafana 本身不采集数据,只负责可视化——你看到的空面板、No data 或 Data source is not available,90% 是因为后端没通,而不是 Grafana 装错了。
怎么确认 Prometheus 数据源连得上
别急着导入面板,先确保 Grafana 能从 Prometheus 拿到指标:
-
curl http://localhost:9090/metrics | head -n 5在 Prometheus 所在机器上执行,能看到类似node_cpu_seconds_total的指标才说明它在正常暴露数据 - Grafana 容器里填
localhost:9090肯定失败——它跑在自己的网络命名空间里。Docker 环境下必须用http://host.docker.internal:9090;宿主机直连则填宿主机真实 IP,如http://192.168.1.100:9090 - 点
Save & test后出现Data source is working才算真正通了;如果报connection refused,优先查 Prometheus 是否运行、端口是否被防火墙拦住(firewall-cmd --list-ports)
Node Exporter 采集器为什么很多指标不显示
默认只开 cpu、mem、diskstats 这几个基础采集器,systemd、netstat、textfile 都是关着的:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 启动命令加
--collectors.enabled="cpu,mem,systemd,netstat,textfile",否则面板里服务状态、连接数永远是 0 -
textfile必须配目录:--collector.textfile.directory="/var/lib/node_exporter/textfile_collector",且文件要以.prom结尾、权限对node_exporter用户可读 - 改完配置后,
systemctl daemon-reload && systemctl restart node_exporter,再curl http://localhost:9100/metrics | grep systemd确认新指标已出现
导入现成面板后图表全空,指标名对不上怎么办
社区面板(比如 ID 1860)默认查 node_cpu_seconds_total,但你的环境可能用的是旧版 node_exporter、relabel 规则或自定义前缀,导致实际指标名变了:
- 先去 Prometheus Graph 页面手写查询:
count(node_cpu_seconds_total),没结果就说明名字不对 - 打开面板 JSON(
Dashboard settings → JSON Model),全局搜索node_cpu_seconds_total,替换成你实际有的指标,比如10x_node_cpu_seconds_total或myhost_cpu_usage - 别漏掉 PromQL 表达式里的其他指标名,像
node_memory_MemFree_bytes、node_disk_io_time_seconds_total也得一并替换
手动写 CPU 使用率查询时 rate() 和 avg() 的顺序不能错
常见错误是直接写 avg(rate(node_cpu_seconds_total{mode="idle"}[5m])),这会把所有 CPU 核心的 idle 时间平均后再算 rate,结果偏低且不稳定:
- 正确顺序是先
rate再avg by(instance):100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) -
rate()必须作用于原始计数器,不能套在avg()外面;否则 Prometheus 会把它当普通向量处理,失去时间序列语义 - 如果监控多台主机,
by(instance)要保留,否则所有机器指标会被强行合并,数值失真
最常被忽略的一点:Prometheus 抓取间隔(scrape_interval)和 rate 窗口(比如 [5m])之间要有至少 4 倍关系,否则 rate() 可能返回 NaN。别让 scrape_interval: 30s 却用 [1m]——这在低频抓取时几乎必出空值。










