OpenTelemetry 활용 분산 추척 기능 구현 1

날아올라돼지야·2024년 8월 30일
0

이번 강의에서는 OpenTelemetry를 활용하여 마이크로서비스에서 분산 추적 기능을 구현하는 방법을 살펴보겠습니다.

1. 실행 중인 컨테이너 중지

먼저 현재 실행 중인 모든 컨테이너를 중지해야 합니다. 이를 위해 다음 명령어를 실행합니다:

docker compose down

이 명령어를 실행하면 모든 컨테이너가 중지됩니다.

2. OpenTelemetry 의존성 추가

이제 OpenTelemetry와 관련된 의존성을 pom.xml 파일에 추가합니다.

  • pom.xml 파일에서 OpenTelemetry 관련 의존성을 추가합니다. 예를 들어, 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 스코프를 사용하여 컴파일 시점이 아닌 런타임에만 해당 라이브러리를 사용하도록 설정합니다.

3. 로그 패턴 구성

application.yml 파일에서 OpenTelemetry를 사용하여 로그에 추적 정보를 추가하는 패턴을 설정합니다.

logging:
  pattern:
    level: "%5p [${spring.application.name},%X{trace_id:-},%X{span_id:-}]"

이 패턴은 로그 메시지 앞에 로그 수준(%5p), 애플리케이션 이름(spring.application.name), trace ID, span ID를 추가합니다.

4. 로그 메시지 수정

이제 기존에 사용하던 correlationId 기반 로그를 OpenTelemetry 기반으로 변경합니다.

예를 들어, CustomerController 클래스에서 다음과 같이 로그 메시지를 수정합니다:

logger.info("fetchCustomerDetails() method start");
// 메서드 로직...
logger.info("fetchCustomerDetails() method end");

OpenTelemetry는 런타임 시 자동으로 trace IDspan ID를 로그에 추가합니다.

다른 컨트롤러 클래스들(LoansController, CardsController)에서도 동일한 방식으로 로그 메시지를 수정합니다.

5. Tempo와 Grafana를 통한 추적 정보 시각화

  • OpenTelemetryTempoGrafana와 함께 사용하여 추적 정보를 시각화할 수 있습니다.
  • TempoGrafana 생태계의 또 다른 오픈 소스 제품으로, 분산 추적 정보를 저장하고 분석하는 데 사용됩니다.
  • GrafanaLoki, Prometheus, Tempo 등 다양한 데이터 소스와 통합하여 시각화 및 모니터링을 지원합니다.

이 과정을 통해 OpenTelemetry가 자동으로 마이크로서비스의 추적 정보를 수집하고, TempoGrafana를 통해 해당 정보를 시각화할 수 있게 됩니다.

6. Docker 이미지 재생성

  • 이제 OpenTelemetry 관련 변경 사항을 적용한 후 모든 마이크로서비스에 대해 최신 Docker 이미지를 생성합니다.
  • 다음 명령어를 사용하여 기존 이미지를 삭제한 후, 새 이미지를 생성합니다:
# 기존 이미지 삭제
docker rmi <image_id>

# 새로운 Docker 이미지 생성
mvn clean package -DskipTests
docker build -t accounts:s11 .

이 작업은 각 마이크로서비스에 대해 반복합니다.

결론

이번 강의에서는 OpenTelemetry를 사용하여 분산 추적을 구현하는 방법을 학습했습니다. OpenTelemetry는 로그 메시지에 자동으로 trace IDspan ID를 추가하며, TempoGrafana와 함께 사용하여 추적 정보를 효과적으로 시각화할 수 있습니다. 다음 강의에서는 이러한 설정을 바탕으로 Docker Compose 파일을 업데이트하고 TempoGrafana를 통합하는 방법을 살펴보겠습니다.

감사합니다. 다음 강의에서 뵙겠습니다.

profile
무슨 생각하며 사니

0개의 댓글

Powered by GraphCDN, the GraphQL CDN