스프링
마이크로서비스
코딩 공작소
2019.07.08
Chapter 9.
스프링 클라우드 슬루스와 집킨을
이용한 분산 추적
9. 스프링 클라우드 슬루스와 집킨을 이용한 분산 추적
- 상관관계 ID를 사용해 여러 서비스 사이의 트랜잭션을 서로 연결
- 여러 서비스 사이의 로그 데이터를 검색 가능한 단일 소스로 수집
- 여러 서비스 사이의 트랜잭션 흐름을 시각화하고 트랜잭션 각 부분의 성능 특성을 이해
분산 디버깅 기법
9. 스프링 클라우드 슬루스와 집킨을 이용한 분산 추적
- 스프링 클라우드 슬루스(Spring Cloud Sleuth) : 상관관계 ID를 사용해 HTTP 호출을 측정하는 스프링 클라우드 프로젝트, 생성 중인 추적 데이터를 오픈 집킨에 공급할 수 있는 연결 고리 제공
- 페이퍼트레일(Papertrail) : 여러 데이터 소스의 로그 데이터를 검색이 가능한 단일 데이터베이스로 수집하는 클라우드 기반의 프리미움 서비스
- 집킨(Zipkin) : 여러 서비스 사이의 트랜잭션 흐름을 보여 주는 오픈 소스 기반의 데이터 시각화 도구, 트랜잭션을 컴포넌트별로 분해하고 성능 과열점이 어디서 발생했는지 시각적으로 확인
분산 디버깅 기술
9.1 스프링 클라우드 슬루스와 상관관계 ID
스프링 클라우드 슬루스를 추가함으로써 수행 가능한 일
- 상관관계 ID가 없다면 상관관계 ID를 투명하게 생성하고 서비스 호출에 주입
- 서비스에서 나가는 호출에 대한 상관관계 ID 전파를 관리해 트랜잭션의 상관관계 ID가 자동으로 나가는 호출에 추가
- 상관관계 정보를 스프링 MDC(Mapped Diagnostic Context) 로그에 추가해 생성된 상관관계 ID가 스프링 부트의 기본 SL4J와 로그백 구현으로 자동적으로 로깅
- 선택적으로 서비스의 추적 정보를 집킨 분산 추적 플랫폼에 전송
9.1.1 라이선싱과 조직 서비스에 스프링 클라우드 슬루스 추가
슬루스 추가
- 서비스로 들어오는 모든 HTTP 호출을 검사하고 그 호출에서 스프링 클라우드 슬루스의 추적 정보가 존재하는지 확인, 추적 정보가 있다면 마이크로서비스로 전달된 추적 정보를 수집해 로깅 및 처리를 위해 서비스에 제공
- 스프링 클라우드 슬루스 추적 정보를 스프링 MDC에 추가해 마이크로서비스에서 생성된 모든 로그 문이 로그에 추가
- 스프링 클라우드 추적 정보를 서비스에서 나가는 모든 HTTP 호출과 스프링 메시징 채널의 메시지에 삽입
9.1.2 스프링 클라우드 슬루스의 추적 분석
슬루스 4개의 추적 정보
- 서비스 애플리케이션 이름: 로그를 출력하는 애플리케이션 이름
sping.application.name 프로퍼티를 사용
- 추적 ID(trace ID): 추적 ID는 상관관계 ID와 동급 용어이며, 전체 트랜잭션에서 고유한 숫자
- 스팬 ID(span ID): 스팬 ID는 전체 트랜잭션의 일부를 나타내는 고유 ID, 트랜잭션을 시각화하는 데 유용
- 집킨에 추적 데이터 전송 여부: 스프링 클라우드 슬루스의 추적 블록 끝부분에 있는 true/false를 표시해 추적 정보의 집킨 전송 여부 결정
9.2 로그 수집과 스프링 클라우드 슬루스
여러 서버 사이의 문제를 디버깅해야 하는 경우 문제점
- 여러 서버에 로그인하며 각 서버의 로그 검사
- 로그를 파싱하고 관련 로그 항목을 식별하는 자체 질의 스크립트 작성
- 개발자가 서버에 있는 로그를 백업해야 하므로 다운된 서비스 복구 과정을 연장해야 한다
9.2 로그 수집과 스프링 클라우드 슬루스
해결 방안
로그 데이터를 인덱싱하고 검색할 수 있는 중앙 수집 지점을 만들어 전체 서비스 인스턴스의 모든 로그를 실시간 스트리밍한다
9.2.1 스프링 클라우드 슬루스/페이퍼트레일의 실제 구현
페이퍼트레일 설정
- 페이퍼트레일 계정 생성하고 페이퍼트레일의 syslog 커넥터 구성
- 모든 도커 컨테이너의 표준 출력을 포착하기 위해 로그스파우트(Logspout) 도커 컨테이너를 정의
- 스프링 클라우드 슬루스의 상관관계 ID를 기반으로 질의문을 실행해 구현 테스트
9.3 오픈집킨으로 분산 추적
집킨
- 여러 서비스 호출 사이의 트랜잭션을 추적하는 분산 추적 플랫폼
- 트랜잭션의 소요 시간을 그래픽으로 확인 가능
- 호출에 관련된 각 마이크로서비스별로 소요된 시간을 분석
스프링 마이크로서비스 코딩 공작소 2019.07.08 Chapter 9. 스프링 클라우드 슬루스와 집킨을 이용한 분산 추적
스프링 클라우드 슬루스와 집킨을 이용한 분산 추적
By Sungbin, Song
스프링 클라우드 슬루스와 집킨을 이용한 분산 추적
- 109