采集日志异常助力问题定位
在云时代,分布式微服务架构下应用日益丰富,用户数量爆发式增长,纷杂的应用异常问题接踵而来。某些情况下,仅通过分析代码执行过程中的异常和错误往往不足以定位问题,日志中打印的异常信息也是有效定位问题的途径,而普通的应用性能监控工具往往采集不到这部分信息。
背景信息
- 错误:影响用户访问的事务请求的异常称之为错误,也叫事务错误。当一个请求发生多个事务错误时,只为该事务保留优先级最高的一个事务错误,其他的错误不进行统计。事务错误按优先级从高到低排序,包括:
- Business Error(业务错误)
- Uncaught Exception
- HTTP Error Code
- Redirect Error Page
- Logged Exception
- Logged Error Message(开启设置事务状态为错误功能后)
- 异常:代码执行过程中产生的异常,不影响用户访问,统计范围如下:
- 外部服务异常
- 数据库异常
- NoSQL异常
- MQ异常
- 代码异常
- 日志组件记录的异常
问题分析
研发人员在定位应用错误和异常时,往往既要借助应用性能监控工具追查代码执行过程中异常和错误,又需要排查应用日志,双管齐下。在海量和分散的日志中找出某个请求的完整日志非常耗费时间。
解决方案
应用与微服务的错误分析功能可以采集和统计日志组件输出的error及以上级别日志中的错误和异常信息,并对这些信息进行聚合分析,实现错误和异常根因诊断。再结合事务追踪,可以快速、准确地定位业务异常问题,提升微服务框架下的开发诊断效率。
步骤一:部署探针
在定位具体的业务异常原因前,请确保已经为相关应用部署了基调听云应用与微服务探针。
步骤二:配置日志异常采集
分布式微服务架构下业务调用往往跨越多个业务系统,涉及多个业务系统中应用日志异常的采集,因此可以在全局配置中开启日志异常采集。
登录应用与微服务控制台。
在左侧导航栏中选择全局配置,然后在全局配置页面单击错误及异常页签。
确保采集错误和异常开关是开启状态。默认状态是开启的。
在日志组件部分勾选您所使用的日志框架组件复选框,这样基调听云应用与微服务探针就可以采集和统计日志组件输出的error及以上级别日志中的异常信息,例如应用输出了日志log.error("message","IOException"),那么IOException将会被采集。
日志级别高于ERROR的message和设置事务状态为错误可根据需要勾选。
- 日志级别高于‘error’的’message‘:默认情况下,对于error及以上级别的日志,如果日志中只有message,而没有异常信息,是不会被统计为异常的。勾选该复选框后,上述日志也会被统计为异常。
- 设置事务状态为错误:勾选后,error及以上级别的日志所对应的事务会被视为错误,否则只被视为异常。Logback只有error级别的日志。
至此,您已完成配置。
步骤三:分析错误或异常
在左侧导航栏中选择错误分析,默认展示事务错误的分析图表。然后在页面上方的业务系统下拉菜单中选择应用所属的业务系统、应用,在右上角选择应用发生错误的时间段。
页面下方的事务错误列表页签列出了应用发生的所有错误,默认按发生次数从高到低排序。单击一个发生次数较高的错误的名称,进入该错误的分析详情页面。
在错误趋势图中,如果发现近期某个时段错误次数突然增加,可在图表下方的时间下拉菜单中选择最近时间段内的样本数据着重分析。
分析结果体现在下方的Exception Messages、Stacktrace、Root cause、错误追踪、Referring pages、Client IPs和Caller Applications部分。同一个错误的报错信息会有很多,错误发生的原因也可能千差万别。
Exception Messages:展示探针采集到的该种错误的所有错误Message(已经过聚合),包括日志框架打印的错误信息和代码抛出的错误信息。单击某一行后,下方的错误追踪、Client IPs和Caller Applications列表都会显示跟该条Message相关的数据。选择发生次数多,且占比较高的Exception Messages进行分析。
Stacktrace:选择一条Message后,显示该错误的堆栈,堆栈是经过聚合的结果。
Root cause:选择一条Message后,分析出所有该错误的可能原因,各个原因是经过聚合的结果。
错误追踪:展示所有发生了该错误信息的事务记录。错误堆栈虽包含调用的代码片段,但并不包含调用的完整上下游信息。单击错误追踪页签,找一条错误追踪记录,单击操作列的图标可查看错误message和错误堆栈。其中Referer列显示发生了异常的事务所对应的请求的来源。
Client IPs:展示所有发生了该错误的请求的客户端IP地址。
Caller Applications:展示所有调用发生过该错误的请求的上一级应用。
在错误追踪页签,单击一个事务名称,进入单个事务的追踪页面。
在疑似问题部分,基调听云应用与微服务自动分析出该事务执行过程中最慢的代码段、最耗时的组件调用和最严重的错误和异常信息。
更进一步,您可以:
在堆栈页面中探究具体原因,可能会是调用服务组件或外部服务出异常了、SQL语句本身执行时间长、数据库连接池满了、代码本身的问题等等。该示例中发现数据库异常,单击红框中的异常图标可查看异常信息和异常的堆栈,发现存在SQL语法问题。继续点击SQL分析页签,可追查具体影响到哪些完整的SQL语句。
操作至此,相信您已发现了问题的原因,这将有效地帮助您进行下一步的代码优化工作。
关于事务异常的分析与上述事务错误分析类似,进入错误分析模块后,单击异常页签即可按相同的思路排查。