在生产环境中,引发应用异常(如耗时突增、错误率突增)的原因有很多,常见的包括流量不均、单机故障、程序异常和依赖组件故障等。在新应用上线或大促备战前通常建议做一次系统性的性能调优,分析当前系统存在哪些性能瓶颈,梳理出常出错的或耗时较高的接口和组件进行优化。本文介绍如何使用ARMS调用链分析的错/慢Trace分析功能,定位系统或应用产生错、慢调用的原因,帮助您排查问题、定位系统性能瓶颈。
前提条件
已为应用安装探针,具体操作,请参见应用监控接入概述。
已切换至新版控制台。
体验Demo
通过错Trace分析功能排查错调用根因
步骤一:定位错调用发生时间
登录ARMS控制台,在左侧导航栏选择 。
在应用列表页面顶部选择目标地域,然后单击目标应用名称。
说明语言列的图标含义如下:
:接入应用监控的Java应用。
:接入应用监控的Golang应用。
-:接入可观测链路 OpenTelemetry 版的应用。
在上方导航栏单击调用链分析。
说明仅新版控制台支持进入调用链分析页面,切换新版控制台的操作请参见前提条件。
可以发现示例应用mall-gateway在15:20~15:28时间段出现了一些HTTP错误的调用。
修改查询时间段为HTTP错误发生的时间,开始排查问题。
步骤二:定位错误调用所在的接口或组件
在错/慢Trace分析页签,可以发现错Trace主要集中在/components/api/v1/mall/product接口上,且全都是500错误。
排查/components/api/v1/mall/product接口
在下方图表中单击spanName: /components/api/v1/mall/product。
此时调用链分析会自动将
serviceName="mall-gateway" AND spanName="/components/api/v1/mall/product"
设置为筛选条件。可以发现/components/api/v1/mall/product接口的调用链全都出错了。
在列表页签,单击任意Trace右侧的详情,可以查看错误详情。
通过慢Trace分析功能梳理慢接口
步骤一:定位慢调用发生时间
登录ARMS控制台,在左侧导航栏选择 。
在应用列表页面顶部选择目标地域,然后单击目标应用名称。
说明语言列的图标含义如下:
:接入应用监控的Java应用。
:接入应用监控的Golang应用。
-:接入可观测链路 OpenTelemetry 版的应用。
在上方导航栏单击调用链分析。
可以发现示例应用mall-user-server在15:40~15:49时间段存在许多5s以上的慢调用。
修改查询时间段为慢调用发生的时间。
在错/慢Trace分析页签修改耗时对比临界值为5000ms,开始排查问题。
步骤二:定位慢调用所在的接口或组件
在错/慢Trace分析页签,可以发现慢Trace主要集中在接口名为/components/api/v1/http/success、上报协议为EagleEye,以及命名空间为arms-test的Span上,依次对它们进行排查。
排查/components/api/v1/http/success接口
在下方图表中单击spanName: /components/api/v1/http/success。
此时调用链分析会自动将serviceName="mall-user-server" AND spanName="/components/api/v1/http/success"
设置为筛选条件。
可以发现,在该筛选条件下,每一次调用耗时都大于5s,/components/api/v1/http/success接口即为慢调用根因。
在耗时百分位区域同样可以发现调用平均耗时大于5s。
排查attributes._arms.trace.protocol.type=EagleEye的Span
在下方图表中单击attributes._arms.trace.protocol.type: EagleEye。
此时调用链分析会自动将serviceName="mall-user-server" AND attributes._arms.trace.protocol.type="EagleEye"
设置为筛选条件。
可以发现,在该筛选条件下,慢Trace的也指向了/components/api/v1/http/success接口。
将/components/api/v1/http/success接口加入筛选条件中,可以发现每一次调用的耗时都大于5秒。
在耗时百分位区域同样可以发现调用平均耗时大于5s。
排查命名空间为arms-test的Span
在serviceName="mall-user-server" AND attributes.namespace="arms-test"
筛选条件下,可以发现,慢Trace的依然指向/components/api/v1/http/success接口。
将/components/api/v1/http/success接口加入筛选条件中,可以发现每一次调用的耗时都大于5秒。
经过上述的排查,可以发现慢调用都来自于接口/components/api/v1/http/success, attributes._arms.trace.protocol.type="EagleEye"和arms-test命名空间自身都没有问题,它们中出现了慢调用是因为/components/api/v1/http/success接口服务部署在arms-test命名空间,且它的调用链上报协议类型为EagleEye。