您可以在應用的業務日誌中關聯調用鏈的TraceId資訊,從而在應用出現問題時,能夠通過調用鏈的TraceId快速關聯到業務日誌,及時定位、分析並解決問題。
前提條件
僅應用監控專家版支援該功能。
您已將Agent版本升級至2.6.1.2及以上版本,具體操作,請參見更新Java探針版本。
已通過Log ServiceSLS完成日誌採集,具體操作,請參見資料擷取概述。
背景資訊
ARMS在業務日誌中關聯調用鏈TraceId的功能基於MDC(Mapped Diagnostic Context)機制實現,支援主流的Log4j、Log4j2和Logback日誌架構。
開啟關聯業務日誌與TraceId開關
登入ARMS控制台,在左側導覽列選擇 。
在應用列表頁面頂部選擇目標地區,然後單擊目標應用程式名稱。
說明語言列的表徵圖含義如下:
:接入應用監控的Java應用。
:接入應用監控的Golang應用。
-:接入Managed Service for OpenTelemetry的應用。
在上方導覽列選擇
。在自訂配置頁簽的應用日誌關聯配置地區,選擇日誌源為Log ServiceSLS,開啟關聯業務日誌與TraceId開關,選擇Log Service所在地區,然後綁定Project和Logstore。
您還可以根據需求開啟日誌自動填滿traceId和日誌自動填滿spanId開關。
說明開啟此開關後,業務日誌中將會自動產生調用鏈的TraceId。
如果您還需要實現精準定位業務異常問題,請參見通過調用鏈路和日誌分析定位業務異常問題。
在您業務日誌的Layout的Pattern屬性中添加
%X{EagleEye-TraceID}
配置。您還可以通過添加
%X{span_id}
配置關聯Span ID。重要關聯Span ID功能僅支援4.x及以上探針版本。
如何在業務代碼中擷取
{EagleEye-TraceID}
,請參見ARMS 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預設不會採集應用日誌。