반응형
앞으로 구현할 Zipkin 개요입니다.
Zipkin은 마이크로서비스와 같은 분산 환경에서 데이터를 추적하기 위한 시스템 (오픈소스)입니다. 요청이 시작되면 Trace ID가 생성되고 이 ID로 분산 추적을 합니다.
Span
- 하나의 요청에 사용되는 작업의 단위
- 64 bits unique ID
Trace
- 트리 구조로 이루어진 Span set
- 하나의 요청에 대한 같은 Trace ID 발급
Spring Cloud Sleuth
- Spring Boot Application을 Zipkin과 연동
- 요청 값에 따른 Trace ID와 Span ID 부여
요약
Zipkin 설치
Zipkin과 Sleuth 설정
테스트
소스코드
설치
curl -sSL https://zipkin.io/quickstart.sh | bash -s
실행
java -jar zipkin.jar
실행되면, 127.0.0.1:9411에서 확인할 수 있습니다.
User Service와 Order Service에 아래 내용을 추가합니다.
pom.xml에 Dependency를 추가합니다.
<!-- zipkin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<!-- sleuth -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
application.yml에 Zipkin과 Sleuth 설정을 합니다.
spring:
application:
name: user-service
zipkin:
base-url: http://127.0.0.1:9411
enabled: true
sleuth:
sampler:
probability: 1.0 # 로그를 몇 퍼센트 전달할 것인가
이제 서비스를 호출하는 곳에 로그를 남겨서 TID를 확인합니다.
User-service의 UserServiceImpl.java에 아래와 같이 로그를 추가합니다.
/* CircuitBreaker */
log.info("Before call orders microservice");
CircuitBreaker circuitBreaker = circuitBreakerFactory.create("circuitbreaker");
List<ResponseOrder> ordersList = circuitBreaker.run(() -> orderServiceClient.getOrders(userId),
throwable -> new ArrayList<>()); // run(호출 메소드, 에러나면 대처)
log.info("After called orders microservice");
Order-service의 OrderController.java에 아래와 같이 로그를 추가합니다.
// 주문 내역 조회
@GetMapping("/{userId}/orders")
public ResponseEntity<List<ResponseOrder>> getOrder(@PathVariable("userId") String userId) throws Exception{
log.info("Before retrieve orders data");
Iterable<OrderEntity> orderList = orderService.getOrdersByUserId(userId);
List<ResponseOrder> result = new ArrayList<>();
orderList.forEach(v -> {
result.add(new ModelMapper().map(v, ResponseOrder.class));
});
log.info("Add retrieved orders data");
return ResponseEntity.status(HttpStatus.OK).body(result);
}
테스트
주문을 해보니 아래와 같이 로그가 보입니다. TID를 가져와서 Zipkin에서 조회하겠습니다.
조회하니 아래와 같이 뜹니다. 이렇게 TID를 통해서 데이터를 추적할 수 있습니다.
끝.
반응형
'IT > Spring Cloud' 카테고리의 다른 글
모니터링 - Prometheus, Grafana (0) | 2022.02.04 |
---|---|
모니터링 - Micrometer (0) | 2022.02.04 |
CircuitBreaker (0) | 2022.01.30 |
Apache Kafka 활용 (1) (0) | 2022.01.23 |
데이터 동기화 - Kafka 설정 (0) | 2022.01.08 |