2. SLI 采集链路全景:从用户请求到指标落库的端到端链路拆解、关键节点识别
SLI 采集链路并非单一的数据管道,而是一条从用户真实请求触发,经过多层中间件、应用代码、采集代理、聚合处理,最终写入存储系统的完整数据流。任何一个环节的延迟、丢数或格式错误,都会直接污染 Error Budget 台账的准确性。本节将逐层拆解这条链路,并识别出每个阶段的关键节点与风险点。
2.1 端到端链路全景视图
下图展示了从用户请求到 SLI 指标落库的完整数据流,包含 6 个核心阶段:
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 数据失真的最高发区域。以下拆解该子链路的典型流程:
2.4 关键节点识别清单
基于上述链路拆解,SRE 团队应在日常巡检中重点监控以下 8 个关键节点:
- 请求入口 Trace ID 生成 — 确保全链路可追踪,否则无法关联 SLI 与具体请求。
- 网关限流/熔断状态输出 — 限流后的请求应标记为“被拒绝”,而非直接丢弃。
- 应用内埋点位置 — 必须在业务逻辑完成后、返回响应前采集,避免计入重试或排队时间。
- 本地缓冲水位 — 监控缓冲使用率,超过 70% 应触发告警,防止溢出丢数。
- 序列化协议一致性 — 采集代理与应用之间的 Protobuf schema 必须版本对齐。
- 聚合层去重窗口 — 去重窗口过小会导致重复计数,过大则增加延迟。
- 降采样策略 — 对于 P99/P95 等分位数指标,应保留原始精度或使用 T-Digest 算法。
- 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 台账中标记采集链路自身的不可用时段,避免将采集故障误判为业务故障。