scouter icon indicating copy to clipboard operation
scouter copied to clipboard

Istio 환경에서 Scouter 와 Tracing Integrated 이슈

Open sbooms opened this issue 3 years ago • 3 comments

안녕하세요.

https://github.com/scouter-project/scouter/issues/799 <-- 해당 이슈가 수정되었다는 것을 확인 하여 v2.15.0을 받아 trace_propagete_b3_header=false로 하여 적용 중에 있습니다.

허나 저희 프로젝트는 Istio를 적용중이라 아래와 같은 문제가 발생했습니다.

image

  • 문제점
  1. Istio Ingress G/W 부터 b3관련 Trace 헤더가 추가되어 Scouter Agent가 설치된 Java의 최상위 gxid가 없어 Scouter Client에서 흐름 조회 불가
  2. Jager와 Scouter를 연계하여 보고 싶은데 "x-b3-traceid" 와 "x-scouter-gxid"가 상이 (코드를 보니 헥사 변환하면서 짧게 변환하는 듯 합니다)
  • 제가 원하는 해결책
  1. 다음 코드에서 scouter관련 헤더가 처음 만들어 질 때, txid를 b3TraceId로 세팅되면 함. (혹은 특정 config 필드를 추가하여 해당 필드가 true일 때만 동작)

이전코드

               if (b3ModeValid) {
                      ctx.gxid = HexCodec.lowerHexToUnsignedLong(b3TraceId);
                      ctx.txid = HexCodec.lowerHexToUnsignedLong(getHeader(request, B3Constant.B3_HEADER_SPANID));
                      String caller = getHeader(request, B3Constant.B3_HEADER_PARENTSPANID);
                      if (caller != null) {
                          ctx.caller = HexCodec.lowerHexToUnsignedLong(caller);
                          ctx.is_child_tx = true;
                      }
                      ctx.b3Mode = true;
                      ctx.b3Traceid = b3TraceId;
                }

. 변경됬으면 하는 코드

               if (b3ModeValid) {
                      ctx.gxid = HexCodec.lowerHexToUnsignedLong(b3TraceId);
                      ctx.txid = HexCodec.lowerHexToUnsignedLong(b3TraceId);
                      ctx.b3Mode = true;
                      ctx.b3Traceid = b3TraceId;
                }
  1. x-b3-traceid가 존재하면 HexCodec.lowerHexToUnsignedLong 하지말고 원 String을 x-scouter-gxid에 적용이 가능할까요?? (이건 변경하려면 구조를 바꿔야 할거 처럼 보이긴 하는데... 혹시 가능한 방향이 있다면 답변 부탁드리겠습니다.)

sbooms avatar Dec 10 '21 08:12 sbooms

scouter의 transaction id는 8 byte long 이라서 16 byte를 사용하는 jaeger의 traceId를 사용할 수 없습니다. 이 변경은 breaking change 이며 전반적인 흐름과 저장소의 구조까지 변경이 필요합니다.

첫번째 부분은 ingress에서 x-b3-traceid 가 생성되는 경우인 것 같은데 이 경우에 x-b3-spanid 나 x-b3-parentspanid 값은 없는건가요?

gunlee01 avatar Dec 25 '21 06:12 gunlee01

ingress에서 생성되기 때문에 x-b3-spanid 나 x-b3-parentspanid 값이 넘어와서 세팅은 되는데... ingress에는 scouter agent가 없어 최상단 x-scouter-gxid값이 scouter에 전달이 안되어 문제가 되는 상황입니다. (하여 scouter client 에서 gxid를 클릭해도 빈 화면만 보이는 상황)

sbooms avatar Dec 29 '21 00:12 sbooms

trace_propagete_b3_header=true 인 경우만 b3 헤더를 사용하여 gxid, txid를 결정하도록 변경 예정입니다.

gunlee01 avatar Mar 26 '22 07:03 gunlee01