不同开发语言、链路框架的实现不尽相同,真正实现端到端链路追踪,需要解决三个难题:
- 链路插桩:顾名思义就是在关键方法执行前后添加链路追踪的埋点代码,从而记录相应的方法名称、耗时、状态等信息。链路插桩是一切的基础,只有已插桩方法才会生成 Trace 链路数据,可以被追溯和观测。难点在于:哪些方法需要插桩?如何低成本地新增或管理插桩逻辑?如何保障链路插桩的准确、性能和稳定?
- 链路采集与加工:把已经生成的链路数据收集到指定的后端进行处理与存储,以便后续分析。采集的难点在于如何确定采集目标并收到完整的链路数据,特别是云产品服务(如网关)生成的链路数据;加工的难点在于如何处理非原生 Trace 数据转义(如网关访问日志),或者多源异构链路模型的归一化。
- 链路上下文透传:是最容易被忽视、也是最难处理的问题。目前业界链路透传协议尚未完全统一,常用主流协议包括 w3c、b3、jaeger 和 skywalking。不同系统之间因开发语言、开源框架、产品归属等原因选择的协议不一致很普遍,从而导致调用链断链不全。另外,迁移链路框架过程中也会出现协议不兼容情况,比如 SkyWalking 与 OpenTelemetry。




