诊断服务端报错问题
问题分析
服务器端事务发生错误后,都会影响终端用户的访问,例如在网页端遇到报错提示(如下图所示),会给用户体验造成很大的影响,甚至会导致用户流失。
运维或研发人员往往需要登录机器查看日志来定位问题,进行错误分析。下图为一个常见的Java应用错误日志:
对于业务逻辑较简单的应用来说,登录机器查看日志的方式能够解决大部分网站报错的问题。但在下面的场景中,这种诊断方式往往效率不高,或者说不足以排查出错误根因。
- 在一个分布式应用集群中,需知道某一类错误的开始出现时间、持续时间和出现次数等。
- 查看每一次异常是在哪个接口、应用、应用实例中发生的,以及相关请求参数是什么。
- 异常或错误影响了哪些用户、影响的业务范围有多大。
解决方案
为应用安装基调听云应用与微服务探针后,可以在不改动应用代码的情况下,利用应用与微服务追踪出具体是哪些事务、服务接口或后台任务发生了哪种类型的错误、请求的URL、请求参数,并展示异常的堆栈,全面掌握应用的各种错误信息。
前提条件
在诊断应用问题前,请确保已经为应用部署了基调听云应用与微服务探针且探针处于运行状态。具体部署介绍请参见探针部署。
用户可以通过以下步骤追踪报错问题:
登录应用与微服务控制台。
在左侧导航栏中选择应用与微服务>应用,然后在页面左上角的业务系统下拉菜单中选择目标业务系统。
在应用列表中单击目标应用的名称,进入应用详情页面。在右上角选择发生错误的大致时间段。
在页面顶部单击错误页签,进入该应用的错误统计分析页面。
影响分析。
最下方的事务错误列表默认按错误的发生次数从高到低排列。错误名称后可查看该错误影响的数据项,即业务数据,从而可判定错误影响的业务范围。从影响用户列可查看该错误影响的用户数量,单击数字可了解具体影响了哪些用户。
单击影响的事务页签,可以追踪这个错误都影响了哪些事务。
根因分析。
单击用户在网页端遇到的错误名称,追踪这个错误的详情。如果无法定位发生的是哪个错误,首先单击发生次数最多的错误名称进行追踪。然后再按照同样的方式追踪其他错误。
在错误趋势图的下方下拉菜单中,选择当前时间点之前时间范围的数据进行分析,分析结果体现在下方的Exception Messages、Stacktrace、Root cause、异常追踪、Referring pages、Client IPs和Caller Applications中。同一个错误的报错信息会有很多,错误发生的原因也可能千差万别。
通过Exception Messages列表可查看该种错误的所有错误Message,包括日志框架打印错误信息的(前提是开启了采集日志异常功能以及勾选了日志级别高于'ERROR'的'message')和代码抛出的错误信息,单击占比最高的一条Message,查看下方的Stacktrace。
异常堆栈虽包含调用的代码片段,但并不包含调用的完整上下游信息。单击错误追踪页签,找一条错误追踪记录,单击操作列的图标可查看错误message和错误堆栈。
单击Root cause页签,查看该错误的所有可能原因。
单击错误追踪页签,然后单击事务名称,进入事务的追踪页面。
疑似问题概览部分给出本次追踪的问题所在。
切换到调用栈页签,单击下图中的异常图标,查看异常信息和堆栈信息,以便定位问题和优化代码。
也可以直接切换到异常页签,查看该次追踪中发生的所有异常。单击每个异常条目可查看异常信息和堆栈信息。
操作至此,相信您已发现了应用服务端报错的原因,这将有效地帮助您进行下一步的代码优化工作。