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