1. Metric 设计基础

1.1 什么是 Metric

Metric(指标) 是系统在某一时刻或某一时间窗口内可量化的观测数据,通常由 名称、标签(Label)、时间戳 和 数值 四部分组成。它是可观测性三大支柱(Metric、Log、Trace)中最适合做 聚合分析 和 告警阈值判断 的数据类型。

核心特征:Metric 是数值型、可聚合、可降采样、可长期存储的时序数据。它回答的是“系统现在怎么样”和“系统过去一段时间怎么样”的问题。
组成部分 说明 示例
Metric Name 指标名称,唯一标识一类测量 http_requests_total
Labels 维度标签,用于分组和过滤 method="GET", status="200"
Timestamp 数据采集时间点 1710000000
Value 测量数值(整数或浮点数) 1024

1.2 Metric 的四大黄金信号

Google SRE 经典著作《Site Reliability Engineering》中定义了 四大黄金信号(Four Golden Signals),它们是衡量用户侧和系统侧健康度的核心维度:

  1. 延迟(Latency) — 请求处理耗时,区分成功请求与失败请求的延迟。
  2. 流量(Traffic) — 系统承载的请求量或数据吞吐量。
  3. 错误(Errors) — 显式错误(HTTP 5xx)与隐式错误(返回成功但结果错误)。
  4. 饱和度(Saturation) — 资源使用程度,越接近上限越危险。
实战建议:告警规则应优先覆盖四大黄金信号。如果只能选 3 个指标做告警,优先选延迟、错误、饱和度;流量通常用于容量规划而非直接告警。
黄金信号 典型 Metric 示例 聚合方式 告警阈值参考
延迟 http_request_duration_seconds P50 / P90 / P99 分位数 P99 > 500ms 持续 5min
流量 http_requests_total 速率(rate / irate) 同比突增 > 300%
错误 http_requests_total{status=~"5.."} 错误率 = 错误数 / 总请求数 错误率 > 1% 持续 3min
饱和度 node_memory_MemAvailable_bytes 使用率 = 1 - 可用量 / 总量 使用率 > 85%
四大黄金信号关系图 系统健康度 延迟 流量 错误 饱和度 四大黄金信号覆盖了用户可感知的体验(延迟、错误)和系统容量风险(流量、饱和度) 告警降噪的核心策略之一:优先聚合这四类信号,避免重复告警

1.3 Metric 与 Log / Trace 的关系

在可观测性体系中,Metric、Log、Trace 三者并非孤立存在,而是 相互补充、交叉验证 的关系。理解它们的关系是设计高质量告警策略的前提。

维度 Metric Log Trace
数据形态 时序数值 非结构化/半结构化文本 有向无环图(Span 链)
核心用途 聚合监控、告警阈值 故障根因定位、审计 请求链路追踪、性能瓶颈
存储成本 低(可降采样) 高(全文索引) 中(采样存储)
告警适用性 ★★★★★ ★★☆☆☆ ★★★☆☆
典型工具 Prometheus, VictoriaMetrics ELK, Loki Jaeger, Zipkin
常见误区:不要试图用 Log 做高频告警阈值判断。Log 适合关键词匹配和模式发现,但无法高效计算 P99 延迟或错误率。正确的做法是:Metric 负责告警触发,Log 负责告警确认,Trace 负责告警定位。
可观测性三大支柱协作关系 Metric 告警触发 / 聚合分析 Log 根因定位 / 审计 Trace 链路追踪 / 瓶颈分析 典型协作流程 1. Metric 告警触发:错误率 > 1% → 生成告警事件 2. Log 确认:查询对应时间窗口的 error log,确认错误类型 3. Trace 定位:追踪具体请求的 Span 链,找到慢调用或异常节点

1.4 Metric 设计的关键原则

  • 面向用户设计:优先采集用户可感知的指标(如 API 延迟、错误率),而非仅关注基础设施指标。
  • 标签维度可控:避免高基数标签(如 user_id、request_id),防止时序数据库膨胀。
  • 标准化命名:遵循 namespace_measure_unit 格式,例如 http_request_duration_seconds。
  • 聚合粒度分层:原始指标保留高精度(如 10s 粒度),长期存储降采样(如 5min 粒度)。
  • 与告警阈值对齐:每个 Metric 设计时就要考虑“这个指标如果异常,阈值应该设多少”。
降噪前置思考:好的 Metric 设计本身就是告警降噪的第一步。如果指标定义模糊、标签爆炸、聚合粒度混乱,后续的告警规则无论如何优化都会产生大量误报和重复告警。