4558 字 16 分钟阅读
Linux Grafana Dashboard 设计
Linux 主机监控 Dashboard:Grafana 设计说明稿
这一份给 AI Agent 参考,指导其生成符合规范的 Linux Grafana Dashboard 面板,确保布局紧凑、结构稳定、颜色一致。
成品示例:

1. 目的与事实来源
本文提供适用于物理机、虚拟机、普通服务器及兼任网关的 Linux 主机的 Grafana 设计规范,供 AI Agent 尽量一次实现结构清晰、风格统一、指标可信的监控面板,而不是仅做到“查询有数据”。
- 设计基线:蓝紫配色、紧凑总览、双列趋势、每件硬件一个代表温度、表格自适应宽度。
- 本文是设计规范,不是 Dashboard 配置副本,不证明每项已经发布或完成视觉验收。
- 权威源是目标环境的原生 Dashboard 定义和实际 Grafana 运行态;先定位管理方式,不预设配置路径、数据源UID或主机标签。
- 部署、采集依赖、执行状态与回滚信息保存在相应项目的运维入口和变更记录中,不混入通用设计规范。
- 新建时使用可辨识的主机标题和稳定UID;修订时保留既有UID与链接。默认 Today so far(
from=now/d,to=now,browser时区)、30 秒刷新。仅总览与系统健康默认展开,其余启用的分区默认折叠。 - 管理路径是定位线索,不是连接或写入授权;先区分客户端、容器与宿主,核实实际目标,遵循各自 AGENTS.md。
2. 核心设计思想
紧凑趋势优先、结构稳定、颜色区分对象而非健康等级。
- 总览回答“这段时间总体怎样”;趋势回答“什么时候发生变化”;表格回答“具体哪个对象”。不要让三个层次重复占用首屏。
- 使用大数字+面积 Sparkline、两列趋势和一致图表高度;不要以新增能力为理由不断加卡。
- 温度按物理硬件展示,不把同一设备的多个接口、子传感器全部铺进图例。
- 日常摘要放前面,深入诊断放存储详情;监控能力不能因为重排而静默丢失。
- 缺数不是零、collector up 不是业务健康、接口存在不是网络连通;没有适用的硬件或业务,不创建占位面板。
基础监控与可选模块
| 层级 | 内容 | 启用条件 |
|---|---|---|
| 基础 | CPU、内存/Swap、Load1、磁盘I/O、文件系统、主接口收发与错误/丢包 | 所有Linux主机按实际可用指标设计;不存在的Swap不强行造曲线 |
| 可选:硬件 | CPU、磁盘、GPU、网卡等代表温度,SMART链路/命令错误 | 硬件与驱动实际暴露指标;虚拟机通常不具备 |
| 可选:容器 | 容器CPU、内存、八列概览 | 运行容器且已有合适采集器 |
| 可选:存储深化 | 文件系统分配、设备错误、IOPS、延迟、繁忙度、PSI | 根据文件系统、磁盘和运维需求选择;不强制要求Btrfs |
| 可选:网关深化 | WAN/LAN、代理流量、网络节点/AP、HTTP/DNS探测、客户端/DHCP等 | 主机实际承担路由、代理、网络出口等职责且有采集需求 |
普通Linux服务器保留主接口的基础流量监控即可,没有必要为了完整套用模板而部署网关采集器或建设细粒度客户端流量监控。缺失的可选模块应整区省略并重排,不留下空图或伪造零值。
禁止的反例
- 第一屏一大片磁盘温度数字,其他卡片被挤到边缘。
- 总览关闭 Sparkline,变成没有时间上下文的孤立数字。
- 红/黄/绿线条,默认 Grafana palette-classic 或阈值配色造成颜色漂移。
- 网络探测状态采用“彩色方块+成功/失败文字”;不得以 stat、status history、彩色表格背景或 pill 变相恢复。
- 一个饼图或普通容器趋势独占整行导致信息密度过低。
- 标题塞满口径说明、长 URL、单位解释;细节放 description 悬停提示。
- 复制别的主机的instance、网口名、温度芯片标签或缺失客户端指标,或用
or vector(0)隐藏 No Data。
3. 布局骨架与尺寸
使用 Grafana 24 列网格:半宽 w=12、整行 w=24、四卡 w=6、三卡 w=8。按上一行最大高度推进 y,不在旧位置上插入后造成重叠。
下面是能力完整时的参考骨架,不是所有服务器必须具备的固定面板清单。有条件的项目应按上面的启用规则裁剪。
总览
CPU平均 内存平均 CPU平均温度* 主存储平均温度*
Load1平均 主接口流量总量 磁盘读写
系统健康
CPU使用率 内存 / Swap 使用率
硬件温度趋势:每件硬件一个代表温度(整行)
磁盘I/O读写折线 SMART错误* 或 文件系统使用率
容器资源(可选)
容器CPU占用率 容器内存占宿主机比例
容器概览:固定八列、自适应铺满宽度(整行)
基础网络(普通服务器)
主接口接收 / 发送 网口错误 / 丢包
网关深化(可选;与基础网络去重)
WAN流量 LAN / 代理流量
网络节点/AP延迟 内网 / 公网RTT
HTTP / DNS延迟 网口错误 / 丢包
存储详情(按需)
文件系统使用率 文件系统特有分配指标*
设备 / 文件系统错误* 磁盘IOPS
平均I/O延迟 磁盘繁忙度 / I/O PSI
* 表示依赖实际指标。无温度的虚拟机可用文件系统使用率、运行时长等有价值指标替换总览温度卡,或减少卡片后等宽重排;不为了七张卡强行保留空温度。主接口不一定是WAN,必须明确实际接口身份并避免重复统计bridge/VLAN等上下层流量。
- 分区标题高度
h=1;总览两行各h=5。 - 系统第一、三行
h=7,温度整行h=8。 - 容器趋势
h=8,表格h=11;表格内部滚动是正常行为,不承诺所有行同时可见。 - 基础网络默认一行两图;启用完整网关模块时采用三行双列,每张
w=12,h=7,缺采集项目可裁剪并重新配对,不扩展成多个整行图。 - 存储详情每行两张、
h=7。增加监控内容须重新评估布局,而不是无限延长页面。
默认时间与折叠状态
time={"from":"now/d","to":"now"},保持timezone=browser,今天零点以查看者浏览器时区解释;不要误改为过去24小时。- 旧链接含
from=now-6h等显式参数时会覆盖保存默认值。验收新默认使用无from/to参数链接,或明确指定from=now/d,不以旧链接仍显示六小时判定配置失败。 - 默认展开:总览、系统健康;基础网络、容器、网关深化、存储详情等其他启用分区默认折叠。
- 对使用经典JSON row布局的Dashboard:展开row使用
collapsed=false,其子面板紧跟row放在顶层;折叠row使用collapsed=true,完整子面板放进该row的panels,不再保留顶层副本。其他schema按目标版本的原生布局实现,不机械套用字段。 - 仅设置collapsed=true而不移动子面板不能作为合格实现;不得丢失图表、查询、颜色、表格transformations或ID。展开后仍采用上方固定布局。
- 折叠后重排顶层row的y,嵌套子面板保留相对布局;隐藏子面板不与其他折叠row做全局可见网格冲突判断,分别检查可见顶层和每组展开布局。
- 改已有Dashboard时,建立面板ID/查询清单核对迁移前后,不将某台主机的面板数量固化成通用要求。经过明确方案裁剪的可选模块不应被“面板数量必须不变”强制恢复。
4. 统一视觉语言
固定配色池:#5794F2、#B877D9、#8F9BFF、#D987C5、#73A5C6、#C0B7EB、#B7C2D5、#6E79B7(蓝、紫、淡粉、银灰)。
- 字段默认
color.mode=fixed,动态系列用显式 override;不要依赖自动轮换到红黄绿的色板。 - 同一对象在相关面板保持同色,尤其容器 CPU 与内存两图必须使用同一名称→颜色映射。
- 同一磁盘的读/写可同色,以实线/虚线区分,不靠危险等级颜色区分。
- 趋势线宽 1px、填充透明度约 4%、线性插值、不显示点、
spanNulls=false。 - 紧凑底部图例默认 list+mean/max;必要的高密度数值用表格,不任意切成长图例。
- 单位必须正确:百分比
percent、温度celsius、流量总量bytes、网络速率bps、磁盘吞吐Bps、RTTms。 - 不额外改 Grafana 全局主题,不以隐藏数据、弱化失败状态换取好看。
5. 总览卡的实现与口径
- 总览统计卡使用
type=stat、graphMode=area和range query,不能仅设置instant后期待历史Sparkline。能力完整时推荐七卡4+3布局,裁剪后按剩余卡数等宽配对。 - CPU、内存、CPU温度、NVMe温度、Load1 卡对选定范围采样点使用
mean;面积图展示实际趋势。 - CPU 百分比从 idle counter 的 rate 计算;内存为
1-MemAvailable/MemTotal;Load1 是原始系统负载,非百分比。 - 网络累计使用选定主接口的字节counter之
increase;网关才按实际WAN接口命名,不预设PPP。磁盘总读写只聚合目标底层盘,不叠加分区、loop或映射设备;虚拟机按其实际虚拟块设备核实。 - 累计卡使用
lastNotNull读取increase(...[$__range])的末值。若这条表达式同时作为 range query,Sparkline 是等长滚动窗口增量,不是从所选起点开始累计的进度;边界外推/缺口也可能影响结果,必须写明。 - 总览不重复堆放下方趋势已充分表达的卡片;运行时长可在无硬件温度时作为替代,不强制放入已有完整七卡的布局。
6. 温度:每个硬件只保留一个代表源
“最准确”在这里指经过语义核实、最适合作为整件硬件摘要的原生报告值,不声称做过物理校准。
| 硬件 | 代表温度规则 | 不应采用 |
|---|---|---|
| CPU | 经实际hwmon确认的原生控制/封装温度,如AMD k10temp或Intel coretemp的对应标签 | 所有非NVMe温度的最大值,跨型号照搬标签 |
| 每块NVMe | 原生 Composite 综合温度,按实际sensor_label确认;不假定所有设备的temp1含义相同 |
子传感器平均、任选最高值、Composite和SMART重复展示 |
| 每块机械盘 | SMART temperature_type=current,每设备一条 |
汇总成所有盘平均后丢掉单盘信息 |
| GPU | GPU的edge/原生代表温度,按标签确认 | 无语义取全部传感器最大值 |
| 每块网卡 | 有驱动原生温度时只选一个可关联到物理设备的hwmon或thermal接口;无接口则省略 | 同一网卡重复展示多个采集接口,假定所有网卡都有温度 |
确认流程:读取窄范围sysfs的name、type、temp标签和数值,核对exporter labels与物理设备身份;比较重复接口,注意分次采样可能温度不同,不能用一次数值相等证明物理同源。选择thermal或hwmon的理由是报告语义与身份清晰,不断言另一接口失准。
新设备到来时按其独立硬件身份增加一条;zone编号、芯片标识不是永久稳定ID,换硬件或重启枚举变化时重新核对,不使用全机 max() 掩盖错误标签。代表源缺失须显式暴露,不能静默回退到不相关温度。
缺少硬件温度时的边界
没有对应hwmon/thermal入口,或原生只读统计不暴露温度,只能得出“当前采集链路无法提供温度”,不能断言硬件内部永远没有传感器。物理机也可能缺部分硬件温度,虚拟机可能全部缺失,此时省略相关图表或按方案替换,不把宿主机温度误作虚拟机自身温度。
更换内核/驱动/硬件后重新核查原生只读接口;需要安装工具、换驱动、加载模块、读未经确认的寄存器或新增采集时,先单独评估与授权,不因想补一条图线扩大系统变更。
7. 容器图与八列表格(可选)
不运行容器的主机省略本区;不同容器运行时使用匹配的采集源,不把cAdvisor/Docker标签模式当作所有Linux主机的通用事实。
八列及顺序固定:容器、镜像、运行时长、CPU、内存 Working Set、内存占宿主机、接收速率、发送速率。
- CPU 为单核口径:100%=一个逻辑核,可能超过100%;内存折线/百分比列为 Working Set / 宿主机物理内存,不是容器配额占用率。
- 对cAdvisor/Docker实现,展示当前可观测容器,含监控组件,不按某台主机的名称前缀静默排除;不宣称包含停止容器或其他虚拟化实例。
- 先核对实际cgroup路径,再筛选容器根cgroup。对同名容器选择最新启动实例,重复重启标签序列不能简单相加。
- “按名称连接/选择最新实例”适用于名称在目标主机内唯一的Docker实现;其他运行时须按实际唯一身份连接,如namespace/pod/container或容器ID,不能把不同实例的同名容器合并。
- 默认缺数保留空白,不伪造零;同一实例重启时旧rate样本可能暂时影响去重结果,不能宣称完全精确。
- host-network容器可能共享宿主机流量,接收/发送列不能相加用于业务归因。
- 当前转换顺序:instant table查询 → 按名称
outerTabular外连接 → 只保留八个字段 → organize排序/中文重命名。字段名须按实际Grafana数据帧核实,查询有数据不代表转换成功。 - 自适应铺满宽度:清除 defaults及每列override中的
custom.width;让Grafana按panel实际宽度分配。设置custom.minWidth=80作为可读性下限,不是固定列宽;表格panel保持w=24。窄屏小于八列最小宽度时允许横向滚动,不以隐藏列达到“不滚动”。 - 保留header、紧凑行高、筛选与CPU降序;不启用彩色状态背景。单位和小数位override必须保留。
8. 基础网络与可选网关深化
普通Linux服务器只需主接口流量及错误/丢包等基础观测。网关深化明确为可选项,不是达成本文设计的前提。
- 目标标签必须绑定选定主机的真实采集目标,不能遗留另一台主机的实例,也不能无条件汇总多主机。
- 主接口明确用宿主机接收RX/发送TX命名,不与客户端上传/下载方向混淆。仅启用网关模块时区分WAN、LAN、桥接与代理流量;代理指标单独显示,不能重复累计成LAN总量。
- ICMP RTT使用
probe_icmp_duration_seconds{phase="rtt"}*1000,以and on(job,instance) probe_success==1过滤失败点。探测耗时不等于真实RTT。 - 无数据不填零;网口错误/丢包有序列且为零才代表该窗口未观察到错误。HTTP/DNS耗时是探测总耗时,不直接代表服务业务成功。
- AP/网络节点探测、逐客户端流量、DHCP租约、拨号事件、代理细分流量都是网关模块的进一步可选能力,不要求全部上线。仅按业务角色和运维需求选择;缺采集不复制空面板,普通服务器无需新增这些服务。
- 新增或恢复采集是独立授权任务,不在UI设计中擅自创建服务或修改防火墙。
9. AI Agent 一次实现工作流与验收
- 读取本文、目标项目运维入口与适用规则;核实物理机/虚拟机、容器运行时及是否承担网关职责,选择基础与可选模块。核实源/live差异及并发修改,保留稳定UID;按已批准设计设置时间与刷新。
- 有界探查需要的metric与labels;区分实时数据和历史名称,核实硬件代表传感器、容器去重与表格字段。
- 在临时目录生成草案:一次统一布局、palette、legend、单位和description,避免逐块补丁式拼接。不要复制凭证、项目树或完整配置到本仓库。
- 静态断言:适用schema下递归核对ID、无非预期图表丢失;可见网格和各组展开布局无重叠/越界;所有总览卡有range Sparkline;系统与网络布局符合所选模块;启用容器表时恰好八列、无固定列宽;无红黄绿线、状态方块;温度按物理对象唯一;默认now/d,仅总览/系统健康展开。不要为满足原模板的数量而补回不适用模块。
- 查询验证:即时结果、关键完整窗口趋势、容器每个查询名称唯一与外连接后覆盖;零值与No Data区分。测试不能因不通过而删断言,应先分析语义或采集波动。
- 列出精准写入路径、备份、发布命令及回滚,按目标运维规则取得相应授权;保留原属主/权限;源哈希变化或回滚点冲突即停止。文件provider优先原子发布与自动重载;其他管理方式使用其原生流程,不预设必须重启服务。
- 等待重载,独立读取live验证与源一致,检查Grafana健康及有限日志;同步项目README和原变更记录,不复制另一份配置权威。
- 必须区分后端验证与视觉验收:从不覆盖默认时间的链接检查Today so far、初始折叠状态,展开每组检查图表;核实实际Sparkline、八列表格、宽度利用与图例。只操作获准agent标签页;无登录态时不取凭证或擅自登录,请用户截图或自行登录。
- 如实报告未验证/阻塞。用户认可外观可记录为用户反馈,但不能替代agent对新变更的实际验证。没有commit/merge/push授权时不执行。
参考:Grafana Table 配置、Grafana 数据转换。
在线latest文档用于理解选项,具体字段与行为仍需匹配目标版本验证。