1. 服务画像概念:定义、核心价值与误差预算关系

1.1 什么是服务画像

服务画像(Service Profile)是对一个在线服务在可观测性维度上的结构化数字描述。它并非简单的拓扑图或依赖关系图,而是一组经过筛选、聚合、带有阈值的指标集合,用于回答三个核心问题:

  • 服务长什么样? —— 服务边界、上下游依赖、关键接口、数据流。
  • 服务健康吗? —— 延迟、错误率、吞吐量、饱和度(USE / RED 方法论)。
  • 服务能承受多大风险? —— 误差预算(Error Budget)的分配与消耗。

在 Prometheus 生态中,服务画像通常表现为一组预定义的 recording rules + alerting rules + dashboard 面板,它们共同构成一个可复用的“服务可观测性模板”。

关键认知: 服务画像不是静态文档,而是动态更新的指标台账。每次发布、扩缩容、故障演练后,画像中的基线指标都应重新校准。
服务画像核心要素结构图 服务画像 服务边界与依赖 RED 指标基线 误差预算台账 告警与 SLO 映射 四个要素共同构成服务的完整可观测性画像

1.2 服务画像在 SRE 中的核心价值

服务画像不是理论概念,而是 SRE 日常工作中可直接操作的决策工具。其核心价值体现在以下四个维度:

价值维度 具体说明 SRE 场景示例
标准化 所有服务使用统一的指标模板,消除“每个团队各自为政”的观测盲区 新服务上线时,直接套用画像模板,5 分钟内完成基础监控接入
可对比 不同服务、不同版本的指标在同一坐标系下对比,快速定位异常 A/B 发布时,对比两个版本的延迟 P99 和错误率变化
可量化 每个服务都有明确的 SLO 目标和误差预算,不再凭“感觉”判断健康度 每月 SLO 回顾会议中,直接展示每个服务的误差预算消耗曲线
可演进 画像随服务架构变化而更新,保持与真实运行状态一致 服务拆分后,自动更新依赖图并重新分配误差预算
实践建议: 在 Prometheus 中为每个服务创建独立的 service_profile 标签,配合 recording rules 自动生成画像指标。例如:service_profile:request_latency_seconds:p99。

1.3 服务画像与误差预算的关系

误差预算(Error Budget)是 SRE 的核心量化工具,定义为:Error Budget = 1 - SLO。例如,SLO 为 99.9% 的服务,其月度误差预算为 0.1%(约 43.2 分钟)。

服务画像与误差预算之间存在双向驱动关系:

  • 画像定义预算分配: 服务画像中的依赖关系、接口权重、流量比例决定了误差预算如何在各组件间分配。核心接口获得更严格的预算,非关键路径可适当放宽。
  • 预算消耗反哺画像更新: 当某个组件的误差预算快速消耗时,说明该组件的画像指标(如延迟基线、错误率阈值)需要重新校准。
服务画像与误差预算双向驱动关系 服务画像 • 服务边界与依赖 • RED 指标基线 • 接口权重与流量 • 告警阈值定义 误差预算 • 预算总量 = 1 - SLO • 按组件分配预算 • 消耗速率监控 • 预算耗尽触发告警 定义预算分配 消耗反哺画像更新 双向驱动:画像决定预算如何分,预算消耗决定画像何时改

1.4 从画像到误差预算台账的映射

在 Prometheus 中,服务画像最终落地为一组误差预算台账指标。以下是典型的映射关系:

画像要素 Prometheus 指标示例 误差预算台账用途
请求延迟基线 histogram_quantile(0.99, ...) 计算“慢请求”消耗的预算比例
错误率阈值 rate(http_requests_total{status=~"5.."}[5m]) 直接计入预算消耗(每笔错误扣减预算)
接口权重 label_replace(..., "weight", "0.3", ...) 加权计算各接口的预算分配额度
依赖健康度 up{job="dependency"} 依赖不可用时,按比例扣减上游服务预算
饱和度水位 rate(node_cpu_seconds_total[5m]) 饱和度超过阈值时,触发预算消耗加速因子
常见误区: 不要将误差预算视为“一次性配置”。服务画像中的基线指标(如延迟 P99)会随流量特征、代码变更、基础设施变化而漂移。建议每两周校准一次画像基线,确保预算分配与实际运行状态匹配。

1.5 本章小结