Java应用业务日志关联调用链TraceId

您可以在Java应用的业务日志中关联调用链的TraceId信息,从而在应用出现问题时,能够通过调用链的TraceId快速关联到业务日志,及时定位、分析并解决问题。

前提条件

说明

应用监控基础版不支持该功能。

背景信息

ARMS在业务日志中关联调用链TraceId的功能基于MDC(Mapped Diagnostic Context)机制实现,支持主流的Log4j、Log4j2Logback日志框架。

开启关联业务日志与TraceId开关

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

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

    说明

    语言列的图标含义如下:

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

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

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

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

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

  4. 自定义配置页签的应用日志关联配置区域,选择日志源为日志服务SLS,打开关联业务日志与TraceId开关,选择日志服务所在地域,然后绑定ProjectLogstore。

    您还可以根据需求打开日志自动填充traceId日志自动填充spanId开关。

    image

    说明
  5. (可选)在您业务日志的LayoutPattern属性中添加%X{EagleEye-TraceID}配置。

    您还可以通过添加%X{span_id}配置关联Span ID。

    重要
    • 关联Span ID功能仅支持4.x及以上探针版本。

    • 如何在业务代码中获取{EagleEye-TraceID},请参见ARMS Java SDK使用说明

    下面分别展示Log4j、Log4j2Logback组件的示例配置文件:

    • 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>
  6. 重启应用。

    在应用的业务日志中成功打印出TraceId信息,则说明业务日志关联调用链的TraceId关联成功,如下图所示。dg_am_log_traceid

  7. (可选)配置SLS日志采集接入,将应用日志上传至上述步骤绑定的ProjectLogstore中。

    ARMS默认不会采集应用日志。