全部產品
Search
文件中心

Application Real-Time Monitoring Service:業務日誌關聯調用鏈的TraceId資訊

更新時間:Nov 16, 2024

您可以在應用的業務日誌中關聯調用鏈的TraceId資訊,從而在應用出現問題時,能夠通過調用鏈的TraceId快速關聯到業務日誌,及時定位、分析並解決問題。

前提條件

說明

僅應用監控專家版支援該功能。

背景資訊

ARMS在業務日誌中關聯調用鏈TraceId的功能基於MDC(Mapped Diagnostic Context)機制實現,支援主流的Log4j、Log4j2和Logback日誌架構。

開啟關聯業務日誌與TraceId開關

  1. 登入ARMS控制台,在左側導覽列選擇應用監控 > 應用列表

  2. 應用列表頁面頂部選擇目標地區,然後單擊目標應用程式名稱。

    說明

    語言列的表徵圖含義如下:

    Java表徵圖:接入應用監控的Java應用。

    image:接入應用監控的Golang應用。

    image:接入應用監控的Python應用。

    -:接入Managed Service for OpenTelemetry的應用。

  3. 在上方導覽列選擇應用配置 > 自訂配置

  4. 自訂配置頁簽的應用日誌關聯配置地區,選擇日誌源為Log ServiceSLS,開啟關聯業務日誌與TraceId開關,選擇Log Service所在地區,然後綁定Project和Logstore。

    您還可以根據需求開啟日誌自動填滿traceId日誌自動填滿spanId開關。

    image

    說明
  5. (可選)在您業務日誌的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>
  6. 重啟應用。

    在應用的業務日誌中成功列印出TraceId資訊,則說明業務日誌關聯調用鏈的TraceId關聯成功,如下圖所示。dg_am_log_traceid

  7. (可選)配置SLS日誌採集接入,將應用日誌上傳至上述步驟綁定的Project和Logstore中。

    ARMS預設不會採集應用日誌。