스프링 클라우드 슬루스와 집킨 정리
스프링 클라우드 슬루스와 상관관계 ID
- 상관관계 ID가 존재하지 않는다면 상관관계 ID를 생성해서 서비스 호출에 삽입한다.
- 아웃바운드 서비스 호출에 대한 상관관계 ID 전파를 관리하여 트랜잭션에 대한 상관관계 ID가 자동으로 추가되도록 한다.
- 서비스 A는 서비스 B에 HTTP 요청을 보낼 때, HTTP 헤더에 X-Correlation-ID: abc123를 포함시켜 보낸다.
- 서비스 B는 요청을 수신하여 X-Correlation-ID 헤더에서 상관관계 ID를 읽어들이고, 이 ID를 사용하여 자신의 작업을 추적한다.
@Configuration public class FeignConfig { @Bean public RequestInterceptor requestInterceptor() { return requestTemplate -> { String correlationId = MDC.get("X-Correlation-ID"); if (correlationId != null) { requestTemplate.header("X-Correlation-ID", correlationId); } }; } } @Component public class CorrelationIdFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { String correlationId = request.getHeader("X-Correlation-ID"); if (correlationId == null) { correlationId = UUID.randomUUID().toString(); } MDC.put("X-Correlation-ID", correlationId); response.setHeader("X-Correlation-ID", correlationId); try { filterChain.doFilter(request, response); } finally { MDC.remove("X-Correlation-ID"); } } }
- 서비스 호출의 추적 정보를 집킨 분산 추적 플랫폼에 발행한다.
서비스에 스프링 클라우드 슬루스 추가
- 슬루스 메이븐 의존성을 추가한다.
- 유입되는 모든 서비스 호출을 검사하여 스프링 클라우드 슬루스의 추적 정보가 호출에 포함되었는지 확인한다.
스프링 클라우드 슬루스의 추적분석
- 모든것이 정상적으로 설정되면 서비스 애플리케이션 코드에서 출력되는 모든 로그 문에 스프링 클라우드 슬루스의 추적 정보가 포함된다.
- http://localhost:8072/organization/v1/organization/e839ee96-28….
2024-07-01 12:00:00.000 INFO [my-service,4d6a6b7f4d6a6b7f,4d6a6b7f4d6a6b7f,true] 1 --- [nio-8080-exec-1] c.e.MyService
추적 ID 가 상관관계 ID에 해당하는 용어로 트랜잭션 전체에서 고유한 번호다.
스팬 ID 는 트랜잭션을 시각화하는데 관련이 많다.
로그 수집과 스프링 클라우드 슬루스
- 수집된 로그를 중앙에서 관리하게 하게끔 할 수 있다.
- 엘라스틱 서치
- 로그 스태시
- 키바나 등등..
동작하는 스프링 클라우드 슬루스
- 스프링 클라우드 슬루스와 ELK 스택으로 동일한 아키텍처 구현하는 방법
- 각 컨테이너는 로깅 데이터를 로그스태시 어펜더에 기록한다.
- 로그스태시는 스태시 데이터를 수집, 변환하고 일레스틱서치로 전송
- 검색 가능한 형식으로 인덱싱하고 저장하므로 나중에 키바나에서 쿼리
- 키바나는 인덱스 패턴을 사용해 일레스틱서치에서 데이터를 검색
서비스에서 로그백 구성
- 로그스태시 인코더 추가
- 로그스태시 TCP 어펜더 생성
LogstaEncoder 로 형식을 맞춘 애플리케이션 로그를 확인해볼 수 있다.
도커에서 ELK 스택 애플리케이션 정의 및 실행
ELK 스택 컨테이너를 설정하려면 두 단계를 따라야 한다.
- 로그스태시 구성 파일
- 로그 메시지를 Logstash가 이해할 수 있는 JSON 형식으로 인코딩
- 도커 구성 안에 ELK 스택 애플리케이션 정의
- 구조화된 로그를 생성하여, 로그 데이터를 더 쉽게 검색하고 분석할 수 있도록 한다.
로그 스태시 구성 파일
input {
tcp {
port => 5000
codec => json_lines
}
}
filter {
mutate {
add_tag => [ "manningPublications" ]
}
}
output {
elasticsearch {
hosts => "elasticsearch:9200"
}
}
이걸 docker-compose.yml 파일에 ELK 도커 항목에 추가해줄 수 있다.
집킨을 사용한 분산 추적
- 집킨은 서비스 호출 사이의 트랜잭션을 추적할 수 있는 분산 추적 플랫폼
집킨 연결을 위한 서비스 구성 설정
- 스프링 클라우드 컨피그 서버의 저장소에 있는 각 서비스의 구성파일에 설정된다.
- 집킨과 통신에 사용되는 URL을 정의하는 스프링 프로퍼티인 spring.zipkin.baseUrl 을 정의한다.
zipkin.baseUrl: <http://zipkin:9411>
집킨 서버 구성
- zipkin + 엘라스틱 서치로 구성한다.
- 인메모리 데이터베이스 제한된 데이터를 보유하고 집킨 서버가 종료되거나 장애가 발생하면 데이터가 손실된다.
추적 레벨 설정
- spring.sleuth.sampler.percentage
- 값이 0이면 스프링 클라우드 슬루스가 집킨에 트랜잭션을 전송하지 않는다.
- 값이 .5이면 스프링 클라우드 슬루스가 전체 트랜잭션의 50%를 전송한다.
- 값이 1이면 스프링 클라우드 슬루스가 전체 트랜잭션 100%를 전송한다.
'IT' 카테고리의 다른 글
스프링 배치 - 멀티 스레드 처리 (0) | 2024.07.07 |
---|---|
zipkin (2) | 2024.07.01 |
트랜잭션 (0) | 2024.05.26 |
resilience 4j 발표 내용 정리 (0) | 2024.04.21 |
몽고디비 11장 - 복제 셋 구성요소 (0) | 2024.04.14 |
댓글
이 글 공유하기
다른 글
-
스프링 배치 - 멀티 스레드 처리
스프링 배치 - 멀티 스레드 처리
2024.07.07 -
zipkin
zipkin
2024.07.01 -
트랜잭션
트랜잭션
2024.05.26 -
resilience 4j 발표 내용 정리
resilience 4j 발표 내용 정리
2024.04.21