Opentracing 是分布式链路追踪的一种规范标准 (现在改名为OpenTelemetry),发布于 2016 年 12 月,是 CNCF(云原生计算基金会)下的项目之一。和一般的规范标准不同,Opentracing 不是传输协议,消息格式层面上的规范标准,而是一种语言层面上的 API 标准。以 Go 语言为例,只要某链路追踪系统实现了 Opentracing 规定的接口(interface),符合 Opentracing 定义的表现行为,那么就可以说该应用符合 Opentracing 标准。这意味着开发者只需修改少量的配置代码,就可以在符合 Opentracing 标准的链路追踪系统之间自由切换。
目录
标准文档
https://opentracing.io/specification/
语言无关 proto 定义
https://github.com/open-telemetry/opentelemetry-proto
概念
一个 tracer 过程中,各 span 的关系:
[Span A] ←←←(the root span)
|
+------+------+
| |
[Span B] [Span C] ←←←(Span C 是 Span A 的孩子节点, ChildOf)
| |
[Span D] +---+-------+
| |
[Span E] [Span F] >>> [Span G] >>> [Span H]
↑
↑
↑
(Span G 在 Span F 后被调用, FollowsFrom)
上述 tracer 与 span 的时间轴关系:
––|–––––––|–––––––|–––––––|–––––––|–––––––|–––––––|–––––––|–> time
[Span A···················································]
[Span B··············································]
[Span D··········································]
[Span C········································]
[Span E·······] [Span F··] [Span G··] [Span H··]
规范
Opentracing json message 格式,不拘用什么客户端,只要符合这种格式的消息就可以复用 Opentracing 工具链。
{
"trace_id": undefined, // values for trace_id and span_id are not currently standardized
"span_id": undefined,
"references": [
{"type":"child_of","span_id":undefined}, // currently types are "child_of" and "follows_from"
],
"name": "operation type",
"timestamp": 1234567890123456789, // UTC Epoch Unix Timestamp in Microseconds
"duration": 300, // integer representing microseconds
"tags": {
"tag_key": [{"a":"b"},{"c":"d"}], // can tags have multiple values in some systems?
},
"logs": [
{"timestamp":1234567890123456789, "a":"b"}, // logs optionally have a timestamp
],
"baggage": {"a":"b"},
}
数据收集
数据收集由 3 个组件构成:
- receivers: How to get data into the Collector; these can be push or pull based
- processors: What to do with received data
- exporters: Where to send received data; these can be push or pull based
https://github.com/open-telemetry/opentelemetry-collector
opentelemetry-collector 示例
opentelemetry-collector receiver 列表
https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver
HTTP Transport Extension for OTLP
This is a proposal to add HTTP Transport extension for OTLP (OpenTelemetry Protocol).
https://github.com/open-telemetry/oteps/blob/main/text/0099-otlp-http.md#request
Tracing 相关方案
Uptrace
Jaeger
Sentry
SkyWalking
SigNoz
Zipkin
Grafana Tempo
DataDog
有不少 tracing 工具底层应该是兼容 OpenTracing 协议的。
Sample go app
https://github.com/SigNoz/sample-golang-app
Reference
Standard Interchange Format for OpenTracing
distributed-tracing-tools
Instrumenting a Go application with OpenTelemetry
最新评论