클라우드/DevOps

Service Mesh : Telemetry (Jaeger) - 분산 추적, 헤더 확장

dayeonsheep 2024. 5. 27. 22:32

업스트림 요청

업스트림 pod 

업스트림 사이드카 -> child span을 생성

 

<-> 다운스트림 요청, 리턴되는 데이터 흐름 

 

전체 흐름 표시 = Trace

각각의 개별 타이밍 요소 = Span

 

컨테이너로부터 사이드카로 가는 요청을 추적

한 컨테이너에서 다른 컨테이너로 요청하면 그게 프록시를 거치니까 스팬이 두 배가 될 수 있음.

 

 

Service 선택->

어떤 식으로든 방문한 서비스의 모든 트레이스를 보여줌.

한 번 클릭하면 3개의 HTTP 요청이 시스템을 통과하게 됨.

이 사용자의 인터페이스 3개의 HTTP 요청들을 주게 됨... 이 서비스 안에서 3개... 정해놓은...

 

 

같은 서비스가 겹치는 이유 -> 프록시 있으니까~

 

 

이렇게 확장해서 보게되면 url로 city truck을 클릭해서 저래 됐구나를 알 수도 있는거셈

 

헤더를 확장시켜야만 동작한다!?

분산 추적을 작동시키려면 코드를 수정해야한다!?

 

아키텍처를 통과하는 요청 체인이 있다면, 분산 추적 메커니즘은 그 모든 요청이 하나의 트레이스를 위한 것이 되도록 해야함.

그런 요청들을 연관시켜야한다는 것.

그걸 하는 방법 => 반자동(semi-automatic)

 

guid:x-request-id

무작위 고유 식별 아이디

똑같은 x-request-id

모든 트레이스의 이 id가 똑같음

만일 요청의 request-id가 똑같으면 모두 하나의 스팬으로 그룹화 됨.

 

근데 이 id가 어디서 오냐?

istio가 자동생성한거임

 

만일 유입된 요청에 이 request-id가 없으면? 일단 없지 않을거임

프록시가. 타깃 포드 프록시를 호출할 때 자동으로 저 아이디라는 헤더를 추가하고 자동으로 그 guid를 생성하게 될거임.

 

자동으로 외부로 전송될 것 같지만 아님.?

what is required for distributed tracing with istio?

응용 프로그램, 코드를 확장시켜야됨.

trace context를.

 

직접 안하면 여러 개의 트레이스가 생길 것이고 각각에는 하나나 두 개의 스팬만 생길 거고 다 분산될거임. 

트레이스에 모든 스팬이 포함되길 원하면 guid가 같아야 함.

 

그 값을 외부로 가는, 컨테이너로 가는 요청에 전송해야 동일한 request-id를 얻게 됨.(새로 생성X)

아키텍처에 배포해야 할 모든 컨테이너에 이걸 배포해야됨.

그래야 하나로 통합된다~~

 

답변에서는 이스티오 사이드카,

즉 다른 말로 하자면 envoy 프록시에는 외부로 가는 요청을 그것을 유발한 내부로 가는 요청과 연관시키는 암묵적 방법이 없다고 나와 있습니다.

유입되는 id가 47인 요청이 있고, 만일 이 컨테이너가 약간의 처리를 하고 외부로 가는 요청을 전송하는 x-request-id 필드가 없다면 여기 있는 이 프록시는 유입되는 요청에 의해 이 요청이 유발되었다는 걸 알 수 있는 방법이 없음.

 

자동 헤더 확산이 없으면 이 모든 트레이싱 시스템의 유용성이 훨씬 떨어진다는 것