亚马逊|前后端、多语言、跨云部署,全链路追踪到底有多难?( 三 )



其他方式
除了上述两种方案 , 在实际应用中还可以采用混合模式或仅透传模式 。
混合模式是指将统计数据通过公网统一上报 , 进行集中处理(数据量小 , 精度要求高) , 而链路数据采用跨云查询方式进行检索(数据量大 , 查询频率低) 。
仅透传模式是指每个云环境之间仅保证链路上下文能够完整透传 , 链路数据的存储与查询独立实现 。 这种模式的好处就是实现成本极低 , 每朵云之间仅需要遵循同一套透传协议 , 具体的实现方案可以完全独立 。 通过同一个 TraceId 或应用名进行人工串联 , 比较适合存量系统的快速融合 , 改造成本最小 。
全链路追踪接入实践 前文详细介绍了全链路追踪在各种场景下面临的挑战与应对方案 , 接下来以阿里云 ARMS 为例 , 介绍一下如何从 0 到 1 构建一套贯穿前端、网关、服务端、容器和云组件的完整可观测系统 。

Header 透传格式:统一采用 Jaeger 格式 , Key 为 uber-trace-id ,Value 为 {trace-id:{span-id:{parent-span-id:{flags。前端接入:可以采用 CDN(Script 注入)或 NPM 两种低代码接入方式 , 支持 Web/H5、Weex 和各类小程序场景 。后端接入: Java 应用推荐优先使用 ARMS Agent , 无侵入式埋点无需代码改造 , 支持边缘诊断、无损统计、精准采样等高阶功能 。 用户自定义方法可以通过 OpenTelemetry SDK 主动埋点 。非 Java 应用推荐通过 Jaeger 接入 , 并将数据上报至 ARMS Endpoint , ARMS 会兼容多语言应用间的链路透传与展示 。阿里云 ARMS 目前的全链路追踪方案是基于 Jaeger 协议 , 正在开发 SkyWalking 协议 , 以便支持 SkyWalking 自建用户的无损迁移 。 前端、Java 应用与非 Java 应用全链路追踪的调用链效果如下图所示:

1、前端接入实践
ARMS 前端监控支持 Web/H5、Weex、支付宝和微信小程序等 , 本文以 Web 应用通过 CDN 方式接入 ARMS 前端监控为例 , 简要说明接入流程 , 详细接入指南参考 ARMS 前端监控官网文档 。


















登录 ARMS 控制台 , 在左侧导航栏中单击接入中心 , 点击选择前端 Web/H5 接入 。输入应用名称 , 点击创建;勾选SDK扩展配置项区域需要的选项 , 快捷生成待插入页面的BI探针代码 。选择异步加载 , 复制下面代码并粘贴至页面HTML中** **元素内部的第一行 , 然后重启应用 。script!(function(cbda){c[a
||(c[a
={);c[a
.config={pid:\"xxx\"imgUrl:\"https://arms-retcode.aliyuncs.com/r.png?\" enableLinkTrace: true linkType: 'tracing';with(b)with(body)with(insertBefore(createElement(\"script\")firstChild))setAttribute(\"crossorigin\"\"\"src=https://mparticle.uc.cn/api/d))(windowdocument/"https://retcode.alicdn.com/retcode/bl.js\"\"__bl\");/script 为了实现前后端链路打通 , 上述探针代码中必须包含以下两个参数: enableLinkTrace:true // 表示开启前端链路追踪功能 linkType: 'tracing' // 表示生成 Jaeger 协议格式的链路数据 , Hearder 允许 uber-trace-id 透传 另外 , 如果 API 与当前应用非同源 , 还需要添加 enableApiCors: true 这个参数 , 并且后端服务器也需要支持跨域请求及自定义header 值 , 详情参考前后端链路关联文档 。 如需验证前后端链路追踪配置是否生效 , 可以打开控制台查看对应 API 请求的 Request Headers 中是否有 uber-trace-id 这个标识 。2、Java 应用接入实践 Java 应用推荐接入 ARMS JavaAgent , 无侵入式探针开箱即用 , 无需修改业务代码 , 详细接入指南参考 ARMS 应用监控官网文档 。登录 ARMS 控制台 , 在左侧导航栏中单击接入中心 , 点击选择后端 Java 接入 。根据需要选择手动安装、脚本安装和容器服务安装任意方式 。根据操作指南确保探针下载并解压至本地 , 正确配置 appName、LicenseKey 和 javaagent 启动参数后 , 重启应用 。3、非 Java 应用接入实践 非 Java 应用可以通过开源 SDK(比如 Jaeger)将数据上报至 ARMS 接入点 , 详细接入指南参考 ARMS 应用监控官网文档 。登录 ARMS 控制台 , 在左侧导航栏中单击接入中心 , 点击选择后端 Go/C++/.NET/Node.js 等接入方式 。根据操作指南替换接入点, 配置完成后重启应用 。全链路追踪只是开始 , 不是结束 从 2010 年谷歌发表 Dapper 论文开始 , 链路追踪已经发展了十多年 。 但是关于链路追踪的书籍或深度文章一直都比较少 , 大部分博客只是简单介绍一些开源的概念或 QuickStart , 一个大型企业如何建设一套真正可用、好用、易用的链路追踪系统 , 需要填哪些坑 , 避哪些雷 , 很难找到比较系统、全面的答案 。全链路追踪接入只是 Tracing 的起点 , 选择适合自身业务架构的方案 , 可以避免一些弯路 。 但链路追踪不仅仅只是看看调用链和服务监控 , 如何向上赋能业务 , 衍生至业务可观测领域辅助业务决策?如何向下与基础设施可观测联动 , 提前发现资源类风险?后面还有很多的工作要做 , 期待更多同学一起加入分享 。相关链接: 1、 ARMS 前端监控官网文档:https://help.aliyun.com/document_detail/106086.html?spm=ata.21736010.0.0.5d3a7f117o1Lty 2、 前后端链路关联文档:https://help.aliyun.com/document_detail/91409.html#title-6rx-0lb-p1o 3、ARMS 应用监控官网文档:https://help.aliyun.com/document_detail/97924.html 4、ARMS 应用监控官网文档:https://help.aliyun.com/document_detail/118912.html 5、ARMS 控制台: https://arms.console.aliyun.com/?spm=ata.21736010.0.0.5d3a7f117o1Lty 作者|涯海 原文链接:http://click.aliyun.com/m/1000300334/ 本文为阿里云原创内容 , 未经允许不得转载 。