to be
a problem slover

OpenTracing 介绍

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: A Friendly Guide for Devs

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

赞(5) 打赏
欢迎转载,注明出处:刘世明的博客 » OpenTracing 介绍

相关推荐

  • 暂无文章

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下作者

支付宝扫一扫打赏

微信扫一扫打赏