您可以在Java应用的业务日志中关联调用链的TraceId信息,从而在应用出现问题时,能够通过调用链的TraceId快速关联到业务日志,及时定位、分析并解决问题。
前提条件
应用监控基础版不支持该功能。
您已将Agent版本升级至2.6.1.2及以上版本,具体操作,请参见更新Java探针版本。
已通过日志服务SLS完成日志采集,具体操作,请参见数据采集概述。
背景信息
ARMS在业务日志中关联调用链TraceId的功能基于MDC(Mapped Diagnostic Context)机制实现,支持主流的Log4j、Log4j2和Logback日志框架。
开启关联业务日志与TraceId开关
登录ARMS控制台,在左侧导航栏选择 。
在应用列表页面顶部选择目标地域,然后单击目标应用名称。
说明语言列的图标含义如下:
:接入应用监控的Java应用。
:接入应用监控的Golang应用。
:接入应用监控的Python应用。
-:接入可观测链路 OpenTelemetry 版的应用。
在上方导航栏选择
。在自定义配置页签的应用日志关联配置区域,选择日志源为日志服务SLS,打开关联业务日志与TraceId开关,选择日志服务所在地域,然后绑定Project和Logstore。
您还可以根据需求打开日志自动填充traceId和日志自动填充spanId开关。
说明开启此开关后,业务日志中将会自动生成调用链的TraceId,此时无需执行步骤5手动关联Span ID。
如果您还需要实现精准定位业务异常问题,请参见通过调用链路和日志分析定位业务异常问题。
(可选)在您业务日志的Layout的Pattern属性中添加
%X{EagleEye-TraceID}
配置。您还可以通过添加
%X{span_id}
配置关联Span ID。重要关联Span ID功能仅支持4.x及以上探针版本。
如何在业务代码中获取
{EagleEye-TraceID}
,请参见ARMS Java SDK使用说明。
下面分别展示Log4j、Log4j2和Logback组件的示例配置文件:
Log4j配置文件log4j.properties的修改示例:
log4j.appender.warn.layout=org.apache.log4j.PatternLayout log4j.appender.warn.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}-[%p]-(%C:%L) - traceId:%X{EagleEye-TraceID} - spanId:%X{span_id} - %m%n
Log4j2配置文件log4j2.xml的修改示例:
PatternLayout
<console name="Console" target="SYSTEM_OUT"> <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - traceId:%X{EagleEye-TraceID} - spanId:%X{span_id} - %m%n"/> </console>
JsonLayout
<JsonLayout complete="false" compact="true" eventEol="true" properties="false" locationInfo="true" includeStacktrace="true" stacktraceAsString="true" objectMessageAsJsonObject="true" > <KeyValuePair key="EagleEye-TraceID" value="${ctx:EagleEye-TraceID}" /> <KeyValuePair key="span_id" value="${ctx:span_id}" /> </JsonLayout>
Logback配置文件logback.xml的修改示例:
PatternLayout
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - traceId:%X{EagleEye-TraceID} - spanId:%X{span_id} - %msg%n</pattern> </encoder>
JsonLayout
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <providers> <timestamp/> <threadName/> <logLevel/> <loggerName/> <message/> <callerData/> <stackTrace/> <pattern> <pattern> { "EagleEye-TraceID": "%X{EagleEye-TraceID}", "span_id": "%X{span_id}" } </pattern> </pattern> </providers> </encoder>
重启应用。
在应用的业务日志中成功打印出TraceId信息,则说明业务日志关联调用链的TraceId关联成功,如下图所示。
(可选)配置SLS日志采集接入,将应用日志上传至上述步骤绑定的Project和Logstore中。
ARMS默认不会采集应用日志。