2. SLI 采集链路全景:从用户请求到指标落库的端到端链路拆解、关键节点识别

SLI 采集链路并非单一的数据管道,而是一条从用户真实请求触发,经过多层中间件、应用代码、采集代理、聚合处理,最终写入存储系统的完整数据流。任何一个环节的延迟、丢数或格式错误,都会直接污染 Error Budget 台账的准确性。本节将逐层拆解这条链路,并识别出每个阶段的关键节点与风险点。

2.1 端到端链路全景视图

下图展示了从用户请求到 SLI 指标落库的完整数据流,包含 6 个核心阶段:

SLI 采集链路全景图 SLI 采集链路全景:从用户请求到指标落库 ① 用户请求 ② 网关 / LB ③ 应用服务 ④ 采集代理 ⑤ 聚合层 ⑥ 存储 / TSDB ⚠ 关键风险节点 • 阶段③→④:应用内埋点与采集代理之间的协议转换 • 阶段④→⑤:代理端缓冲与批量发送策略 • 阶段⑤→⑥:聚合层去重与降精度逻辑 典型端到端延迟:50ms ~ 5s(取决于采样频率与聚合窗口) 数据流方向:请求 → 指标 → 存储

2.2 各阶段关键节点与风险识别

每个阶段都包含若干关键节点,这些节点是 SLI 数据质量与延迟的瓶颈所在。下表逐一列出各阶段的核心节点、典型技术选型及常见问题:

阶段 关键节点 典型技术选型 常见问题
① 用户请求 请求入口、HTTP 头、Trace ID 生成 浏览器、移动端 SDK、API 网关 请求被 CDN 或 WAF 拦截;Trace ID 丢失
② 网关/LB 请求路由、限流、熔断状态 Nginx、Kong、AWS ALB 网关自身延迟未计入 SLI;限流后无指标输出
③ 应用服务 业务逻辑、DB 查询、RPC 调用 Java/Go/Python 微服务 埋点位置错误(如将重试计入首次请求)
④ 采集代理 指标格式化、本地缓冲、协议转换 Prometheus Client、Telegraf、OTel Collector 缓冲溢出丢数;时间戳精度丢失
⑤ 聚合层 数据去重、降采样、窗口聚合 Prometheus Server、Thanos、VictoriaMetrics 去重规则错误导致重复计数;降采样丢失 P99 精度
⑥ 存储/TSDB 写入分片、索引构建、压缩 Prometheus TSDB、InfluxDB、ClickHouse 写入背压导致数据延迟;压缩后查询精度下降

2.3 关键节点深度拆解:应用内埋点与采集代理

在全部 6 个阶段中,阶段③→④(应用内埋点到采集代理) 是 SLI 数据失真的最高发区域。以下拆解该子链路的典型流程:

应用内埋点到采集代理子链路 应用内埋点 → 采集代理 子链路拆解 业务代码埋点 指标对象构建 本地环形缓冲 Protobuf/JSON 序列化 ⚠ 该子链路常见问题 1. 埋点位置错误:将重试、排队时间计入 SLI,导致延迟虚高 2. 环形缓冲溢出:高并发下缓冲写满,丢弃最旧指标,造成 P99 失真 3. 序列化精度丢失:浮点数截断或时间戳舍入到秒级,影响 Error Budget 计算

2.4 关键节点识别清单

基于上述链路拆解,SRE 团队应在日常巡检中重点监控以下 8 个关键节点:

  1. 请求入口 Trace ID 生成 — 确保全链路可追踪,否则无法关联 SLI 与具体请求。
  2. 网关限流/熔断状态输出 — 限流后的请求应标记为“被拒绝”,而非直接丢弃。
  3. 应用内埋点位置 — 必须在业务逻辑完成后、返回响应前采集,避免计入重试或排队时间。
  4. 本地缓冲水位 — 监控缓冲使用率,超过 70% 应触发告警,防止溢出丢数。
  5. 序列化协议一致性 — 采集代理与应用之间的 Protobuf schema 必须版本对齐。
  6. 聚合层去重窗口 — 去重窗口过小会导致重复计数,过大则增加延迟。
  7. 降采样策略 — 对于 P99/P95 等分位数指标,应保留原始精度或使用 T-Digest 算法。
  8. TSDB 写入背压 — 写入队列积压超过 10 秒时应触发降级或扩容。
实践建议: 在每个关键节点插入“探针指标”(如 sli_collect_latency_ms、sli_buffer_drop_total),用于监控采集链路自身的健康度。这些探针指标应独立于业务 SLI 管道,避免循环依赖。

2.5 链路延迟预算分配参考

端到端 SLI 采集延迟直接影响 Error Budget 的实时性。以下是一个典型的高 SLA 服务(99.99%)的延迟预算分配参考:

阶段 预算延迟 占比 说明
应用内埋点 < 10 ms 5% 埋点代码应无阻塞,异步写入缓冲
本地缓冲与序列化 < 50 ms 25% 批量序列化,减少锁竞争
网络传输 < 30 ms 15% 内网专线,避免跨 AZ 传输
聚合层处理 < 60 ms 30% 去重 + 降采样 + 窗口聚合
TSDB 写入 < 50 ms 25% 批量写入,索引构建异步
总计 < 200 ms 100% 超过 200 ms 应视为采集链路异常
注意: 上述预算适用于实时 SLI 监控场景。对于离线分析或历史回溯场景,延迟预算可放宽至秒级,但必须保证数据不丢失、不重复。

2.6 链路可观测性:采集链路自身的监控

要保证 SLI 采集链路的可靠性,必须对链路本身进行可观测性建设。推荐在每个关键节点暴露以下指标:

  • sli_ingest_total — 进入该节点的原始事件总数
  • sli_ingest_errors_total — 该节点处理失败的事件数
  • sli_ingest_latency_seconds — 该节点处理延迟分布(含 P50/P99)
  • sli_buffer_usage_ratio — 本地缓冲使用率
  • sli_drop_total — 因缓冲溢出或超时丢弃的事件数

通过上述指标,SRE 团队可以快速定位链路中的瓶颈节点,并在 Error Budget 台账中标记采集链路自身的不可用时段,避免将采集故障误判为业务故障。