Skip to content
返回运维与 SRE

仪表盘

构建值班工程师凌晨 3 点也能读懂的仪表盘 — 快、直观、面向行动。

为什么

仪表盘是决策工具,不是数据堆。凌晨 3 点宕机时,工程师只有几秒在噪声中定位信号,而 30 个面板的虚荣图墙每次都会让你多花几分钟 MTTR。好仪表盘每个面板只回答一个问题,把最重要信号放左上(视线落点),颜色只表示状态(绿/黄/红),并把每个面板链接到它变红时该怎么做的 runbook。把仪表盘当艺术项目的团队最终得到压力下没人用的漂亮图墙,值班工程师反而盯着终端里的原始 Prometheus 查询。

何时使用

指标埋点就位之后。若值班工程师在事件中常开终端而非仪表盘,或某仪表盘有 >20 个面板,则需重建。

如何做

1. 定义受众和问题
   - 值班仪表盘:"服务健康吗?不健康的话在哪?"
   - 容量仪表盘:"我们接近极限了吗?"
   - 业务仪表盘:"用户在成功吗?" — 受众不同,面板不同

2. 布局跟随眼动:左上 = 最重要
   - 第 1 行:黄金信号(RED 摘要 3 个大 stat 面板带阈值)
   - 第 2 行:延迟热力图 + 按路由错误率
   - 第 3 行:依赖(DB、缓存、下游服务)健康
   - 第 4 行:饱和信号(CPU、内存、队列深度、连接池)

3. 每个面板一个问题
   - 坏:"orders 服务所有指标"(堆)
   - 好:"POST /api/orders 5m 内错误率"(决策)
   - 若无法把面板表述成一个问题,删掉它

4. 颜色 = 状态,非装饰
   - 绿/黄/红阈值绑定 SLO 燃烧率
   - 不要彩虹配色,不要 20 条线的图加图例
   - 永远绿色的面板是删除候选

5. 每个面板链接 runbook
   - 面板标题或描述链接到"变红时怎么做"的 runbook
   - 包含查询和告警名,让工程师能深入调查

6. 用真实事件测试
   - 下次宕机时,观察值班工程师用它
   - 若他们离开仪表盘去开终端,说明仪表盘失败了 — 修它

示例

# Grafana 仪表盘即代码(JSON 入 Git)
{
  "title": "Orders 服务 — 值班",
  "panels": [
    { "title": "请求/秒",  "gridPos": {"h":4,"w":8,"x":0,"y":0},
      "targets": [{"expr": "sum(rate(http_requests_total{service='orders'}[5m]))"}] },
    { "title": "错误 %", "gridPos": {"h":4,"w":8,"x":8,"y":0},
      "thresholds": {"steps":[{"color":"green"},{"color":"red","value":1}]},
      "targets": [{"expr": "sum(rate(http_requests_total{service='orders',status=~'5..'}[5m])) / sum(rate(http_requests_total{service='orders'}[5m])) * 100"}] },
    { "title": "p95 延迟", "gridPos": {"h":4,"w":8,"x":16,"y":0},
      "targets": [{"expr": "histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket{service='orders'}[5m])) by (le))"}] }
  ],
  "links": [{"title": "Runbook:orders 高错误率", "url": "https://runbooks/operate/orders-high-error"}]
}
# 经验法则:若一个面板移动后不影响行为,它是装饰 — 删掉它。

常见问题

  • ⚠30+ 面板、加载 30 秒的仪表盘 — 值班工程师放弃它直接查 Prometheus,失去意义。
  • ⚠什么都用折线图,而热力图和 stat 面板传达状态更快 — 一条平在 50ms 的 p99 线对尾部分布毫无说明。
  • ⚠无 runbook 链接 — 红面板没有"怎么做"链接,迫使工程师凌晨 3 点重新发明调查,推高 MTTR。
  • ⚠颜色用于装饰(彩虹序列)而非状态 — 工程师在彩色线海中找不到红色信号。

最佳实践

  • ✓把仪表盘当代码:Grafana JSON 入 Git,PR 审查变更,模板版本化使改进传播到所有服务。
  • ✓值班仪表盘上限 12 个面板;需要更多则拆成第二个仪表盘从第一个链接,使主仪表盘 <3 秒加载。
  • ✓每个面板必须链接 runbook 且阈值绑定 SLO — 无阈值的面板是图,不是监控信号。
  • ✓每次事件后做"仪表盘复盘":值班工程师是从仪表盘还是终端找到原因?修失败的那个。