仪表盘制作
数据源配好了,这篇把数据画出来。内容分三块: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 把 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 只对当前面板的显示生效,告警规则看不到它——告警评估拿的是查询原始结果。所以加工口径能下沉到查询层就下沉(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 看全集群,见下一篇。