ααΎαααααΎααααΆααααααΆαααααααα microservice αα
αααα»αααααααααααααΎαα αα
ααααααααΆαααΆααααΆααααααΆαα’αα»ααααααΎαα‘αΎα αααααααΆααΆα
αααΎαααααΌαααΆαα
αααΆααααα»αααΆααααα½ααα·αα·ααα αα·αααααααααα ααα»α αα
ααααααααααΆαααααααΆααααααα·ααααα·ααΆααα»αααααα
α―αααΆααααααα ααα» ααΆααααααΆααΆαα·ααΆααααα»αααΆααααααΈα’αααΈαααααΆααα
αααααΆαα α
ααααα·ααααα·ααΆαααΆααααα ααΎααααΈααΆαααΆαααααΆαααααααααααΆα α¬ααΆαααααΆααααααΌααααααααΆααααααα·ααααα·ααΆααα½αααΆαααααα
αα½ααααααααααα
αααα»αααααΆααααααααααα
ααΎααααΈααΆααααααααααααΆααααααααααααα ααΎαααΆααααααα
α
α·αααααααΎα§αααααααΆαααΆααα½αα α’αααΈαααα αα·αααΌαα ααα»αααα’αααα’αΆα
ααααΎααΆαααΆαααΆα αα·ααααααααααΎαααΆαααααΎααΆ α αΎαααΉαααααΌαααΆααα·ααΆααααΆαα
αααα»αα’ααααααααα
ααΎαααα αΆα’αααΈααααα’αΆα ααααΌαααΆααααααααΆαααΆαα½αααΉαααΆαααΆαααΆα
- αααααααααΆαααΆααααααααααΎαααΆαααΆαααα
αααα»αααααΆαααααααα½α αα·ααα
αααα»ααααααΆαααααα·ααααα·ααΆααααΌααααΆαααααΆαααααααα
αΌααα½αααΆααα’ααα α§ααΆα ααα:
- ααΆαα α ααΌαααααααΆαααααααΆααΆα αααΎααααΆαααααΆαααα α§ααΆα ααα αα ααΆαα geocoding α¬αα ααΆααααΌαααααΆααα·ααααααα
- αααα αΆαααΌα I/O ααΌα ααΆααΆαααααααααααΆα α¬ααΆαα’αΆαααΆαα
- ααΆααα·ααΆααα·αααααααααα
- ααααα·ααααα·ααΆαααΌααααααΆαααΆα CPU α
- αααααααααΌαααααα·αα αΆαααΆα αααΎααααΈααα½αααΆαααααααα α»αααααα α αΎαα’αΆα ααα αα α¬αααααΆααααααΆαα
- ααααααΆαα
αααΆαααα
αααα»αααααΆααα’αααΈαααα α
ααΆα’αααΈ αα·αα’αααΈαααααΎαα‘αΎααα
αααααααα·ααααα·ααΆαααααΌαααΆαα’αα»ααααα
ααΆα’αΆα ααααΌαααΆαααααΎαααΎαααΆααΆα§ααΆα αααααααΎααΆααααααααααΆ WS -> ααααΆαααα WS ααΆααααααααα·ααααααααΆααααααααΆαααα R -> αααααΆααααααααΎααααΎαα ααααΆαααα V -> ααααΆαααα V αααα»ααα·ααααααααΆα αααΎαααΈ R α ααααΆαααα -> ααΆααα ααααΆαααα P -> ααααΆαααα P ααΆααα ααααΆαααα R -> ααααΆαααα V αα·αα’αΎααΎααΉαααααααα αΎαααΆααα ααααΆαααα J -> α αΎαααΆαααααααΎααααα ααΉαααααΆαααα WS αααααααααααααααααΆα’αααΈαααααααααα αααα»α ααααααΆααααααα
ααΎααααΆαααΆα α¬α―αααΆααααα’α·ααααααΆααααααΎαααΆαααΆααααΌααα ααΆαα·αααΆααααΆαααΆαααααα»αααΆααααααΉαα’αααΈα’αααΈααααααα»αααΎαα‘αΎααα αααααΎαααΌαααΆααΎαααααΌα α αΎαααΌαααααΌαααΆαααα αΆααααα αΆαααΆααααααααΆαααααααααα α αΎαααΆαααα ααΈααααααα»αααααΆα αα·αα ααα»α αααααΆααααΆα αααΎαα - ααΆααααααΌαααααααΆαα’αααΈαααααΆαααααα·ααααα·αααααΆααααΆααα·ααΆααααααΆαααααΆαααααααααΆααα αα
ααααΆααααΆαααΈαα½ααααααΆαααααα·ααααα· α’αααα’αΆα
ααααααααααααΆααα
ααΆααααααΆααα
ααααΆααααΆαααα α αΎααααααΆααααααααΎαααΆααΎαα·αααααααααα
αΌαα’αααΈαααααααααΆααα
αααααααΆααΈαααΌααααααααααΆα α§ααΆα ααα:
- αααβαααααΆααβα’αααβααααΎ
- αα·αααα·
- αααααααααα·ααΈααΆααααααααααΆαααααΎαααΎα
- ααα α»ααααα»ααααααα ααα» α¬ααααΎαααΆα
- ααααααααΆααα ααΆαααα»ααααααααααΆαα αα·αααΆααα·ααΆααααααααα½α α αΎααααα»αααααααααΆααααααα
α’αααΈαααααΆαα’αΆα αααααααΆααΆαα αα·ααΆαααΆα
αα αααα»αααΆαααΆαααΆαααΆααααα·ααααα·ααΆαααΆααα½α αααααΊααΆ analogue αααααααα ααα»αα½ααα ααΆαααα»αααΌαα αααααΆααΆαα
- ααααα ααΆααααααΆααααααααα·ααΈααΆααααααααααααΌαααΆαααααα·ααααα·
- αααααααααααΆααααααααα·ααΆαααΆαααααΌαααΆααααααΎα
- ααααααααΆαααααα½αααα
- ααααααααααααααΆαααααΆαα½αα ααα½ααααα»αααααααααΆαα/ααααααααααααΌαααΆαα αΌααα αααα»αααΆα α§ααΆα ααα αααΆαααΆαααααααα·ααΈααΆααααα α¬αα·ααΈααΆααααααααα αααααααα α»α α¬α’αα
- αααααααΆα αΆααααααΎα αα·ααααα αααααααΆαααα·ααΆαααΆααααα
- ααααααααΆαααα·ααΆαααΆαααΆααΆαα·ααΆ
αα·ααΆαααΆαααΈαα½ααααααΌαααΆααααααΌααα α’ααααααααΌααα·ααΆαααΆαααΎααααΈαααααΆαα»ααααα»αααΌαααααΆααα·αααααααααααΆααααΆααααα½ααα·αα·ααααα ααααααααααααΆαααα ααααααααΆααΆααααα ααααΆαααααα·ααααα·ααααααΆα αα αααα’ααΆαα α’αααα’αΆα αααααΎααααααΆααααα·ααΆαααΆαααΆααα’αααααααααΆαααααααααααααΆααααα αα ααααα·ααΆα α’αααα’αΆα ααααΎαα§ααΆα ααα αα·ααΆαααΆαααΆααα’αααα αααα»αααααΆαααααα½αα ααα½ααααα αααΆααααα αααΎαααΆααααααααα ααΎαααΈαααααα αααα αΌααα ααΆαααα·ααΆαααΆαααΆααααΆαααα½α ααΌαααΎαααΎαααΎααΆααααΌαααΆαααΎ αα·αααΆαααααααα·ααΆαααΆααααα
Opentrace, Jagger αα·ααααααααααΎαααΆαα’αα»ααααααΆαααααΆααααααααααααααΎαα
ααΆααααααααΆαααααααΆα
ααΎααααα»αααααΎ
- Jaeger-agent ααΊααΆααααΆααααΆααααα»ααααα»ααααααΆααααααΆααααΌαααΆαααα‘αΎααα ααΎαααΆαααΈαααΈαα½αα α αΎαααααΆααααααααΌαααΆαα αΌααα αααα»αααΆαα ααΎα αααααααΆαααΎααααα»ααααααα ααααα·αααΎαα·αααΆαααααΆααααΆααα αααααΆαααααααΆααααααΆααα’αααα ααΎαααΆαααΈααααααΆααααααΆααααΌαααΆααα·α
- Jaeger-collector - ααααΆααααΆαααΆααα’ααααααΎααΆαααααααααΌαααΆααα ααΆ α αΎαααΆααΆαααα½αααΆαα αααα»αααΌαααααΆααα·αααααααααααΆαααααΎαααΎαα
- ααΌαααααΆααα·ααααααααΊααΆ cassandra ααααα½αααα αΌαα α·ααα ααα»ααααααΎαααααΎ elasticsearch ααΆαααΆαα’αα»αααααααααΆααααΌαααααΆααα·ααααααααΈαααΈαααααααα αα·αααΆαα’αα»αααααααα»αα’αααα αα αΆαααααα·ααααααΆαα»αα’αααΈαα ααΆαααα
- Jaeger-query ααΊααΆααααΆαααααααα αΌααα ααΆααααΌαααααΆααα·αααααα α αΎααααα‘ααααΆααααααΆααααααΌααα½α α αΎααααααΆααααΆααα·ααΆα
- Jaeger-ui ααΊααΆα ααα»α αααααΆαααααααΆααααααΆααααααααα αα·αααΎαααΆα ααΆαα jaeger-query
αααΆαααΆαααΆα
ααααα‘αααα½αα’αΆα
ααααΌαααΆαααα α
ααΆααΆαα’αα»αααα opentrace jaeger αααααΆααααΆααΆααΆααααΆαα αααααΆααααααααα·ααΆαααΆαααααΌαααΆααααααΌααα
jaeger-agent α
ααααααααααΆαααααΆαααΆααα·ααΆααααΌαα’αααα’αΆα
ααααΆαα
ααΆαααΆαβααΆαβα αΌαβαααα»α Java
αα
ααααααααΆαα½ααα
ααααα·αααααΌα ααααΌααααααααΎα Span ααααΌα ααΆα’αΆα
ααααΌαααΆαααααΎαααααααααααααααα· ααΆα§ααΆα ααα αααα§ααααααααααΆαα·ααΆααααΌααα
αααααα½αααααΎ α¬αααααααααα·αααΎαα·αααΆαα αααααΆααααααΆααααΌαααΆααααααΌαααΆαααααα·ααΆαααΆαααΆααααααα ααααα·αααΎαα·ααΈααΆαααααααΆαα½αααΆααααααα
αααααααα Span ααΆαα activeSpan αα
αα
α»ααααααααΈ Scope αααααΎα Span ααααΈ α αΎααα·ααΆαααΆααααααααΆααΆ activeSpan αααααα α αΎαααααΎα±αα Span ααααΈαααααα αα
αααα α
αα
ααααΆααααααΆααααα
αα·ααΆαααΆαααααααα
αα
α»ααααααααααΌαααΆααααααΌααα
αα½ααα α αΎαααααΆααααααΆααααααααααΎααα·ααΆαααΆαααααΈαααααααα
ααΎαα·ααΆαααΆααααα
ααΆαααΆαααΆααα’ααααααααΆααααΆαα§ααΆα ααα Tracer α’αααα’αΆα
ααα½αααΆαααΆααΆααααααααααΆα DI α¬ GlobalTracer.get () ααΆα’αααααα ααααα·αααΎααααααΆα DI αα·αααααΎαααΆαα ααΆαααααΆαααΎα ααααα·αααΎααΆααα·αααααΌαααΆαα
αΆααααααΎααα NoopTracer ααΉααααα‘αααααα·αααααα·αααααΎα’αααΈαααα
ααΎαααΈααα αα·ααΆαααΆααα
αα
α»ααααααααααΌαααΆαααα½αααΈ tracer ααΆαααα ScopeManager αα·ααΆαααΆαααααΈααααΌαααΆααααααΎαα‘αΎαααΈαα
αα
α»ααααααααΆαα½αααΉαααΆαα
ααααα·ααΆαααΆαααααΈ α αΎααααααΆαααααα·ααΆαααΆααααααΆααααααΎαααααΌαααΆααα·α ααααα·ααα·ααΆαααΆααααααΆααααααΎα α αΎααααα‘αααα·ααΆαααΆααα»ααα
αααααααααα αα·ααΆαααΆαβααααΌαβααΆαβααααΆααβαα
βααΉαβααααβαααα‘αΆα ααΌα
ααααβαα
βαααβαααβααΆαβαααααβαααααα·ααΈβα
αααΎαβαααα α’αααβαα·αβααααΌαβααααα
βαααααβαα·ααΆαααΆαβαααααβαα
βααααβαααα‘αΆαβαααααβαααβα‘αΎα βαααααΆααβααΆαβααααΎβα±ααβαααααβααααααβααβαα·ααΆαααΆαβααβαααααααα‘αΆαβαααααβαααβαααβαααβαα
βααΎβαα·ααΆαααΆαβαααα
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 annotations αααααΆαααααα½αααΆαα½αααααααΎαααΆααααααααΈααααααα
- αα
αααα»αααΆαα
αΆααααααΎααα·ααΆααααΌα αα·ααα·ααΆααααΌαα
αΆαα ααΆαααααααα
ααΆααααααααααααααααααααα·ααααα·ααΆααααΌα opentraing αα·αααααΎαααΆααααααααΆαααααα α»ααα
αααα»α 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 αααααααΎ αα·ααααααΆαα»αααΆαααΆααα’ααα
- Probabilistic αααααααααΆαααΆαα½αααΉαααααΌααΆαααΈααΈαααααααΆααααααα±αααα½αα ααα½αα
- ααΆααααααααααα·αααααααααα ααα½αααΆααααα»ααα½ααα·ααΆααΈα α’αααα’αΆα ααααααα ααΆααααααααααΆααααααααΆααααααα ααΎαααΆαααΈαααααα ααΆαααα ααΎααααΆααααΆα jaeger α¬αα ααΎα’ααααααααΌαα α₯α‘αΌααααααΎαααααΎ const 1 αα αααα»ααααα’αααααΆαααααα ααααααα·αααΆαααααΎα αααΎααα ααα»αααααα½αααα αααΆααααααΌαα αα αααα’ααΆαα ααααα·αααΎααΆααΉααααα»αααΎαααααααααΎαααααααα α’αααα’αΆα αααααααΆααΆαα
ααααα·αααΎα’αααααααΎ cassandra αααααΆαααααΆαααΎα ααΆαααααΆαα»αααααααααααΈαααααααα»αααααα ααΎααααα»αααααΎ
ααΎααααΈααΎαααΆααααα’αααααααΌαααΆαα
- ααααΎαααΎαααααΆαααααααα’αααα ααααααααΆα α§ααΆα ααα tomcat7-ααααΆαααΎααααααΆααααααΆααααααααααα»αααααΎαααΆααα αααα»α tomcat α αΎααα·αα’αΆα ααΆααααααααααααΆααΆαααα
- αααααΆααααααααΎαααΎαααααα·ααααα·ααΆα α
αααααααα αα·ααααααααΆααααα·ααααα·ααΆαα’αααααααΆ α§ααΆα αααα
αΆααααΈ 10 αα·ααΆααΈ ααΎααααΈααααΎααΆαααααα·ααααα·ααΌαααα»αααααα
- α
αΌααα
ααΆααααΆααα½α α αΎαααΎαα’αααΈααααααα»αααα
α»ααα
ααΈαααα
ααΌα ααααΆαααααααα ααααα·αααΎααααααααΆααααααΎαα½αα ααα½αααααΌαααΆαααααααΆαα αααα’αααα’αΆα αααααααααΆααααααααααααΆαααααααΆααααααΆααααααααααααΆα ααααα·αααΎααααααααΆαααααααααΌαααΆαα αΌααα αααα»αα αααααααΆαα
α―αααΆα
- α―αααΆαααΎαα
αα
opentracing.io/docs/overview/what-is-tracing - α―αααΆα jaeger
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 αα·α Golang αα·αααααΆααwww.uber.com/distributed-tracing ααΆααα·ααααααααΆαααΆαααΆαααΆαα ααα αΆααα Uber Engineeringopentracing.io/guides/java medium.com/jaegertracing/running-jaeger-agent-on-bare-metal-d1fc47d31fab αααα»αααααΎαααΆαααααΆααααΆα Jaeger ααΎαααααα
ΠΠΈΠ΄Π΅ΠΎ
www.youtube.com/watch?v=qg0ENOdP1Lo αααααααααΎαααααΎ Jaeger αα·α Prometheus ααΎααααΈα ααα αΆααααα½αα’αααααααΎααααΆαααα αα - Bryan Borehamwww.youtube.com/watch?v=WRntQsUajow ααΆαααααΆαα Jaeger - Yuri Shkuro, Uber & Pavol Loffay, Red Hatwww.youtube.com/watch?v=fsHb0qK37bc Serghei Iakovlev, "ααΏαααΌα αα½ααααααααααααααααα½α: OpenTracing, AWS αα·α Jaeger"
ααααα: www.habr.com