0

Google 스택 드라이버 UI에서 볼 수 있도록 마이크로 서비스에 추적 기능을 추가하려고합니다. 우리는 Kubernetes 컨테이너에 배치 된 Java Springboot 응용 프로그램을 사용하고 있으며, 각 마이크로 서비스는 http를 통해 통신합니다. 우리는 RestTemplate을 bean으로 옮기면 작동하는 Sleuth와 Zipkin이 있다는 것을 알았습니다. 그러나 우리는 각각의 컨테이너에 zipkin pod를 배치하거나 새로운 zipkin collector pod를 만들 필요가 없습니다. 이상적으로 우리는 sleuth/zipkin을 사용하여 sdk를 추적하는 Google 클라우드를 사용하여이 작업을하고 싶습니다. sdk를 가지고 놀면 Stackdriver에 직접 응용 프로그램에서 데이터를 보내는 google cloud grpc 라이브러리를 사용하여 Stackdriver로 데이터를 가져올 수 있습니다. 이제 우리는 추적 ID를 다운 스트림 마이크로 서비스에 보낼 수 있지만 동일한 추적 ID에서 새 범위를 작성하는 방법을 찾지 못하고 항상 새로운 ID를 작성한다는 문제점이 있습니다. 이 작업을 수행하는 방법에 대한 문서를 찾을 수없는 것 같습니다. 확실히 우리가하고있는 것은이 도서관이 구축 한 것입니다. 모든 포인터가 도움이 될 것입니다. 이 내 문제 때문에다운 스트림 마이크로 서비스 추적 계속

추가 조금 더 정보 ......

나는 실제 코드를 제공 할 수 없습니다, 사실은 내가 원하는 것을 찾을 수 없습니다.
약간의 코드/의사 코드로 설명하려고 노력하겠습니다. 그래서, 내가 3 microservices, A, B와 C

Microservice A (top level where trace is created) 
    TraceContext context = tracer.startSpan("myspan1"); 
    TraceId traceId = context.getHandle().getCurrentSpanContext().getTraceId(); 
    Call Microservice B over http passing traceId in the B3-X-TraceId header 
    tracer.endSpan(context); 

MicroService B 
    Read B3-X-TraceId from header 
    So at this point I want to call Microservice C but I want to create a new span on the same trace 
    I just do not see any mechanism to do this and this is where I'm stuck. 
    This is what I want to do in pseudo code 
    TraceContext context = tracer.startSpan("myspan2"); 
    attach the trace id that came in the header to the context 
     Call Microservice C over http passing traceId in the B3-X-TraceId header 
    tracer.endSpan(context); 

희망이 내가 할 노력하고있어에서 의미가있는이 시나리오를 가정 할 수 있습니다.

+0

하위 범위를 만들 수없는 코드 샘플을 제공 할 수 있습니까? –

답변

0

제공하신 코드는 Sleuth와 관련이 없으며 opentracing과 관련되어 있습니다. Sleuth에서는 Tracer.createSpan("name")이라고 부르면 현재 트레이스가 생성 될 것입니다.

+0

안녕하세요 Marcin, 맞습니다. 현재 시스템이 Bean으로 RestTemplate을 만들지 않으므로 Sleuth를 사용하고 싶지 않습니다. –

+0

당신은'TraceRestTemplateInterceptor' https://github.com/spring-cloud/spring-cloud-sleuth/blob/v1.3.0.RELEASE/spring-cloud-sleuth-core/src/main/java/org/를 추가 할 수 있습니다. springframework/cloud/sleuth/instrument/web/client/TraceRestTemplateInterceptor.java를 빈이 아닌 나머지 템플릿에 수동으로 추가합니다. –

0

또한 스팬을 만들기 전에 클라우드 추적 API 만 사용하여 작동하도록했습니다.

SpanContext spanContext = Trace.getSpanContextFactory().fromHeader(traceId); 
Trace.getSpanContextHandler().attach(spanContext); 

이렇게하는 것이 부정적인 경우 확실하지 않습니다.