- 상관관계 ID를 사용해 여러 서비스 사이의 트랜잭션을 서로 연결한다.
- 여러 서비스 사이의 로그 데이터를 검색 가능한 단일 소스로 수집한다.
- 여러 서비스 사이의 사용자 트랜잭션 흐름을 시각화하고 트랜잭션 각 부분의 성능 특성을 이해한다.
이 세가지 사항을 만족하기 위해 세가지 다른 기술을 사용한다.
- 스프링 클라우드 슬루스 : 상관관계ID를 사용해 HTTP 호출을 측정한는 스프링 클라우드 프로젝트이며, 생성 중인 추적 데이터를 오픈 집킨에 공급할 수 있는 연결고리를 제공한다.
- 페이퍼트레일 : 여러 데이터 소스의 로그 데이터를 검색이 가능한 단일 데이터베이스로 수집하는 클라우드 기반의 프리미움 서비스다
- 집킨 : 여러 서비스 사이의 트랜잭션 흐름을 보여주는 오픈 소스 기반의 데이터 시각화 도구다.
스프링 클라우드 슬루스와 상관관계ID
- 상관관계ID가 없다면 상관관계 ID를 투명하게 생성하고 서비스 호출에 주입한다.
- 서비스에서 나가는 호출에 대한 상관관계 ID 전파를 관리해 트랜잭션의 상관관계 ID가 자동으로 나가는 호출에 추가된다.
- 상관관계 정보를 스프링 MDC 로그에 추가해 생성된 상관고나걔 ID가 스프링 부트의 기본 SL4J와 로그백 구현으로 자동적으로 로깅된다.
- 선택적으로 서비스의 추적 정보를 집킨 분산 추적 플랫폼에 전송한다.
스프링 클라우드 슬루스의 추적 분석
스프링 클라우드 슬루스는 4개의 추적 정보를 각 로그에 추가할 수 있다.
- 서비스 애플리케이션 이름 : 로그를 출력하는 애플리케이션 이름이다.
- 추적ID : 상관관걔 ID와 동급 용어
- 스팬ID : 전체 트랜잭션의 일부를 나타내는 고유 ID
- 집킨에 추적 데이터 전송 여부 : 추적 블록 끝부분에 있는 TRUE/FALSE를 표시해 추적 정보의 집킨 전송 여부를 결정한다.
로그 수집과 스프링 클라우드 슬루스
로그 데이터를 인덱싱하고 검색할 수 있는 중앙 수집 지점을 만들어 전체 서비스 인스턴스의 모든 로그를 실시간 스트리밍 하는 것이다.
※ 스프링 부트와 사용할 수 있는 로그 수집 솔루션
- Elasticsearch
- Logstash
- Kibana
- 그레이로그
- 스플렁크
- 수모로직
- 페이퍼트레일
주울로 HTTP 응답에 상관관계 ID 추가
스프링 클라우드 슬루스가 수행한 서비스 호출에서 HTTP응답을 검사하면 호출에 사용된 추적 ID가 HTTP응답 헤더로 반환되지 않는다는 것을 알 수 있다. 하지만 HTTP응답으로 상관관계 ID나 추적 ID를 반환한느 것이 문제를 디버깅할 때 매우 중요하다는 것을 깨달았다. 이를 해결하기 위해 주울의 사후 필터를 작성해 HTTP응답에 추적 ID를 삽입하는 것이다. 이 필터를 수정해 클라우드 슬루스의 헤더를 추가할 것이다.
오픈집킨으로 분산 추적
집킨 서버를 실행하려면 약간의 구성이 필요하다. 집킨을 실행할때 유일하게 구성해야 할 것은 서비스가 보낸 추적 데이터를 저장할 집킨의 백엔드 데이터 저장소다.
- 인메모리 데이터
- MySQL
- 카산드라
- Elasticsearch
어노테이션 :
@EnableZipkinServer : 스프링 부트 서비스를 집킨 서버로 시작하게 한다.
'Programming > MSA' 카테고리의 다른 글
MSA에 대한 기본개념 - 1. Legacy에서 MSA로 진화하는 여정 (0) | 2022.06.08 |
---|---|
(아키텍처) 현대적 어플리케이션 구축을 위한 Outer아키텍처 시 고려할 점 (0) | 2022.03.16 |
[완독정리]스프링 마이크로서비스 코딩 공작소 8.메시지와 EDA, 마이크로서비스의 사례-길벗 (0) | 2021.03.06 |
[완독정리]스프링 마이크로서비스 코딩 공작소 7.마이크로서비스의 보안-길벗 (0) | 2021.03.06 |
[완독정리]스프링 마이크로서비스 코딩 공작소 5.나쁜 상황에 대비한 스프링 클라우드와 넷플릭스 히스트릭스의 클라이언트 회복성 패턴-길벗 (0) | 2021.03.04 |