콘텐츠로 이동

JAVA

Guance를 사용해 JAVA 애플리케이션에 연결합니다:

  • 애플리케이션에서 사용자 정의 메트릭 데이터를 수집합니다.
  • 애플리케이션에서 트레이싱 데이터를 수집합니다.
  • 애플리케이션의 모든 로그를 관리합니다.

구성

메트릭 수집

jvm 문서를 참고하세요.

트레이싱 수집

애플리케이션에서 해당 수집기를 활성화한 다음, JAVA agent 도구를 사용해 trace 정보를 가져와 Guance로 전송합니다.

로그 연동

opentelemetry-java(이하 "Agent")는 javaagent 방식으로 애플리케이션에 주입되며, 애플리케이션에서 trace 정보가 생성된 후 MDC를 설정하면 traceIdspanId를 매개변수로 log에 전달할 수 있습니다. 이렇게 하면 log가 출력될 때 traceIdspanId가 함께 포함됩니다.

MDC 정보

매핑 진단 컨텍스트(MDC)는 서로 다른 소스에서 들어오는 교차 로그 출력을 구분하는 도구입니다. — log4j MDC 문서

이는 스레드 로컬 컨텍스트 정보를 포함하며, 로그 라이브러리가 캡처하는 각 로그 이벤트에 복사됩니다.

OTEL JAVA Agent는 현재 span에 대한 몇 가지 정보를 각 로그 레코드 이벤트의 MDC 복사본에 주입합니다.

  • trace_id 현재 trace id( Span.current().getSpanContext().getTraceId() 와 동일);
  • span_id 현재 span id( Span.current().getSpanContext().getSpanId() 와 동일);
  • trace_flags 현재 trace flag. W3C trace flag 형식( Span.current().getSpanContext().getTraceFlags().asHex() 와 동일)으로 포맷됩니다.

이 세 정보는 패턴/포맷에서 지정하면 로그 라이브러리가 생성한 로그 문장에 포함할 수 있습니다.

팁: logback을 사용하는 SpringBoot 구성에서는 다음 내용만 덮어써서 MDC를 로그 라인 logging.pattern.level에 추가할 수 있습니다.

logging.pattern.level = trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p

이렇게 하면 애플리케이션 로그를 파싱하는 어떤 서비스나 도구도 trace/span을 로그 문장과 연결할 수 있습니다.

로그 설정

APM 도구마다 로그 pattern 설정이 다르며, logback.xml을 예로 들면 다음과 같습니다:

OpenTelemetry MDC 매개변수:

  • trace_id
  • span_id
<property name="log.pattern" value="%d{HH:mm:ss} [%thread] %-5level %logger{10} [traceId=%X{trace_id} spanId=%X{span_id} userId=%X{user-id}] %msg%n" />

<!-- %m 출력 정보, %p 로그 레벨, %t 스레드 이름, %d 날짜, %c 클래스의 전체 이름,,,, -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>${log.pattern}</pattern>
        <charset>UTF-8</charset>
    </encoder>
</appender>

DDTrace MDC 매개변수:

  • dd.service
  • dd.trace_id
  • dd.span_id
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - [%method,%line] %X{dd.service} %X{dd.trace_id} %X{dd.span_id} - %msg%n" />

<!-- %m 출력 정보, %p 로그 레벨, %t 스레드 이름, %d 날짜, %c 클래스의 전체 이름,,,, -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>${log.pattern}</pattern>
        <charset>UTF-8</charset>
    </encoder>
</appender>-

참고 문서

DDTrace Log

springboot-ddtrace-server

springboot-opentelemetry-otlp-server

문서 평가

이 페이지가 도움이 되었나요?