ืืคืจืืืงืืื ืฉืื ื ืื ื ืืฉืชืืฉืื ืืืจืืืืงืืืจืช microservice. ืืืฉืจ ืฆืืืืจื ืืงืืืง ืืืืฆืืขืื ืืชืจืืฉืื, ืืื ืจื ืืืฉืงืข ืื ืืืืจ ืื ืืชืื ืืืื ืื. ืืืฉืจ ืจืืฉืืื ืืช ืืชืืืื ืื ืฉื ืคืขืืืืช ืืืืืืช ืืงืืืฅ ืืืื, ืืืจื ืืื ืงืฉื ืืืืื ืื ืืืืื ืืงืจืืื ืฉื ืคืขืืืืช ืืื, ืืขืงืื ืืืจ ืจืฆืฃ ืืคืขืืืืช ืื ืืืืช ืืืื ืฉื ืคืขืืื ืืืช ืืืืก ืืืืจืช ืืฉืืจืืชืื ืฉืื ืื.
ืืื ืืืืขืจ ืืช ืืขืืืื ืืืื ืืช, ืืืืื ื ืืืฉืชืืฉ ืืืื ืืืื ืืืืชืืจ. ืืืฆื ืืืื ืืชื ืืืื ืืืฉืชืืฉ ืืืขืงื ืืืืฆื ืขืฉืื ื ืืืช ืืืืื ื ืืืืืจ ืื.
ืืืื ืืขืืืช ื ืืชื ืืคืชืืจ ืืืืฆืขืืช ืืขืงื?
- ืืฆื ืฆืืืืจื ืืงืืืง ืืืืฆืืขืื ืื ืืชืื ืฉืืจืืช ืืืื ืืื ืขื ืคื ื ืื ืขืฅ ืืืืฆืืข ืืื ืื ืืฉืืจืืชืื ืืืฉืชืชืคืื. ืืืืืื:
- ืฉืืืืช ืขืืงืืืช ืจืืืช ืืื ืฉืืจืืชืื, ืืืฉื, ืืงืืืื ืืืืืืจืคื ืื ืืืกื ื ืชืื ืื.
- ืืืชื ื ืืจืืื ืฉื ืงืื/ืคืื, ืืืื ืืขืืจืช ื ืชืื ืื ืืจืฉืช ืื ืงืจืืื ืืืืืกืง.
- ื ืืชืื ื ืชืื ืื ืืจืื.
- ืคืขืืืืช ืืจืืืืช ืืืืจืฉืืช ืืขืื.
- ืงืืขื ืงืื ืฉืืื ื ื ืืืฆืื ืืืฉืืช ืืชืืฆืื ืืกืืคืืช ืื ืืชื ืืืกืืจื ืื ืืืืืช ืืืชื.
- ืืืืื ืืืืจืืจ ืืืืื ืกืืจ ืื ื ืงืจื ืืื ืงืืจื ืืขืช ืืืฆืืข ืืคืขืืื.
ื ืืชื ืืจืืืช, ืืืฉื, ื-Request ืืืืข ืืฉืืจืืช WS -> ืฉืืจืืช WS ืืฉืืื ืืช ืื ืชืื ืื ืืจื ืฉืืจืืช R -> ืืื ืฉืื ืืช ืืืงืฉื ืืฉืืจืืช V -> ืฉืืจืืช V ืืืจืื ืืจืื ื ืชืื ืื ืื- ืฉืืจืืช R -> ืืื ืืฉืืจืืช P -> ืฉืืจืืช P ืืื ืฉืื ืืฉืืจืืช R -> ืฉืืจืืช V ืืชืขืื ืืืชืืฆืื ืืืื ืืฉืืจืืช J -> ืืจืง ืื ืืืืืจ ืืช ืืชืฉืืื ืืฉืืจืืช WS, ืชืื ืืื ืืืฉื ืืืฉืื ืืฉืื ืืืจ ื ืืจืงืข.
ืืื ืืขืงื ืืื ืื ืชืืขืื ืืคืืจื ืืื ืืชืืืื, ืงืฉื ืืืื ืืืืื ืื ืงืืจื ืืืืจ ืฉืืกืชืืืื ืขื ืืงืื ืืคืขื ืืจืืฉืื ื, ืืืงืื ืืคืืืจ ืขื ืคื ื ืฉืืจืืชืื ืฉืื ืื ืืืืกืชืจ ืืืืืจื ืฉืื ืฉืขืืขืืช ืืืืฉืงืื. - ืืืกืืฃ ืืืืข ืขื ืขืฅ ืืืืฆืืข ืืฆืืจื ื ืืชืื ืืืื ืืืืจ ืืื. ืืื ืฉืื ืฉื ืืืฆืืข, ื ืืชื ืืืืกืืฃ ืืืืข ืฉืืืื ืืฉืื ืื ืืืขืงื ืืืืืจ ืืื ืืืืื ืืืื ื ืชืื ื ืงืื ืืืืืื ืืชืจืืืฉ ืืื. ืืืืืื:
- ืืืืช ืืืฉืชืืฉ
- ืืืืืืช
- ืกืื ืืฉืืื ืฉื ืืืจื
- ืฉืืืืช ืืืื ืื ืืืฆืืข
- ืืคืืืช ืขืงืืืช ืืชืช-ืงืืืฆื ืฉื ืืืืื ืื ืืชืื ื ืืกืฃ ืืฆืืจื ืฉื ืืืืื.
ืืืื ืืขืงื ืืืื ืืจืฉืื. ืึฐืึทืงึดืืฃ
ืืืขืงื ืืฉ ืืช ืืืืฉื span, ืืื ืื ืืืื ืฉื ืืืื ืืื ืืงืื ืกืืื. ืืืืื ืืฉ:
- ืฉื, ืืืจื ืืื ืฉื ืืฉืืื ืฉืืืฆืขื
- ืฉื ืืฉืืจืืช ืฉืื ื ืืฆืจ ืืืืื
- ืชืขืืื ืืืื ืืืืืืืช ืืฉืื
- ืงืฆืช ืืื ืืืืข ืืฆืืจื ืฉื ืืคืชื/ืขืจื ืฉื ืืื ืื. ืืืืืื, ืคืจืืืจืื ืฉื ืฉืืื ืื ืืื ืืฉืืื ืืกืชืืืื ืืฉืืืื ืื ืื
- ืืื ื ืืืชืืื ืืืกืืื ืฉื ืืืฆืืข ืืืื ืื
- ืืืื ืืืื ืืืจื
ืื ืืืื ื ืฉืื ืืืกืคื ืืืืื ืืื ืืืืฉืืจ ืืืกื ืื ืชืื ืื ืืฆืคืืื ืืืืืจืช ืืจืืข ืฉืืื ืกืืื ืืช ืืืฆืืขื. ืืขืชืื, ืชืืื ืืื ืืช ืขืฅ ืืื ืืืืืืื ืขื ืืื ืืืืืจื ืืคื ืืืื ืื. ืืขืช ื ืืชืื, ืืชื ืืืื ืืืฆืื, ืืืฉื, ืืช ืื ืืืืืืื ืืฉืืจืืช ืืืฉืื ืฉืืงื ืืืชืจ ืืืื ืืื. ืืืืจ ืืื, ืขืืืจืื ืืืืื ืืกืืื, ืจืื ืืช ืื ืืขืฅ ืืขื ืืืชืืช ืืืืื ืื.
Opentrace, Jagger ืืืืฆื ืืืฉืื ื ืืช ืื ืขืืืจ ืืคืจืืืงืืื ืฉืื ื
ืืฉ ืชืงื ืืฉืืชืฃ
ืื ื ืืฉืชืืฉืื
- Jaeger-agent ืืื ืกืืื ืืงืืื ืืืืชืงื ืืืจื ืืื ืืื ืืืฉื ืืฉืืจืืชืื ืืืืืจืื ืืืื ืืืฆืืืช ืืจืืจืช ืืืืื ืืืงืืืืช. ืื ืืื ืกืืื, ืื ืืขืงืืืช ืฉื ืื ืืฉืืจืืชืื ืืืืฉื ืื ืืืจื ืืื ืืืืืื
- Jaeger-collector - ืื ืืกืืื ืื ืฉืืืืื ืืืื ืขืงืืืช ืฉื ืืกืคื, ืืืื ืืื ืืก ืืืชื ืืืกื ืื ืชืื ืื ืื ืืืจ
- ืืกื ื ืชืื ืื - ืืืืขืืฃ ืขืืืื ืืื ืงืกื ืืจื, ืืื ืื ืื ื ืืฉืชืืฉืื ื-elasticsearch, ืืฉ ืืืืขืืช ืืืื ืืกืื ื ืชืื ืื ืืืจืื ืืืืฉืื ืืืืืจืื ืฉืื ืฉืืืจ ืฉืื ืืืจ ืืืืกืง
- Jaeger-query ืืื ืฉืืจืืช ืฉื ืื ืก ืืืกื ืื ืชืื ืื ืืืกืคืง ืขืงืืืช ืฉืืืจ ื ืืกืคื ืื ืืชืื
- Jaeger-ui ืืื ืืืฉืง ืืื ืืจื ื ืืืืคืืฉ ืืฆืคืืื ืืขืงืืืช, ืืื ืคืืขื ื-jaeger-query
ื ืืชื ืืงืจืื ืืจืืื ื ืคืจื ืืืืืฉ ืฉื opentrace jaeger ืขืืืจ ืฉืคืืช ืกืคืฆืืคืืืช, ืฉืืจืื ื ืฉืืืืช ืืืืืื ื-jaeger-agent.
ื ืืชื ืื ืืืืจ ืจืืืื ืงืคืืฅ
ืจืืฉืื ืขืงืืืช ื-Java
ืืืคืฉืื ืืจืื ืืขืืืื ื ืืฉ ืืืฆืืจ ืืช Span ืืจืืฉืื, ื ืืชื ืืขืฉืืช ืืืช ืืืืคื ืืืืืืื, ืืืฉื ืขื ืืื ืืงืจ ืืงืคืืฅ ืืขืช ืงืืืช ืืงืฉื, ืื ืืืืคื ืืื ื ืื ืืื. ืืืืจ ืืื ืืื ืืืขืืจ ืืืืฆืขืืช Scope ืืืื. ืื ืฉืืื ืืืฉืื ืืืื ืจืืฆื ืืืืกืืฃ Span, ืืื ืืืงืืช ืืช ื-activeSpan ืื ืืืื ื-Scope, ืืืฆืจืช Span ืืืฉ ืืืืืจืช ืฉืืืืจื ืฉืื ืงืืื ActiveSpan, ืืืืคืืช ืืช ื-Span ืืืืฉ ืืคืขืื. ืืืฉืจ ืงืืจืืื ืืฉืืจืืชืื ืืืฆืื ืืื, ืืืืื ืืคืขืื ืื ืืืื ืืืขืืจ ืืืืื, ืืฉืืจืืชืื ืืื ืืืฆืจืื ืืืืืื ืืืฉืื ืืืงืืฉืจืื ืืืืื ืื.
ืื ืืขืืืื ืขืืืจืช ืืจื ืืืืคืข ืฉื Tracer; ืืชื ืืืื ืืงืื ืืืชื ืืจื ืื ืื ืื DI, ืื GlobalTracer.get() ืืืฉืชื ื ืืืืืื ืื ืื ืื ืื DI ืื ืขืืื. ืืืจืืจืช ืืืื, ืื ื-Tracer ืื ืืืชืื, NoopTracer ืืืืืจ ืฉืื ืขืืฉื ืืืื.
ืืืืจ ืืื, ื-Scoop ืื ืืืื ืืชืงืื ืื-Tracer ืืจื ScopeManager, ื ืืฆืจ scope ืืืฉ ืืื ืืืื ืขื ืกืคืืจื ืืืฉื ืืฆืืจืฃ, ืืื ื ืกืืจ ื-Scoop ืฉื ืืฆืจ, ืื ืฉืกืืืจ ืืช ื-Scoop ืฉื ืืฆืจ ืืืืืืจ ืืช ื-Scoop ืืงืืื ืืืฆื ืืคืขืื . ืืืงืฃ ืงืฉืืจ ืืฉืจืฉืืจ, ืืื ืืขืช โโืชืื ืืช ืืจืืื-ืืืจืื, ืขืืื ืืืืืจ ืืืขืืืจ ืืช ืืืืื ืืคืขืื ืืฉืจืฉืืจ ืืืจ, ืืืคืขืื ื ืืกืคืช ืฉื ื-Scoop ืฉื ืืื ืืืจ ืืืืืืจ ืืืืื ืื.
io.opentracing.Tracer tracer = ...; // GlobalTracer.get()
void DoSmth () {
try (Scope scope = tracer.buildSpan("DoSmth").startActive(true)) {
...
}
}
void DoOther () {
Span span = tracer.buildSpan("someWork").start();
try (Scope scope = tracer.scopeManager().activate(span, false)) {
// Do things.
} catch(Exception ex) {
Tags.ERROR.set(span, true);
span.log(Map.of(Fields.EVENT, "error", Fields.ERROR_OBJECT, ex, Fields.MESSAGE, ex.getMessage()));
} finally {
span.finish();
}
}
void DoAsync () {
try (Scope scope = tracer.buildSpan("ServiceHandlerSpan").startActive(false)) {
...
final Span span = scope.span();
doAsyncWork(() -> {
// STEP 2 ABOVE: reactivate the Span in the callback, passing true to
// startActive() if/when the Span must be finished.
try (Scope scope = tracer.scopeManager().activate(span, false)) {
...
}
});
}
}
ืขืืืจ ืชืื ืืช ืืจืืื ืืืืื, ืืฉ ืื TracedExecutorService ืืขืืืคืืช ืืืืืช ืฉืืขืืืจืืช ืืืืืืืืช ืืช ืืืืื ืื ืืืื ืืฉืจืฉืืจ ืืขืช ืืคืขืืช ืืฉืืืืช ืืกืื ืืจืื ืืืช:
private ExecutorService executor = new TracedExecutorService(
Executors.newFixedThreadPool(10), GlobalTracer.get()
);
ืขืืืจ ืืงืฉืืช http ืืืฆืื ืืืช ืืฉ
HttpClient httpClient = new TracingHttpClientBuilder().build();
ืืขืืืช ืฉืืชืืืืื ื ืืืชื ื
- ืฉืขืืขืืช ื-DI ืื ืชืืื ืคืืขืืื ืื ืื ืืชื ืืื ื ืืฉืืฉ ืืฉืืจืืช ืื ืืจืืื, ืื
ืืืื ืืืืืืื ืืืชืื ืฉ-Tracer ืื ืืขืืื ืืชืฆืืจื ืืืฉืชืืฉ ื-GlobalTracer.get(). - ืืขืจืืช ืืื ื ืคืืขืืืช ืื ืื ืื ืจืืื ืื ืฉืืจืืช, ืื ืื ืงืจืืืช ืืฉืืื ืืืืขื ืืฉืืื ืฉืื ื ืืืืชื ืืืืงื. ืืชื ืฆืจืื ืืืืืช ืืืืจ, ืืืืืง ืื ืขืืื, ืืืืฉืชืืฉ ืืืฆืืจืช ืขืงืืืช ืืื ืืช ืื @Traced ืื ืขืืื. ืืชื ืืืื ืื ืืฆืจืฃ ืืืืจ ื ืืกืฃ ืืืขืจืืช Java, ืืื ืื ืืืืจ ืืขืืื ืืื ืืงืื.
- ืืืืฃ ืงืคืืฅ ืืงืคืืฅ ืืฉื, ืืชืฆืืจื ืืืืืืืืืช ืฉื ืขื ื ืงืคืืฅ ืคืชืื ืื ืขืืืืช ืืืื ืืืืื ื-DI, ืื ืื ืืชื ืจืืฆื ืฉืขืงืืืช ืืจืืืื ืงืคืืฅ ืืคืขืื ืืืืืืืืช, ืืชื ืืืื ืืขืฉืืช ืืืช ืืื ืืืืื ืขื
github.com/opentracing-contrib/java-spring-jaeger/blob/master/opentracing-spring-jaeger-starter/src/main/java/io/opentracing/contrib/java/spring/jaeger/starter/JaegerAutoConfiguration.java - ื ืกื ืขื ืืฉืืืื ืื ืขืืื ืืืจืืื; ืืชื ืืืื ืืืฉืชืืฉ ื ืกื ืืืกืืฃ.
- ืืื ืฉืืจืืช ืืืื ืืืืืช spring.application.name ืืฉืื ืฉืชืืชืื ืืืจืฉืื ืขืงืืืช. ืื ืืขืชื ืขื ืฉื ื ืคืจื ืืืืืจืืช ืืืืืืงื, ืืื ืื ืืขืจืื ืืื ืืื.
- ืื ืืชื ืืฉืชืืฉ ื-GlobalTracer ืื-tomcat, ืื ืืื ืืฉืืจืืชืื ืืคืืขืืื ื-tomcat ืื ืืฉ GlobalTracer ืืื, ืื ืฉืืืืื ืืืื ืืืชื ืฉื ืฉืืจืืช.
- ืืขืช ืืืกืคืช ืขืงืืืช ืืฉืืื, ืืชื ืฆืจืื ืืืืืช ืืืื ืฉืืื ืื ื ืงืจืืช ืืืืืื ืคืขืืื ืจืืืช. ืขืืื ืืืืกืืฃ ืืขืงื ืืื ืืฉืืชืฃ ืืื ืืฉืืืืช, ืืฉืจ ืืชืขื ืืช ืืื ืืคืขืืื ืืืืื. ืืืจืช, ืืืืฆืจ ืขืืืก ืขืืืฃ.
- ืคืขื ืืืช ื-jaeger-ui ืื ืืืืฉื ืืงืฉืืช ืืืืืืช ืืื ืืืกืคืจ ืจื ืฉื ืขืงืืืช, ืืืืืืื ืฉืื ืื ืืืื ืืชืืืื, ืื ืขืฉื ืืืช ืฉืื. ืืชืืฆืื ืืื, jaeger-query ืืืื ืืืืื ืืจืื ืืืืจืื ืืืืื ืืช ืืืืืฉืืช. ืขืืจ ืขื ืืื ืืคืขืื ืืืืฉ ืฉื jaeger-query
ืืืืื, ืืืกืื ืืฆืคืืื ืขืงืืืช
ืืฉื ื ืฉืืืฉื ืกืืืื
- Const ืฉืฉืืื ืืฉืืืจ ืืช ืื ืืขืงืืืช.
- ืืกืชืืจืืชื ืฉืืกื ื ืขืงืืืช ืืืกืชืืจืืช ืืกืืืืช.
- Ratemiting ืืืืืื ืืช ืืกืคืจ ืืขืงืืืช ืืฉื ืืื. ืืชื ืืืื ืืืืืืจ ืืืืจืืช ืืื ืืืงืื, ืื ื-jaeger-agent ืื ื-collector. ืืขืช ืื ื ืืฉืชืืฉืื ื-const 1 ืืขืจืืืช ืืขืจืื ืืฉืืื ืืืืืื ืฉืืื ืืจืื ืืงืฉืืช, ืืื ืื ืืืงืืืช ืืจืื ืืื. ืืขืชืื, ืื ืื ืืคืขืื ืขืืืก ืืืืชืจ ืขื ืืืขืจืืช, ืชืืื ืืืืืื ืืืชื.
ืื ืืชื ืืฉืชืืฉ ืืงืกื ืืจื, ืืืจืืจืช ืืืื ืืื ืืืืกื ืช ืขืงืืืช ืจืง ืืืืืืื. ืื ื ืืฉืชืืฉืื
ืืื ืืจืืืช ืืช ืืขืงืืืช ืขืืื:
- ืืืจ ืืช ืืฉืืจืืช ืฉืืคืื ืชืจืฆื ืืกื ื ืขืงืืืช, ืืืฉื tomcat7-default ืขืืืจ ืฉืืจืืช ืฉืคืืขื ื-Tomcat ืืืื ืื ืฉื ืืฉืื.
- ืืืืจ ืืื, ืืืจ ืืช ืืคืขืืื, ืคืจืง ืืืื ืืืื ืืคืขืืื ืืืื ืืืื, ืืืฉื ื-10 ืฉื ืืืช, ืืื ืืงืืช ืจืง ืืืฆืืขืื ืืจืืืื.
- ืื ืืืืช ืืขืงืืืช ืืจืื ืื ืืื ืฉื.
ืืื ืื, ืื ืืืื ืืงืฉื ืืืืข, ืื ืืชื ืืืื ืืืฆืื ืืขืงื ืขื ืืื ืืืื ืื ืืืืฆืขืืช ืืืคืืฉ ืชืืื, ืื ืืืื ืื ื ืจืฉื ืืืืื ืฉื ืืืขืงื.
ืจืฉืืืืช
- ืชืืขืื opentracing
opentracing.io/docs/overview/what-is-tracing - ืชืืขืื ืืืืจ
www.jaegertracing.io/docs/1.10 - ืืืืืจ jaeger java
github.com/jaegertracing/jaeger-client-java - ืืืืืจ ืืืชืืจ ืงืคืืฅ ืคืชืื
github.com/jaegertracing/jaeger-client-java
github.com/opentracing-contrib/java-spring-cloud
ืืืืจืื
habr.com/ru/company/carprice/blog/340946 Jaeger Opentracing ื-Microservices ืืคืจืืืงื ืืืืชื ื-PHP ื-Golangeng.uber.com/distributed-tracing ืืขืงื ืืืืืจ ืืชืคืชื ื-Uber Engineeringopentracing.io/guides/java medium.com/jaegertracing/running-jaeger-agent-on-bare-metal-d1fc47d31fab ืืคืขืื ืืช Jaeger Agent ืขื ืืชืืช ืืฉืืคื
ืืืืื
www.youtube.com/watch?v=qg0ENOdP1Lo ืืื ืืฉืชืืฉื ื ืืืืจ ืืคืจืืืชืืืก ืืื ืืกืคืง ืฉืืืืชืืช ืืฉืชืืฉืื ืืืืืจืืช ืืืืง - ืืจืืื ืืืจืืืwww.youtube.com/watch?v=WRntQsUajow ืืงืืื: ืืืืจ - ืืืจื ืฉืงืืจื, ืืืืจ ืืคืืื ืืืคื, ืจื ืืืwww.youtube.com/watch?v=fsHb0qK37bc ืกืจืืื ืืืงืืืื, "ืกืืคืืจ ืงืื ืฉื ื ืืฆืืื ืืืื: OpenTracing, AWS ืืืืจ"
ืืงืืจ: www.habr.com