跳到主要内容

仪表盘制作

数据源配好了,这篇把数据画出来。内容分三块:Dashboard 的结构与布局、Panel 类型怎么选,然后完整走一遍「内存使用率」面板的制作流程,最后讲 Transform 加工、面板复用与版本管理。示例环境:Grafana 10/11/12,数据源用上一篇接好的 Prometheus。

还没装好 Grafana 的话,先回 安装与快速上手 把环境跑起来,再回来跟着做。

Dashboard 结构​

层级很简单:Dashboard → Row → Panel。

  • Panel:最小单位,一张图、一个表、一个数字,背后绑定一条或多条查询。
  • Row:可折叠的分组条,把一屏面板按主题分段(主机、应用、中间件)。折叠起来的 Row 里的面板不渲染、不发查询,大 dashboard 靠它续命。
  • Dashboard:一页,本质是 24 列网格。拖面板边缘调大小、拖标题栏换位置,网格自动吸附对齐。

顶部一排入口记住四个:

  • 时间范围选择器:右上角,所有面板共享同一条时间轴;旁边的刷新下拉(5s / 30s / 1m)控制自动刷新节奏。
  • Add visualization:加面板;已有面板悬停标题栏右上角三点,菜单里有 View(全屏)、Edit、Share、Duplicate。
  • Share:分享链接,或生成 Snapshot(快照,把当前数据脱敏固化存下来,适合把「事故现场」发给没有账号的人看)。
  • 齿轮 Settings:dashboard 名称、标签、变量、版本历史、JSON Model 都在里面。
键盘党

全屏看某个面板:鼠标悬停在面板上按 v,Esc 退出;按 t 呼出时间范围选择器。排障时几个面板轮流全屏,比鼠标点快得多。

文件夹与命名习惯

Dashboard 多了之后靠两样东西找:文件夹和命名。文件夹按团队或系统分(infrastructure、middleware、app-order),Settings → General 里能把 dashboard 挪进文件夹;命名约定「系统 - 视角」,如 order-api - overview、order-api - jvm,搜索时前缀一敲就聚类。临时调试的 dashboard 起名带个 tmp 前缀,定期清理。

Panel 类型怎么选​

新建面板右上角的 visualization 下拉有几十种,日常九成的场景在这张速查表里:

类型一句话场景
Time series趋势首选:CPU、QPS、延迟曲线,拿不准就用它
Stat单值大字:当前在线实例数、今日错误总数
Gauge / Bar gauge水位类:磁盘、内存使用率,一眼看还剩多少
Table明细列表:每台机器的负载、证书到期时间清单
Logs日志原文滚动,配 Loki/ES 数据源
Heatmap分布密度:延迟落在各桶的多少,配 histogram 指标
Piechart构成占比:错误码、状态码分布
State timeline状态随时间的变化:任务成功/失败、实例 UP/DOWN
Bar chart分类柱状对比:各接口 QPS 排名
Node graph服务调用拓扑,配 tracing 数据源
选错的典型反例

单值用 Time series(就一条平线,看不出重点)、占比用 Table(数字看不出谁多谁少)、几十台机器的水位全用 Gauge(一屏圆盘密恐发作)。先想清楚「看的人要一眼得到什么」,再选类型。

做一个完整面板​

以 node_exporter 的「内存使用率」为例,从零走一遍全流程。前置条件:Prometheus 已经在抓 node_exporter(抓法见 部署与快速上手)。

第 1 步:建 dashboard 加面板。 Dashboards → New → New dashboard → Add visualization,数据源选 Prometheus,进入面板编辑页。

第 2 步:写查询(页面下半 Query tab)。 PromQL 输入框里写:

(1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100

Legend 填 {{instance}},多台机器时图例直接显示实例名而不是一长串标签。PromQL 不熟的先去补 [PromQL 查询语言](/docs/observability/prometheus/PromQL 查询语言),这篇只管用。

第 3 步:选面板类型。 右上角 visualization 下拉确认是 Time series(默认就是它)。

第 4 步:设单位(右栏 Standard options → Unit)。 搜 percent 选 Percent (0-100)——因为查询里乘过 100,值域是 0-100。如果查询没乘(值域 0-1),要选 Percent (0.0-1.0)。单位是数值难看的第一来源:字节量选 Bytes(IEC) 显示成 GiB,比一长串天文数字友好得多。

第 5 步:阈值变色(Standard options → Thresholds)。 改成:Base 绿、70 黄、90 红,mode 保持 absolute。Stat/Gauge 的大字会随阈值直接变色;Time series 曲线默认不变色,想让曲线颜色跟着阈值走,去 Graph styles → Color scheme 选 From thresholds,或者把阈值线画出来当参照。

第 6 步:图例与 Tooltip(右栏 Legend / Tooltip)。 Legend 模式从 List 换成 Table,勾上 Last、Max 两列,多机器时直接按极值排序;Tooltip mode 选 All,鼠标悬停时同屏列出所有序列的值,配合 Sort descending 最快定位「谁最高」。

顺带一个高频疑问也在右栏:数据断点(抓取掉链子时序列出现空洞)默认断线处理,想让线跨过去把 Graph styles → Connect null values 调成 Always。排障场景建议保持默认——断点本身就是「那段时间没数据」的线索,连上反而掩盖问题。

第 7 步:标题与描述(右栏 Panel options)。 Title 写「内存使用率」;Description 写清口径——「(1 - 可用 / 总量) × 100,可用含 buffer/cache」,悬停面板左上角 i 图标可见。描述是写给三个月后值夜班的自己看的。

可选第 8 步:给单条序列开小灶(右栏 Overrides)。 Standard options 管全体序列,想单独处理某一条就用 Overrides:Add field override → 按 field name 选中那台重点机器 → 给它单独的颜色、线宽或虚线样式。阈值、单位的个性化也都走这里,是「常见坑」里颜色不生效的事发地,先混个脸熟。

最后右上角 Save,顺手写一句变更说明,下一步「版本历史」会用到。

先 Explore 后面板

查询别在面板编辑页里硬调。先在 Explore 把 PromQL 跑通、确认序列和标签都对,再粘进面板——Explore 的报错信息和表格视图对调试友好得多。

Transform 变换​

查询区旁边有个 Transform data tab,作用是对查询结果做展示层加工。什么时候用它:查询层(PromQL/SQL)搞不定、或者搞起来很丑的时候。常用的四个:

Transform干什么典型场景
Merge多个查询的结果合并成一个结果集两条查询拼进同一张表
Filter data by values按条件过滤行/序列只显示使用率超过 70% 的机器
Organize fields字段重命名、隐藏、调整顺序Table 列名中文化、藏掉 Time 列
Rename by regex正则批量改序列名序列名拖着冗长标签串时统一改名

举个 rename by regex 的实际例子:没写 Legend 时序列名是完整标签串,图例完全没法看,用一条正则把实例名抠出来:

序列原名:node_load1{instance="10.0.1.11:9100", job="node"}
Match: node_load1\{instance="([^"]+)".*
Replace:$1

