Grafana 面板显示 No Data 但 Prometheus 有数据,排查步骤是什么?

文章导读
当 Prometheus 后端确认有数据而 Grafana 面板显示"No Data"时,问题通常不出在连接中断,而是查询语句、标签匹配或时间范围设置不一致导致的。
📋 目录
  1. 一 命令速用版
  2. 二 分步处理
  3. 三 怎么验证是否生效
  4. 四 常见坑
  5. 五 参考来源
A A

当 Prometheus 后端确认有数据而 Grafana 面板显示"No Data"时,问题通常不出在连接中断,而是查询语句、标签匹配或时间范围设置不一致导致的。

先说结论:这种情况大概率是查询条件与存储数据未对齐,而非数据源连接故障,需优先排查标签与时间范围。

  • 先确认 Prometheus 后端是否有对应指标数据
  • 先处理 Grafana 查询语句中的标签与变量匹配
  • 再验证面板时间范围与数据写入时效是否一致

命令速用版

通过 curl 直接调用 Prometheus API 验证指标是否存在,绕过 Grafana 层:

curl -G 'http://PROMETHEUS_URL:9090/api/v1/query' `--data-urlencode` 'query=up'

若返回 "status":"success" 且 result 非空,说明 Prometheus 服务端数据正常。

分步处理

第一步:验证数据源连接与指标存在性

Grafana 面板显示 No Data 但 Prometheus 有数据,排查步骤是什么?

登录 Grafana 管理界面,进入 Configuration → Data Sources,找到对应数据源点击 Test。若显示"Data source is working",说明网络与认证层面连通。随后绕过 Grafana,直接在浏览器或终端访问 Prometheus API 查询具体指标,确认后端是否有数据。

第二步:检查查询语句与标签一致性(PromQL 调试)

在 Grafana 面板编辑页面,查看 Query 中的标签选择器。常见问题是 Exporter 采集的标签与面板查询要求的标签不一致。建议在 Grafana 的 Explore 页面使用以下 PromQL 进行对比测试:

  • 基础查询:up(查看所有存活目标)
  • 指定 Job:up{job="node_exporter"}(确认 job 标签是否匹配)
  • 指定 Instance:up{instance="192.168.1.1:9100"}(确认 instance 标签是否包含端口)

若基础查询有数据但带标签查询无数据,说明标签键值对不匹配。

Grafana 面板显示 No Data 但 Prometheus 有数据,排查步骤是什么?

第三步:审查变量展开后的实际查询

如果面板使用了变量(Variable),检查变量展开后的实际查询语句。操作步骤:

  1. 进入 Dashboard 设置,找到 Variables 列表。
  2. 检查变量定义中的 Query 是否正确返回了预期值。
  3. 在面板编辑模式的 Query 框中,观察变量被替换后的完整语句(例如 up{job="$job"} 是否变成了 up{job=""})。
  4. 若变量值为空或匹配不到任何系列,会导致查询结果为空。可在 Explore 页面手动输入查询语句进行测试。

第四步:检查 Scrape 配置与标签重写

Grafana 面板显示 No Data 但 Prometheus 有数据,排查步骤是什么?

有时 Prometheus 的 scrape_configs 中配置了 relabel_configs,可能导致关键标签被丢弃或修改。检查 Prometheus 配置文件:

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']
    relabel_configs:
      - source_labels: [__address__]
        target_label: instance
        # 确保没有 action: drop 导致指标丢失

第五步:检查时间范围与写入时效

确认面板选择的时间范围覆盖了数据写入的时间点。如果数据刚写入不久,而查询范围是过去一小时,可能因采集间隔或写入延迟导致暂无数据。尝试将时间范围调整为"Last 5 minutes"。

怎么验证是否生效

使用 Grafana 左侧菜单的 Explore 功能,选择相同数据源,输入基础查询(如 Prometheus 的 up),设置时间范围为 Last 5 minutes。若有数据返回,说明数据源正常。刷新原面板,观察是否恢复数据展示。

常见坑

  • 标签不匹配:导入的 Dashboard 依赖特定 label 格式,与实际采集的 label 不一致(例如 instance 是否包含端口)。
  • 变量过滤:面板变量配置不当,导致查询语句过滤掉了所有数据(例如变量值为空)。
  • 查询结果为空非零:Prometheus 查询分子没有数据时,Grafana 面板会显示 No data 而不是显示为 0,需调整 PromQL 语句(如使用 or vector(0))。
  • 数据源配置错误:URL 地址、端口或认证信息配置错误,导致连接看似成功但无法读取数据。
  • Step 步长过大:查询时间范围内数据点稀疏,若 Step 设置过大可能采不到点。

参考来源