全部产品
Search
文档中心

应用实时监控服务ARMS:日志分析

更新时间:Dec 18, 2024

将应用的日志采集到日志服务SLS,并在ARMS应用配置中配置相应的Project和Logstore后,您即可在ARMS中通过日志服务进行日志分析。当应用出现业务异常问题时,您可以通过分析业务日志,精准定位业务异常。

重要

ARMS应用监控面向已开通新版计费的用户提供全新的监控详情页面,新版计费详情,请参见产品计费(新版)

对于未开通新版计费的用户,如需查看新版监控详情页面,可在应用列表页面单击切换新版

前提条件

步骤一:关联业务日志

  1. 登录ARMS控制台,在左侧导航栏选择应用监控 > 应用列表

  2. 应用列表页面顶部选择目标地域,然后单击目标应用名称。

    说明

    语言列的图标含义如下:

    Java图标:接入应用监控的Java应用。

    image:接入应用监控的Golang应用。

    image:接入应用监控的Python应用。

    -:接入可观测链路 OpenTelemetry 版的应用。

  3. 在上方导航栏选择应用配置 > 自定义配置

  4. 应用日志关联配置区域,选择日志源为日志服务SLS,打开自动关联业务日志与TraceId开关,选择日志服务所在地域,然后绑定Project和Logstore。

  5. 单击保存

步骤二:查询并分析日志

  1. 在上方导航栏选择场景化分析 > 日志分析

  2. 筛选日志。

    1. 在搜索框中输入查询分析语句。

      查询分析语句由查询语句和分析语句构成,格式为查询语句|分析语句,查询分析语句语法请参见查询语法与功能聚合函数

    2. 设置查询分析的时间范围。

      您可以设置相对时间、整点时间和自定义时间。

      说明

      查询结果有1分钟以内的误差。

    3. 单击查询/分析,查看查询分析结果。

    日志分析

常见问题

修改日志XML配置后日志未成功关联上TraceId

如果是在SLS中查询日志时遇到该问题,请先确认日志是否已自行上报至SLS或已在ARMS控制台绑定需要关联的Project和Logstore。

确认SLS中存在数据后,再按以下两种情况排查:

  • 所有日志都没有关联上TraceId,这种情况一般有以下几种可能:

    • 探针未成功挂载。

      可通过查看ARMS控制台各指标是否正常展示确认。

    • 探针总开关关闭或者关闭了某些插件,例如关闭了Tomcat插件。

      可在自定义配置页面的探针开关设置区域确认。

    • 服务端框架不支持,例如使用了不支持的Web容器、RPC框架、定时任务框架、消息框架等,支持的框架请参见ARMS应用监控支持的Java组件和框架

    • 使用了除log4j、log4j2、logback之外的日志框架打印日志或者对这些日志框架的使用进行了深度的改动。

    • 用户日志XML配置错误。

      可参考以下操作排查:

      • 如果是4.1.6及以上版本探针,可以打开自动填充traceId功能,查看是否能关联TraceId,如果能,则确定是用户日志XML配置错误。

      • 引入ARMS Java SDK,打印日志时手动获取TraceId,代码如下所示。

        Span span = Tracer.builder().getSpan();   //此处未创建新的Span。
        String traceId = span.getTraceId();
        
        logger.warn("traceId={} this is your log message", traceId)

        如果能获取到TraceId,则说明是用户日志XML配置错误。

      • 如果上述两种方式均验证失败,请提交工单

  • 部分日志没有关联上TraceId:可能是日志中没有Trace上下文导致无法关联TraceId。

    通常打印日志时是没有Trace上下文的,一般只有在一些请求入口中打印的日志才有Trace上下文,例如在HTTP接口、RPC接口、定时任务、消费消息等业务的处理代码。

    示例场景:

    • 应用在接收到一个HTTP请求之后,执行数据库查询,然后打印日志,此时是有Trace上下文的,日志能成功关联TraceId。

    • 应用在接收到一个HTTP请求之后,通过线程池提交一个异步任务执行数据库查询,然后打印日志。

      • 对于3.x版本探针,因为不支持Trace上下文异步自动透传,异步线程没有Trace上下文,日志无法成功关联上TraceId。

      • 对于4.x版本探针,因为支持Trace上下文异步自动透传,异步线程有Trace上下文,日志可以成功关联上TraceId。

    • 应用在启动后,通过JDK的线程池,循环执行数据库查询,每次查询后打印日志,此时是没有Trace上下文的,日志无法成功关联上TraceId。

    通过查看日志打印的线程名字可以判断具体场景。

    下面举例说明:

    • 使用Tomcat作为Web容器时,一般以http-nio-开头的线程名代表处理HTTP请求的线程,这种线程打印的日志可以关联上TraceId。

    • 使用Dubbo作为RPC框架时,一般以DubboServerHandler-开头的线程名代表处理Dubbo请求的线程,这种线程打印的日志可以关联上TraceId。

    其他框架类似,如果最终判断出不是以上场景导致的日志未关联TraceId,请提交工单

在调用链分析页面跳转查看的日志为空

排查步骤:

  1. 该应用的所有日志是否都未关联上TraceId,如果是,请参考修改日志XML配置后日志未成功关联上TraceId问题排查;如果不是,执行下一步。

  2. TraceId查询不到日志的接口如果是固定的一个或者几个接口,则一般是该接口内部本身并未输出日志。

  3. 如果不是上述情况,请提交工单

绑定好SLS的Project和Logstore之后,Logstore中没有日志

用户需要自行按照SLS的接入文档将应用日志采集到Logstore中,ARMS并不会帮助用户自动将日志采集到Logstore中。

网关应用日志无法成功关联TraceId,业务应用日志可以成功关联TraceId

3.x版本探针对于Spring Cloud Gateway埋点有缺陷,升级到4.x版本探针可解决该问题。

使用TraceCallable.wrap()封装异步任务后,任务中的日志无法成功关联TraceId

使用方式不对,建议直接升级到4.x版本探针,异步场景无需任何代码改造。

打开自动填充TraceId后未成功关联上TraceId

一般存在以下两种情况: