监控与仪表盘

指导 Agent 从用户旅程提炼 SLI、设定 SLO 与错误预算,并配置 RED/USE 类指标、日志关联与 Grafana 面板模板即代码。

SKILL 要求告警包含运行手册链接、严重级别与静默规则;避免「仅图表无阈值」或重复告警风暴;burn rate 多窗口若采用需写清参数来源。

指标命名遵循 Prometheus 约定(单位后缀、_total 计数器);histogram bucket 与 SLO 查询对齐;高基数标签禁止项列明。

分布式 trace 与日志 trace id 关联;采样率在成本与排障之间的默认策略;仪表盘变量与多环境 datasource 约定。

观测设计主流程

  [ 用户旅程 / 关键路径 ]
        │
        ▼
  ┌─────────────┐     候选 SLI:可用性、延迟分位、正确率、吞吐
  │ SLI → SLO    │──── 错误预算窗口与政策(季度 / 滚动)
  └─────────────┘
        │
        ▼
  ┌─────────────┐     RED / USE 指标映射 + 日志 / Trace 关联字段
  │  指标与采集  │──── 命名、bucket、标签白名单与基数审查
  └─────────────┘
        │
        ▼
  ┌─────────────┐     按角色分行:on-call / 产品 / 管理;变量与环境
  │ Grafana 面板 │──── JSON 导出或 Terraform / 代码库路径
  └─────────────┘
        │
        ▼
  ┌─────────────┐     阈值、路由、静默、Runbook;burn rate 参数写明
  │  告警与复盘  │──── 预算耗尽 → 发布冻结或与发布技能联动
  └─────────────┘

RED 与 USE 列指标

面向微服务或请求驱动路径时优先补齐 RED;面向主机、队列、数据存储容量时叠加 USE。Agent 输出 SKILL 时应写明指标与 SLO 查询的对应关系,避免重复图表。

RED:请求率、错误与延迟

  • Rate:每秒请求 / 任务数;与容量、限流、Autoscale 对齐。
  • Errors:HTTP 5xx、业务失败码、超时;分子分母与 SLO 一致。
  • Duration:p50 / p95 / p99;histogram bucket 与告警 PromQL 共用。

USE:利用率、饱和度与错误

  • Utilization:CPU、内存、连接池占用比例;区分实例与集群。
  • Saturation:队列深度、等待时间、线程池排队的「满了吗」信号。
  • Errors:设备 / 驱动 / 磁盘 IO 错误等底层失败(与 RED 错误互补)。

Golden Signals 标准面板布局(Grafana JSON 结构示例):

// Grafana Dashboard JSON 片段:Golden Signals 布局
// 包含 SLO 面板(availability)的完整配置
{
  "title": "payment-svc — Golden Signals",
  "uid": "payment-golden-signals-v1",
  "tags": ["payment", "slo", "oncall"],
  "templating": {
    "list": [
      {
        "name": "env",
        "type": "custom",
        "options": [{"value": "prod"}, {"value": "staging"}],
        "current": {"value": "prod"}
      }
    ]
  },
  "panels": [
    {
      "title": "Availability SLO (99.9%)",
      "type": "stat",
      "gridPos": {"x": 0, "y": 0, "w": 6, "h": 4},
      "targets": [{
        "expr": "sum(rate(http_requests_total{job='payment-svc',env='$env',code!~'5..'}[28d])) / sum(rate(http_requests_total{job='payment-svc',env='$env'}[28d])) * 100",
        "legendFormat": "Availability %"
      }],
      "fieldConfig": {
        "defaults": {
          "thresholds": {
            "steps": [
              {"value": 0, "color": "red"},
              {"value": 99.5, "color": "yellow"},
              {"value": 99.9, "color": "green"}
            ]
          },
          "unit": "percent"
        }
      },
      "options": {"reduceOptions": {"calcs": ["lastNotNull"]}}
    },
    {
      "title": "Request Rate (RPS)",
      "type": "timeseries",
      "gridPos": {"x": 6, "y": 0, "w": 9, "h": 4},
      "targets": [{
        "expr": "sum(rate(http_requests_total{job='payment-svc',env='$env'}[5m])) by (code)",
        "legendFormat": "HTTP {{code}}"
      }]
    },
    {
      "title": "Latency p99 vs SLO (200ms)",
      "type": "timeseries",
      "gridPos": {"x": 15, "y": 0, "w": 9, "h": 4},
      "targets": [{
        "expr": "histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket{job='payment-svc',env='$env'}[5m])) by (le))",
        "legendFormat": "p99 latency"
      }]
    }
  ]
}

