이번 강의에서는 OpenTelemetry를 활용하여 마이크로서비스에서 분산 추적 기능을 구현하는 방법을 살펴보겠습니다.
먼저 현재 실행 중인 모든 컨테이너를 중지해야 합니다. 이를 위해 다음 명령어를 실행합니다:
docker compose down
이 명령어를 실행하면 모든 컨테이너가 중지됩니다.
이제 OpenTelemetry와 관련된 의존성을 pom.xml 파일에 추가합니다.
accounts
마이크로서비스의 pom.xml 파일을 엽니다:<properties>
<otelVersion>1.27.0</otelVersion> <!-- 현재 사용 가능한 최신 버전 -->
</properties>
<dependencies>
<!-- 기존 의존성들... -->
<dependency>
<groupId>io.opentelemetry.javaagent</groupId>
<artifactId>opentelemetry-javaagent</artifactId>
<version>${otelVersion}</version>
<scope>runtime</scope>
</dependency>
</dependencies>
otelVersion
은 OpenTelemetry의 버전을 나타내며, runtime
스코프를 사용하여 컴파일 시점이 아닌 런타임에만 해당 라이브러리를 사용하도록 설정합니다.application.yml 파일에서 OpenTelemetry를 사용하여 로그에 추적 정보를 추가하는 패턴을 설정합니다.
logging:
pattern:
level: "%5p [${spring.application.name},%X{trace_id:-},%X{span_id:-}]"
이 패턴은 로그 메시지 앞에 로그 수준(%5p
), 애플리케이션 이름(spring.application.name
), trace ID, span ID를 추가합니다.
이제 기존에 사용하던 correlationId
기반 로그를 OpenTelemetry 기반으로 변경합니다.
예를 들어, CustomerController 클래스에서 다음과 같이 로그 메시지를 수정합니다:
logger.info("fetchCustomerDetails() method start");
// 메서드 로직...
logger.info("fetchCustomerDetails() method end");
OpenTelemetry는 런타임 시 자동으로 trace ID와 span ID를 로그에 추가합니다.
다른 컨트롤러 클래스들(LoansController, CardsController)에서도 동일한 방식으로 로그 메시지를 수정합니다.
이 과정을 통해 OpenTelemetry가 자동으로 마이크로서비스의 추적 정보를 수집하고, Tempo와 Grafana를 통해 해당 정보를 시각화할 수 있게 됩니다.
# 기존 이미지 삭제
docker rmi <image_id>
# 새로운 Docker 이미지 생성
mvn clean package -DskipTests
docker build -t accounts:s11 .
이 작업은 각 마이크로서비스에 대해 반복합니다.
이번 강의에서는 OpenTelemetry를 사용하여 분산 추적을 구현하는 방법을 학습했습니다. OpenTelemetry는 로그 메시지에 자동으로 trace ID와 span ID를 추가하며, Tempo 및 Grafana와 함께 사용하여 추적 정보를 효과적으로 시각화할 수 있습니다. 다음 강의에서는 이러한 설정을 바탕으로 Docker Compose 파일을 업데이트하고 Tempo와 Grafana를 통합하는 방법을 살펴보겠습니다.
감사합니다. 다음 강의에서 뵙겠습니다.