77
88## 全链路追踪的价值
99
10- ** 链路追踪的价值在于“关联”,终端用户、后端应用、云端组件(数据库、消息等)共同构成了链路追踪的轨迹拓扑大图。** 这张拓扑覆盖的范围越广,链路追踪能够发挥的价值就越大。而全链路追踪就是覆盖全部关联 IT 系统,能够完整记录用户行为在系统间调用路径与状态的最佳实践方案。
10+ ** 链路追踪的价值在于“关联”,终端用户、后端应用、云端组件(数据库、消息等)共同构成了链路追踪的轨迹拓扑大图。** 这张拓扑覆盖的范围越广,链路追踪能够发挥的价值就越大。而全链路追踪就是覆盖全部关联 IT 系统,能够完整记录用户行为在系统间调用路径与状态的最佳实践方案。
1111
1212完整的全链路追踪可以为业务带来** 三大核心价值:端到端问题诊断,系统间依赖梳理,自定义标记透传。**
1313
14- - ** 端到端问题诊断:** VIP 客户下单失败,内测用户请求超时,许多终端用户的体验问题,追根溯源就是由于后端应用或云端组件异常导致的。而全链路追踪是解决端到端问题最有效的手段,没有之一。
15- - ** 系统间依赖梳理:** 新业务上线,老业务裁撤,机房搬迁/架构升级,IT 系统间的依赖关系错综复杂,已经超出了人工梳理的能力范畴,基于全链路追踪的拓扑发现,使得上述场景决策更加敏捷、可信。
16- - ** 自定义标记透传:** 全链路压测,用户级灰度,订单追溯,流量隔离。基于自定义标记的分级处理&数据关联,已经衍生出了一个繁荣的全链路生态。然而,一旦发生数据断链、标记丢失,也将引发不可预知的逻辑灾难。
14+ - ** 端到端问题诊断:** VIP 客户下单失败,内测用户请求超时,许多终端用户的体验问题,追根溯源就是由于后端应用或云端组件异常导致的。而全链路追踪是解决端到端问题最有效的手段,没有之一。
15+ - ** 系统间依赖梳理:** 新业务上线,老业务裁撤,机房搬迁/架构升级,IT 系统间的依赖关系错综复杂,已经超出了人工梳理的能力范畴,基于全链路追踪的拓扑发现,使得上述场景决策更加敏捷、可信。
16+ - ** 自定义标记透传:** 全链路压测,用户级灰度,订单追溯,流量隔离。基于自定义标记的分级处理&数据关联,已经衍生出了一个繁荣的全链路生态。然而,一旦发生数据断链、标记丢失,也将引发不可预知的逻辑灾难。
1717
1818## 全链路追踪的挑战与方案
1919全链路追踪的价值与覆盖的范围成正比,它的挑战也同样如此。为了最大程度地确保链路完整性,无论是前端应用还是云端组件,无论是 Java 语言还是 Go 语言,无论是公有云还是自建机房,都需要遵循同一套链路规范,并实现数据互联互通。** 多语言协议栈统一、前/后/云(多)端联动、跨云数据融合是实现全链路追踪的三大挑战** ,如下图所示:
2323### 多语言协议栈统一
2424在云原生时代,多语言应用架构越来越普遍,利用不同语言特性,实现最佳的性能和研发体验成为一种趋势。但是,不同语言的成熟度差异,使得全链路追踪无法做到完全的能力一致。目前业界的主流做法是,** 先保证远程调用协议层格式统一,多语言应用内部自行实现调用拦截与上下文透传** ,这样可以确保基础的链路数据完整。
2525
26- 但是,** 绝大部分线上问题无法仅通过链路追踪的基础能力就能够有效定位并解决,** 线上系统的复杂性决定了一款优秀的 Trace 产品必须提供更加全面、有效的数据诊断能力,比如代码级诊断、内存分析、线程池分析、无损统计等等。充分利用不同语言提供的诊断接口,最大化的释放多语言产品能力是 Trace 能够不断向前发展的基础。
26+ 但是,绝大部分线上问题无法仅通过链路追踪的基础能力就能够有效定位并解决,线上系统的复杂性决定了一款优秀的 Trace 产品必须提供更加全面、有效的数据诊断能力,比如代码级诊断、内存分析、线程池分析、无损统计等等。充分利用不同语言提供的诊断接口,最大化的释放多语言产品能力是 Trace 能够不断向前发展的基础。
2727
2828- 透传协议标准化:全链路所有应用需要遵循同一套协议透传标准,保证链路上下文在不同语言应用间能够完整透传,不会出现断链或上下文缺失的问题。目前主流的开源透传协议包括 Jaeger、SkyWalking、ZipKin 等。
29- - 最大化释放多语言产品能力:链路追踪除了最基础的调用链功能外,逐步衍生出了应用/服务监控,方法栈追踪,性能剖析等高阶能力。但是不同语言的成熟度导致产品能力差异较大,比如 Java 探针可以基于 JVMTI 实现很多高阶的边缘侧诊断。** 优秀的全链路追踪方案会最大化的释放每种语言的差异化技术红利,而不是一味的追求趋同平庸。** 感兴趣的同学可以阅读之前这篇文章[ 《开源自建/托管与商业化自研 Trace,如何选择》] ( https://mp.weixin.qq. com/s/sZ7rTVuNhtXArK7kwYtG4w ) 。
29+ - 最大化释放多语言产品能力:链路追踪除了最基础的调用链功能外,逐步衍生出了应用/服务监控,方法栈追踪,性能剖析等高阶能力。但是不同语言的成熟度导致产品能力差异较大,比如 Java 探针可以基于 JVMTI 实现很多高阶的边缘侧诊断。** 优秀的全链路追踪方案会最大化的释放每种语言的差异化技术红利,而不是一味的追求趋同平庸。** 感兴趣的同学可以阅读之前这篇文章[ 《开源自建/托管与商业化自研 Trace,如何选择》] ( https://github. com/StabilityMan/StabilityGuide/blob/master/docs/diagnosis/tracing/%E5%BC%80%E6%BA%90%E8%87%AA%E5%BB%BA_%E6%89%98%E7%AE%A1%E4%B8%8E%E5%95%86%E4%B8%9A%E5%8C%96%E8%87%AA%E7%A0%94Trace%EF%BC%8C%E5%A6%82%E4%BD%95%E9%80%89%E6%8B%A9%EF%BC%9F.md ) 。
3030
3131### 前后云(多)端联动
3232目前开源的链路追踪实现主要集中于后端业务应用层,在用户终端和云端组件(如云数据库)侧缺乏有效的埋点手段。主要原因是后两者通常由云服务商或三方厂商提供服务,依赖于厂商对于开源的兼容适配性是否友好。而业务方很难直接介入开发。
7373
7474![ image.png] ( image/全链路_4.png )
7575
76- - ** Header 透传格式:** 统一采用 Jaeger 格式,Key 为 uber-trace-id, Value 为 {trace-id}:{span-id}:{parent-span-id}:{flags} 。
77- - ** 前端接入:** 可以采用 CDN(Script 注入)或 NPM 两种低代码接入方式,支持 Web/H5、Weex 和各类小程序场景。
76+ - ** Header 透传格式:** 统一采用 Jaeger 格式,Key 为 uber-trace-id, Value 为 {trace-id}:{span-id}:{parent-span-id}:{flags} 。
77+ - ** 前端接入:** 可以采用 CDN(Script 注入)或 NPM 两种低代码接入方式,支持 Web/H5、Weex 和各类小程序场景。
7878- ** 后端接入:**
7979 - ** Java 应用推荐优先使用 ARMS Agent** ,无侵入式埋点无需代码改造,支持边缘诊断、无损统计、精准采样等高阶功能。用户自定义方法可以通过 OpenTelemetry SDK 主动埋点。
80- - ** 非 Java 应用推荐通过 Jaeger 接入,并将数据上报至 ARMS Endpoint,** ARMS 会兼容多语言应用间的链路透传与展示。
80+ - ** 非 Java 应用推荐通过 Jaeger 接入,并将数据上报至 ARMS Endpoint,** ARMS 会兼容多语言应用间的链路透传与展示。
8181
8282阿里云 ARMS 目前的全链路追踪方案是基于 Jaeger 协议,正在开发 SkyWalking 协议,以便支持 SkyWalking 自建用户的无损迁移。前端、Java 应用与非 Java 应用全链路追踪的调用链效果如下图所示:
8383
@@ -88,7 +88,7 @@ ARMS 前端监控支持 Web/H5、Weex、支付宝和微信小程序等,本文
8888
89891 . 登录 [ ARMS 控制台] ( https://arms.console.aliyun.com/ ) ,在左侧导航栏中单击** 接入中心** ,点击选择前端 Web/H5 接入。
90901 . 输入应用名称,点击创建;勾选** SDK扩展配置项** 区域需要的选项,快捷生成待插入页面的BI探针代码。
91- 1 . 选择异步加载,复制下面代码并粘贴至页面HTML中** <body >** 元素内部的第一行,然后重启应用。
91+ 1 . 选择异步加载,复制下面代码并粘贴至页面HTML中<body >元素内部的第一行,然后重启应用。
9292
9393```
9494<script>
0 commit comments