第 220 题:全链路监控,延迟分解与异常定位?
题目
全链路监控,延迟分解与异常定位?
完整讲解
一、全链路监控的目标
全链路:从请求入口(网关、LB)经各中间服务(特征、模型、存储)到响应出口,整条路径可追踪、计时、定位瓶颈与异常。目标:延迟分解(各阶段耗时)、异常定位(哪一环节出错或变慢)、** SLA 与容量管理**。
二、延迟分解
- Trace:为每个请求分配唯一 trace_id,在各服务间传递;各服务打点记录「开始、结束、服务名、span_id、父 span」等,上报到分布式追踪系统(如 Jaeger、Zipkin、SkyWalking)。Span:代表一段逻辑(如一次 RPC、一次 DB 查询),有开始/结束时间;多 span 按父子关系组成调用树,即可得到各阶段耗时。
- 分解:从调用树可读出:网关 → 特征服务 → 模型服务 → 存储 等各段耗时与占比;P50/P99 按 span 聚合可发现慢环节(如某下游 P99 高、某 DB 查询慢)。端到端延迟 = 根 span 的 duration;子 span 之和应接近根(扣除并行与时钟误差)。
三、异常定位
- 错误与状态码:各 span 记录错误码、异常信息;某 span 失败可向上追溯根因(如模型服务超时、某依赖 5xx)。关联:同一 trace_id 下日志、指标、事件可关联,便于一次请求的完整排查。
- 指标与告警:按服务/接口聚合延迟、错误率、QPS;设告警(如 P99 > 200ms、错误率 > 1%),触发时结合 trace 与日志定位。根因:通过慢 trace 抽样查看调用树,找到共同慢的 span 或依赖,再查该服务/依赖的日志与资源。
四、工程要点
- 采样:全量 trace 成本高,可按比例或按延迟/错误采样;保证异常与慢请求优先采样。低侵入:通过中间件、Agent 自动打点与传递 trace_id,减少业务代码侵入。存储与查询:trace 数据量大,需索引(trace_id、时间、服务名)与保留策略(如热数据 7 天、冷数据聚合)。
面试要点
- 能说清全链路监控的目的:延迟分解、异常定位、SLA;能描述 trace_id、span、调用树与延迟分解的关系。
- 能说明如何做异常定位:span 错误信息、trace 与日志关联、慢 trace 抽样找共同慢 span;能提及指标与告警。
- 能简述采样、低侵入、存储与保留策略;能列举常见追踪系统(Jaeger、Zipkin 等)。
记忆要点
- 全链路=trace_id+各服务 span、调用树;延迟分解=各 span 耗时与 P50/P99。
- 异常定位=span 错误、trace 与日志关联、慢 trace 抽样找根因;指标告警配合。工程=采样、低侵入、存储与保留。