执行后序列名就只剩 10.0.1.11:9100。当然这个例子用 Legend 填 {{instance}} 更正统——Transform 留给 Legend 解决不了的批量改名,比如把多列时间统一格式、给表头批量加前缀。

Transform 的边界

Transform 只对当前面板的显示生效,告警规则看不到它——告警评估拿的是查询原始结果。所以加工口径能下沉到查询层就下沉(PromQL 里用 label_replace 改名),Transform 留给纯展示需求。另外多个 transform 按列表顺序依次执行,顺序错了结果就不对,拖动能调。

面板的复用与版本​

  • 复制面板:面板菜单 → Duplicate 原地复制;跨 dashboard 复用,面板菜单 → More → Copy,到目标 dashboard 里 Add → Paste panel。
  • 导出/导入:Settings → JSON Model 是整个 dashboard 的完整定义,复制走即可搬运;Share → Export 有「导出给外部共享」选项,会抹掉数据源绑定。导入侧在 Dashboards → New → Import,粘 JSON 或填 Grafana 官方 Dashboard 市场 的 ID,过程中会要求把数据源映射到本机的条目。
  • 版本历史:Settings → Versions,每次保存留一条记录,可以对比差异、一键回滚到任意版本。多人共用一个 dashboard 时这是后悔药——保存时写注释,就是给回滚留路标。
  • Library panels:把面板存进库,多个 dashboard 引用同一个实例,改一处全部生效。适合「每个 dashboard 都要有的总览面板」;小团队用不上可以暂缓。
跨环境搬家的坑

JSON 直接搬运最常见的问题:里面写死了数据源 uid,目标环境 uid 不同,面板全红。解法是用 Export 的 for sharing externally 导出、导入时重新映射数据源;正经多环境部署请走 provisioning,JSON 文件放 Git 里,和数据源 provisioning 是同一套机制。

常见坑​

  • 一页面板太多卡死:上百个面板加 5s 自动刷新,浏览器和 Prometheus 一起哀嚎。拆成多个 dashboard、用 Row 折叠、刷新间隔放宽到 30s 以上。
  • 单位没选对数值难看:0.85 还是 85%,取决于 Unit 选了 percent 还是 percentunit;字节量选了 short 就是一串大数字。数值「对但难看」先查单位,再查 Thresholds 的 absolute/percentage 模式有没有选混。
  • 时间范围盖过查询窗口:右上角只选最近 5 分钟,PromQL 里 rate 窗口却写 [1h],或者抓取间隔本身就是 1m——面板上只剩几个孤点甚至空白。先把时间范围拉大,再去 Explore 复现确认。
  • 阈值、颜色不生效:八成是 Overrides 里按 field name 匹配的规则没匹配上——改过 Legend 或被 Transform 重命名后,原来的字段名对不上了,去 Overrides 里核对匹配条件,必要时改用 field by type 或正则匹配。

小结​

  • 结构三层:Dashboard(24 列网格)→ Row(可折叠分组)→ Panel;时间范围和自动刷新在右上角统一管理。
  • 面板类型按「一眼要什么」选:趋势 Time series、单值 Stat、水位 Gauge、明细 Table、占比 Piechart。
  • 完整流程七步:查询 → 类型 → 单位 → 阈值 → 图例与 Tooltip → 标题描述 → 保存带注释;PromQL 先在 Explore 调通再粘进来。
  • Transform 管展示层加工,告警看不到它;能下沉查询层就下沉。
  • 复用靠复制与 JSON 搬运,安全靠版本历史;多环境部署的最终归宿是 provisioning 加 Git。

面板画顺手之后,下一步是模板变量——一个下拉框切换主机,一套 dashboard 看全集群,见下一篇。