SLI、SLO 与错误预算

切换下列焦点时,SKILL 正文应把对应段落写全:测量窗口、合规口径、以及多窗口 burn rate 是否与 Google SRE 约定一致。

SLI 候选与测量窗口

从旅程映射 SLI:成功请求比例、延迟分位、数据新鲜度等;写清聚合窗口(5m / 1h)与「好的」事件定义。histogram le bucket 须覆盖 SLO 阈值,避免外推误差。

# Availability SLO:Prometheus Query(28天滚动窗口)
# 定义:成功请求 / 总请求(排除 4xx 客户端错误)
sum(rate(http_requests_total{job="payment-svc",code!~"[45].."}[28d]))
/
sum(rate(http_requests_total{job="payment-svc"}[28d]))

# 等价 Recording Rule(减少查询负载)
# prometheus rules:
- record: job:slo_availability:ratio_rate28d
  expr: |
    sum(rate(http_requests_total{job="payment-svc",code!~"[45].."}[28d]))
    / sum(rate(http_requests_total{job="payment-svc"}[28d]))

# Latency SLO:p99 < 200ms(直方图查询)
histogram_quantile(0.99,
  sum(rate(http_request_duration_seconds_bucket{job="payment-svc"}[5m]))
  by (le)
) < 0.2  # 200ms SLO 阈值

与「告警与值班响应」技能对齐:每条 SLO 相关告警绑定 Runbook、严重级别与静默规则;面板链接嵌入值班手册占位。

告警、面板分层与基数

  • 面板:按角色(on-call、产品、管理)分层,避免单屏信息过载。
  • 导入导出:Grafana JSON 或 Terraform provider 管理路径。
  • 事后:错误预算耗尽时的发布冻结或与发布技能联动的流程。
  • 高基数维度(如未脱敏 user_id)列入禁止项;允许维度需在 SKILL 中显式审批。

面板标题 slug 导出

根据各带 .dash-slug-panel 的区块内标题生成稳定 slug(优先 data-dash-slug,否则从标题中的拉丁字符推导),便于写入 IaC、Grafana uid 前缀或 SKILL 附录。

中文标题若无拉丁片段,请直接在 HTML 的 data-dash-slug 中维护机器可读 id;生成结果可作为团队约定表粘贴到仓库文档。

---
name: monitoring-dashboards
description: SLI/SLO、告警与 Grafana 面板设计
model: claude-sonnet-4-5
---

# 步骤
steps:
  1. 用户旅程映射 SLI(availability/latency/correctness)
  2. 设定 SLO 目标值与错误预算窗口(28天滚动)
  3. 设计 Prometheus 指标命名(单位后缀/_total计数器)
  4. 定义 histogram bucket(覆盖 SLO 阈值,避免外推误差)
  5. 配置 Recording Rules(减少查询复杂度)
  6. 设计 Grafana 面板(Golden Signals: Rate/Errors/Duration/Saturation)
  7. 配置 Burn Rate 多窗口告警(1h+6h 组合)
  8. 设置告警路由与 Runbook 链接

# 指标命名规范
naming_convention:
  counter: http_requests_total(_total后缀)
  gauge: process_memory_bytes(单位后缀)
  histogram: http_request_duration_seconds(秒为单位)
  forbidden_labels: [user_id, email, ip_address]  # 高基数禁止项

返回技能库 更多技能入口