-
[Spring Boot3 + Jaeger] 스프링부트3에 예거 설정 추가 하는 방법Programming Language/Java 2024. 7. 31. 10:47반응형
Jaeger 는 Uber Technologies 에서 개발한
오픈소스 분산 트레이싱 시스템으로,
마이크로서비스 아키텍처에서 서비스 간의 트랜잭션을
추적하고 분석 할 수 있도록 해준다.
최근 회사에서 프로젝트를 진행하면서
여러 서비스 간의 API 흐름을 추적하고 모니터링하기 위해
Jaeger 를 사용하기로 했다.
내가 적용한 서비스는 Spring Boot 3.x 로 개발하고 있는데,
Jaeger 를 적용하는 과정에서 Spring Boot 2.x 버전에서
적용하는 방법과 차이가 있어서 정리를 하려고 한다.
사용한 도구
Gradle 8.5
Java 21
Spring Boot 3.x
Jaeger (all-in-one) 1.59
io.opentracing.contrib:opentracing-spring-jaeger-web-starter 실패
opentracing 에서 개발한
opentracing-spring-jaeger-web-starter 의 경우
spring boot 2.x 버전에서는
application.yml 에 추가로
간단하게 동작이 가능하다고 하지만,,
나의 경우 spring boot 3.x 를 사용해서
Jaeger 에 정상 등록이 안됐다.
opentracing github 을 확인해보니
2021년 1월 3일 커밋을 마지막으로
더이상 개발되지 않고 있고,
Jaeger 문서 에서도 OpenTelemetry 를
사용하는 것을 추천하고 있다.
Jaeger 설치하기 (Docker)
docker-hub 의 Jaeger All-in-One 이미지를 사용하고
OTLP (OpenTelemetry Protocol) 을 사용하기 위해서
COLLECTOR_OTLP_ENABLED=true 로 설정 하였다.
docker run -d --rm --name jaeger \ -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 -e COLLECTOR_OTLP_ENABLED=true \ -p 6831:6831/udp \ -p 6832:6832/udp \ -p 5778:5778 \ -p 16686:16686 \ -p 4317:4317 \ -p 4318:4318 \ -p 14250:14250 \ -p 14268:14268 \ -p 14269:14269 \ -p 9411:9411 \ jaegertracing/all-in-one:1.59
필요한 의존성
우선 OpenTelemetry BOM 을 설정하여
OpenTelemetry 의 모든 의존성을 정렬한다.
gradle 의 경우 아래 2가지 방법이 있다.
주의점은 두 방법을 혼합해서 사용하면 안된다는 것
(다 적용했는데 동작을 안해서 한참 헤맸다...)
// build.gradle.kts import org.springframework.boot.gradle.plugin.SpringBootPlugin plugins { id("java") id("org.springframework.boot") version "3.3.O" } dependencies { implementation(platform(SpringBootPlugin.BOM_COORDINATES)) implementation(platform("io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.6.0")) }
// build.gradle.kts plugins { id("java") id("org.springframework.boot") version "3.3.O" id("io.spring.dependency-management") version "1.1.0" } dependencyManagement { imports { mavenBom("io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.6.0") } }
위와 같이 BOM 을 설정해 주고 아래의 의존성을 추가해주면
Spring Boot 3 에서 OpenTelemetry 를 사용 할 수 있게 된다.
dependencies { implementation("io.opentelemetry.instrumentation:opentelemetry-spring-boot-starter") }
OpenTelemetry 의 Jaeger 설정을 사용하기 위해서
아래 의존성을 추가해 준다.
implementation("io.opentelemetry:opentelemetry-exporter-jaeger:1.34.1")
예제 코드
// ApiController.java @RestController @RequestMapping("/api") public class ApiController { @GetMapping("/status") public String status() { return "OK"; } }
// application.yml spring: application: name: SpringBoot3WithJaeger otel: exporter: otlp: protocol: grpc endpoint: http://localhost:4317 traces: exporter: jaeger
테스트 진행
Spring Application 을 실행한 후,
작성한 API (GET /api/status) 를 호출한다.
Jaeger 화면
참고 문서
OpenTelemetry 설정값 문서
Jaeger 배포 문서반응형'Programming Language > Java' 카테고리의 다른 글
[Java] CSV 를 Excel 로 변환하는 Java 코드 예제 (1) 2023.02.08