Grafana 面板显示 No data 怎么排查?
更新时间:2026-09-19。短答页。No data 不是监控坏了,大多是「查询在当前条件下匹配不到任何序列」。按下面顺序 5 分钟定位。
一句话回答
先在 Explore 里把面板的 PromQL 用固定值跑一遍,按「数据源是否通 → 标签选择器是否匹配 → 时间范围/rate 窗口 → 变量取值 → target 是否在抓取」逐层缩小,能把绝大多数 No data 定位到具体一层。
排查顺序
- 数据源通不通:Explore 里跑
up,若直接报错是数据源 URL/权限问题;看up{job="你的job"} == 0,target 根本没被抓到(exporter 挂了/服务发现没选中),见 exporter 接入。 - 去掉函数先确认原始指标存在:先查
http_requests_total有没有序列,再加标签和 rate。原始指标没有 → 埋点没生效或指标名写错。 - 标签选择器太严:
{job="order",route="/api/x",code="200"}某个标签值拼错/大小写不符就空。用count by (job,route,code)(...)看实际有哪些取值。 - 时间范围/rate 窗口太短:
rate(...[1m])但抓取间隔是 30s、且只看最近 1 分钟,可能凑不够点;窗口取 ≥4 倍 scrape_interval,看板用$__rate_interval。 - 变量为空或不匹配:
$job没选、级联变量(选了 A job 但 route 来自 B)、多选变量正则没开,导致选择器不命中任何序列。 - 聚合后无序列:
sum by (le)(...)把标签聚没了,或 histogram 漏了 le 标签;分位数查询见 P99 正确写法。 - 指标被 relabel 丢弃/改名:抓取或 metric_relabel 改了 job/instance,面板还在查旧名。
快速技巧
- 把面板查询原样粘到 Explore,固定变量值、把时间拉大到最近 1 小时,最快排除「面板设置/变量」干扰。
- 面板从 Time series 临时切 Table,直接看到底有没有点、标签长什么样。
- 用
count(...)包住查询:返回 0 就是没匹配到序列,而非渲染问题。
坑
- 只在图上看不出是「查询无结果」还是「数据源断了」,必须去 Explore 分离。
- 换了 dashboard 时间粒度后用写死的
[5m],缩放时出现断点,应用$__rate_interval。 - target 显示 UP 但指标 no data,往往是应用只在有请求时才产生序列(counter 初始无样本),可用
or vector(0)兜底。
看板变量与查询规范见 Grafana 看板设计。
总结
Grafana No data 按「数据源与 up 状态→原始指标是否存在→标签选择器是否过严→rate 窗口与时间范围是否够长→变量是否为空或级联错配→聚合是否把序列聚没→relabel 是否改名」逐层排查,最快方法是把查询固定变量后丢进 Explore、切 Table 看原始点;常见根因是 target 没抓到、标签值不匹配、rate 窗口短于采样间隔和变量为空。