组织构件
- opentracing-api:主要的API,无其他依赖。
- opentracing-noop:为主要API提供无意义实现(NoopTracer),依赖于opentracing-api。
- opentracing-util:工具类,例如GlobalTracer和默认的基于ThreadLocal存储的ScopeManager实现,依赖于上面所有的构件。
- opentracing-mock:用于测试的mock层。包含MockTracer,简单的将Span存储在内存中,依赖于opentracing-api和opentracing-noop。
主要API
主要的OpenTracing API将所有主要组件声明为接口以及辅助类,例如Tracer,Span,SpanContext,Scope,ScopeManager,Format(用映射定义通用的SpanContext注入和提取格式)。详细文档
- Tracer 链路。
- Span 由 Tracer 构建,可以添加Tag(是键值对),也是 Tracer 的基本单元,一般代表分布式系统中一个独立的工作单元。多个 Span 可以是父子关系。
- SpanContext 跨越进程边界,传递到下级span的状态 ,包括 traceID 等;Tracer.inject和extract方法就是用于发送和恢复 SpanContext对象,参数 carrier就是序列号方式,format是格式化
- Scope 用于在线程间传递 Span,常用的实现有 ThreadLocalScope 。
- ScopeManager 用于提供一个统一的接口从 Scope 中获取 Span,常见的实现有 ThreadLocalScopeManager。
Quick Start
import java.util.Map;
import io.opentracing.mock.MockTracer;
import io.opentracing.mock.MockSpan;
import io.opentracing.tags.Tags;
// Initialize MockTracer with the default values.
MockTracer tracer = new MockTracer();
// Create a new Span, representing an operation.
MockSpan span = tracer.buildSpan("foo").start();
// Add a tag to the Span.
span.setTag(Tags.COMPONENT, "my-own-application");
// do something for business logic
// Finish the Span.
span.finish();
// Analyze the saved Span.
System.out.println("Operation name = " + span.operationName());
System.out.println("Start = " + span.startMicros());
System.out.println("Finish = " + span.finishMicros());
// Inspect the Span's tags.
Map<String, Object> tags = span.tags();
网友评论