在前端监控中,即便已知API的请求耗时,也无从知晓准确的网络传输性能、后端服务的调用链路及性能,因而无法快速准确地排查应用API问题。前后端链路追踪功能可以解决此类问题,它会将API请求从前端发出到后端调用的链路串联起来,真实还原代码执行的完整现场。

前提条件

只有开通阿里云ARMS前端监控和应用监控服务并搭配使用二者,才能获得前后端的完整调用链路:

  • 阿里云ARMS前端监控
    • SDK配置
      • 允许API自动上报,即不关闭API自动上报。
      • 允许前后端链路追踪,即配置enableLinkTrace为true。具体配置为:
        <script>
        !(function(c,b,d,a){c[a]||(c[a]={});c[a].config={pid:"xxx",imgUrl:"https://arms-retcode.aliyuncs.com/r.png?", enableLinkTrace: true};
        with(b)with(body)with(insertBefore(createElement("script"),firstChild))setAttribute("crossorigin","",src=d)
        })(window,document,"https://retcode.alicdn.com/retcode/bl.js","__bl");
        </script>
        									
    • 工作原理
      • 在允许API自动上报的前提下,如果API与当前应用的域名同源,则会在API请求头(Request Header)加入两个自定义Header:EagleEye-TraceID和EagleEye-SessionID。EagleEye-TraceID即串联前后端链路的标识。
      • 如果API与当前应用的域名不同源,则不会在请求头添加自定义Header,以保证应用请求可以正常发送。
      • 如需验证前后端链路追踪配置是否生效,可以打开控制台查看对应API请求的Request Headers中是否有EagleEye-TraceID和EagleEye-SessionID这两个标识。
        警告 EagleEye-TraceID和EagleEye-SessionID的值有相应的含义,请勿自行生成。
  • 阿里云ARMS应用监控

    • 关于应用监控的配置,请参见应用监控概述
    • 仅2.4.5或更高版本的应用监控探针支持该功能。

使用方法

在阿里云ARMS前端监控中,应用 > API请求维度 > 页面页面均提供了API链路追踪模块。

您可以在此模块中执行以下操作:

  • 按照上报时间或请求耗时对API进行升序或降序排列。
  • 单击链路追踪,即可进入调用链路标签页,查看前端监控的整体耗时和后端应用的调用时序图。
  • 单击访问明细,即可进入查看详情页面,查看API请求的详细信息。

使用场景和案例

应用监控可提供API在后端的处理性能及调用链路,但这些数据未必能准确反映用户的真实体验。前端监控只能监控到API从发送到返回的整体耗时及状态,无法提供后端服务的调用链路及性能数据。在这种情况下,前后端链路追踪功能可将前端与后端串联起来,给您一站式的问题排查体验。

通过调用的时间轴,可以知道是网络传输还是后端调用导致请求耗时时间过长,同时单击后端应用中的线程剖析,可以看到本次请求后端的完整调用链路。从而根据业务定位是什么原因导致API错误:

  • 当API返回错误码或者业务逻辑错误时定位问题

    1. 在API链路追踪模块的API失败列表中,找到相关的API或者TraceID,并单击相应的链路追踪按钮,以查看前端监控的整体耗时和后端应用的调用时序图。

    2. 根据调用的时间轴判断,耗时长的是网络传输还是后端调用。

    3. 对后端应用单击方法栈栏中的放大镜图标,可以查看本次请求的完整后端调用链,并根据业务定位导致API错误的原因。

  • 当API耗时较长时定位问题

    1. 在API链路追踪模块中,按照请求耗时对API进行降序排列,找到耗时较长的API或者TraceID。

    2. 在耗时较长的记录所在行上,单击相应的链路追踪按钮,以查看前端监控的整体耗时和后端应用的调用时序图。

      • 如果后端应用处理时间较短,而整体耗时较长,则说明API请求从发送到服务端以及从服务端返回数据到浏览器端的网络传输耗时较长。此时可以单击访问明细,并在查看详情页面上查看本次访问的网络、地域、浏览器、设备、操作系统等信息。
      • 如果后端应用处理时间较长,则说明后端处理的性能较差。此时可以单击方法栈栏中的放大镜图标,并在本地方法栈对话框中查看后端链路上哪部分内容耗时较长,继而定位问题。