4. 错误(Errors)指标详解:错误率定义、HTTP错误码分类、业务错误码、错误预算概念、阈值设定

错误(Errors)是黄金指标的第二个核心支柱。如果说延迟衡量的是“快不快”,那么错误衡量的就是“对不对”。在可观测性体系中,错误不仅仅是HTTP 500状态码,它涵盖了从基础设施到业务逻辑的每一个可能出错的环节。本节将系统性地拆解错误指标的定义、分类、预算机制与阈值设定方法。

4.1 错误率定义:从单点故障到全局视角

错误率是衡量系统健康度的关键比率指标。其核心定义公式为:

错误率 = (错误请求总数 / 总请求数) × 100%

在实际SRE实践中,错误率的计算粒度决定了告警的灵敏度。常见的错误率计算维度包括:

  • 全局错误率:所有服务实例的聚合错误率,用于宏观健康度评估。
  • 分实例错误率:单个Pod或节点的错误率,用于定位故障域。
  • 分接口错误率:特定API端点的错误率,用于精细化监控。
  • 分用户错误率:特定用户群体或租户的错误率,用于SLA差异化保障。
实践建议:在定义错误率时,务必明确分母是“所有请求”还是“有效请求”。排除健康检查(Health Check)和爬虫流量,避免错误率被非业务流量稀释。

4.2 HTTP错误码分类:标准协议层的错误语义

HTTP协议定义了清晰的状态码分类,这是错误指标最直接的来源。SRE需要理解每一类状态码的业务含义,并据此设计告警规则。

状态码范围 分类 典型错误码 SRE关注点
1xx 信息响应 101 (Switching Protocols) 通常不纳入错误率计算,但WebSocket升级失败需关注
2xx 成功 200 (OK), 201 (Created) 正常业务流量,错误率计算中的分母
3xx 重定向 301 (Moved Permanently), 302 (Found) 异常重定向循环(如302风暴)需单独告警
4xx 客户端错误 400 (Bad Request), 401 (Unauthorized), 403 (Forbidden), 404 (Not Found), 429 (Too Many Requests) 区分“客户端可控”与“服务端可控”错误;429通常需要限流告警
5xx 服务端错误 500 (Internal Server Error), 502 (Bad Gateway), 503 (Service Unavailable), 504 (Gateway Timeout) 核心告警指标,直接反映服务可用性
常见误区:不要将所有4xx错误都视为“客户端问题”而忽略。例如,频繁的401可能意味着认证服务故障;大量的404可能暗示路由配置错误或服务发现失效。建议对4xx错误按子类进行分桶监控。

4.3 业务错误码:超越HTTP协议的应用层语义

HTTP状态码只能表达传输层的成功或失败,无法描述业务逻辑的成败。例如,一个支付接口返回HTTP 200,但响应体中包含“余额不足”的业务错误码。因此,业务错误码是错误指标体系中不可或缺的一环。

业务错误码的设计原则:

  • 唯一性:每个错误场景有唯一的错误码,便于快速定位。
  • 可枚举:所有业务错误码应在文档中明确列出,避免出现“其他错误”的兜底码。
  • 分级:按严重程度分为WARN(警告)、ERROR(错误)、FATAL(致命)。

典型的业务错误码分类示例:

错误码范围 业务域 示例 告警级别
1000-1999 用户认证 1001: 过期, 1002: 密码错误 WARN
2000-2999 订单系统 2001: 库存不足, 2002: 重复下单 ERROR
3000-3999 支付系统 3001: 余额不足, 3002: 支付超时 ERROR
9000-9999 系统内部 9001: 数据库连接失败, 9002: 缓存穿透 FATAL
// 业务错误码响应体示例(JSON)
{
  "code": 2001,
  "message": "库存不足",
  "severity": "ERROR",
  "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}

4.4 错误预算概念:可用性与迭代速度的博弈

错误预算(Error Budget)是Google SRE提出的核心管理概念,它将可用性目标转化为可量化的“错误容忍度”。

核心公式:

错误预算 = 1 - 可用性目标(SLO)
例如:如果SLO为99.9%,则错误预算为0.1%(即每月约43分20秒的不可用时间)

错误预算的消耗与燃尽:

  • 每次发生错误(5xx或业务FATAL错误)都会消耗错误预算。
  • 当错误预算消耗超过阈值(如剩余不足20%),应触发告警并限制高风险发布。
  • 当错误预算耗尽,应触发“冻结期”,停止所有非必要变更,全力修复稳定性。
关键认知:错误预算不是用来“节省”的,而是用来“投资”的。只要预算充足,团队可以大胆进行功能迭代和架构升级;预算紧张时,则优先偿还技术债务。这种机制将稳定性从“约束”转化为“资源”。
错误预算生命周期与燃尽机制 SLO目标 99.9% 可用性 错误预算 0.1% 容忍度 错误消耗 5xx + 业务错误 预算充足 > 50% ← 上一章 📖 返回目录 下一章 →