简介
opentracing是一个API规范,各类框架和库负责实现该规范,从而允许开发人员通过手动埋点实现平台无关的tracing跟踪。目前主流的语言都有对应的接口提供,具体可以参考链接。下面以opentracing-go为例对其做一个大致介绍。
Span
SpanContext
表示一个Span的状态,通常会传递给相关联的Span,也包括跨进程传递,例如<trace_id, span_id, sampled>。主要接口有:
ForeachBaggageItem(handler func(k, v string) bool),handler函数会针对每个BaggageItem进行调用。
Baggage
跟spancontext一样也是跨进程传递的,为一系列key:value对
Tag
设置用于过滤span的tags,其中key必须是string类型,value可以是任意类型,opentracing有一些预定义的tags1
2SetTag(key string, value interface{}) Span
span.SetTag()
Log
1 | LogFields(fields ...log.Field) |
Finish
1 | FinishWithOptions(opts FinishOptions) |
一个span的列子:
t=0 operation name: db_query t=x
+-----------------------------------------------------+
| · · · · · · · · · · Span · · · · · · · · · · |
+-----------------------------------------------------+
Tags:
- db.instance:”jdbc:mysql://127.0.0.1:3306/customers
- db.statement: “SELECT * FROM mytable WHERE foo=’bar’;”
Logs:
- message:”Can’t connect to mysql server on ‘127.0.0.1’(10061)”
SpanContext:
- trace_id:”abc123”
- span_id:”xyz789”
- Baggage Items:
- special_id:”vsid1738”
Tracer
负责创建Span和SpanContext的传播,属于一个Manager角色。
1 | type SpanReference struct { |