【问题标题】:What is the Opentracing API actually and what is its role in a tracing system实际上什么是 Opentracing API,它在跟踪系统中的作用是什么
【发布时间】:2026-02-16 00:05:01
【问题描述】:

https://opentracing.io/ 他们声明 opentracing API 是:

用于分布式跟踪的供应商中立 API 和工具

好的,但这在实际应用程序的上下文中究竟意味着什么?

这个 Opentracing API 实际上由哪些部分组成,它的用途是什么以及它如何与“zipkin”和“jaeger”等其他日志相关系统交互

  • 是否需要使用Opentracing API for Java 才能声明“我的应用支持”opentracing?

  • 是否有一个 Opentracing 协议(例如通过网络发送数据)或者他们只是说 Opentracing 是一个中间层,它允许多个其他跟踪框架相互操作? 尤其是this diagram 让我这么想。

【问题讨论】:

标签: trace zipkin opentracing jaeger


【解决方案1】:

OpenTracing 是 您的 代码将直接与之交互的 API。

基本上,您的应用程序将使用 OpenTracing API 进行“检测”,而具体的跟踪器(如 Jaeger 或 Brave/Zipkin)将捕获数据并将其发送到某处。这允许您的应用程序在整个代码中使用中性 API,以便您可以从一个提供程序更改为另一个提供程序,而无需更改整个代码库。

另一种思考方式是,OpenTracing 类似于 Java 日志世界中的 SLF4J,而 Jaeger 和 Zipkin 是具体的实现,例如 Java 日志世界中的 Log4j。

【讨论】:

  • Zipkin 真的实现了 OpenTracing 协议吗?根据this:Although we recommend instrumenting applications with OpenTracing API and binding to Jaeger client libraries to benefit from advanced features not available elsewhere, if your organization has already invested in the instrumentation using Zipkin libraries, you do not have to rewrite all that code. Jaeger provides backwards compatibility with Zipkin by accepting spans in Zipkin formats (Thrift or JSON v1/v2) over HTTP.
  • OpenTracing 更像是一个 API 而不是协议。有一个与 Zipkin 兼容的跟踪器 (Brave),因此您的应用程序可以使用 OpenTracing API 进行检测,数据到达 Zipkin 后端。