OpenTracing 桥接

编辑

OpenTracing 已停止维护,转而支持 OpenTelemetry。请考虑使用 OpenTelemetry 桥接
最新支持的 OpenTracing 版本:0.33(截至代理和 OpenTracing 桥接版本 1.9.0)

Elastic APM OpenTracing 桥接允许使用 OpenTracing API 创建 Elastic APM TransactionsSpans。换句话说,它将对 OpenTracing API 的调用转换为 Elastic APM,从而允许重用现有的检测。

服务的第一个 span 将转换为 Elastic APM Transaction,后续的 span 将映射到 Elastic APM Span

入门

编辑

开始使用 OpenTracing API 桥接的第一步是声明对 API 的依赖

pom.xml。

<dependency>
    <groupId>co.elastic.apm</groupId>
    <artifactId>apm-opentracing</artifactId>
    <version>${elastic-apm.version}</version>
</dependency>

build.gradle。

compile "co.elastic.apm:apm-opentracing:$elasticApmVersion"

将版本占位符替换为 Maven Central 的最新版本Maven Central

初始化追踪器

编辑
import co.elastic.apm.opentracing.ElasticApmTracer;
import io.opentracing.Tracer;

Tracer tracer = new ElasticApmTracer();

自 1.22.0 版本起,OpenTracing 桥接支持通过 ServiceLoader 机制查找和初始化 Tracer。一个依赖此功能的系统示例是 tracer-resolver,它被各种 OpenTracing 库使用,例如 Apache Camel OpenTracing 组件。当使用此类组件时,无需更改代码,只需添加 OpenTracing 库和 Elastic OpenTracing 桥接的依赖项即可。

Elastic APM 特定标签

编辑

Elastic APM 定义了一些未包含在 OpenTracing API 中但在 Elastic APM 上下文中相关的标签。

  • type - 设置事务/span 的类型,例如 requestextdb
  • subtype - 设置 span 的子类型,例如 httpmysqljsf
  • action - 设置与 span 相关的操作,例如 queryexecuterender
  • user.id - 设置用户 ID,显示在 Elastic APM 应用程序中事务详细信息的“用户”选项卡中
  • user.email - 设置用户电子邮件,显示在 Elastic APM 应用程序中事务详细信息的“用户”选项卡中
  • user.username - 设置用户名,显示在 Elastic APM 应用程序中事务详细信息的“用户”选项卡中
  • result - 设置事务的结果。覆盖默认值 success。如果 error 标签设置为 true,则默认值为 error。例如,将 http.status_code 设置为 200 会隐式地将结果设置为 HTTP 2xx(如果未明确设置其他值)。

注意事项

编辑

并非所有 OpenTracing API 的功能都受支持。

上下文传播
编辑

此桥接仅支持 Format.Builtin.TEXT_MAPFormat.Builtin.HTTP_HEADERS 格式。Format.Builtin.BINARY 目前不受支持。

Span 引用
编辑

目前,此桥接仅支持 child_of 引用。其他引用,如 follows_from 尚不支持。

Baggage
编辑

不支持 Span.setBaggageItem(String, String) 方法。Baggage 项将被静默丢弃。

日志
编辑

仅支持异常日志记录。在 OpenTracing span 上记录异常将创建一个 Elastic APM Error。例如

Exception e = ...
span.log(
    Map.of(
        "event", "error",
        "error.object", e
    )
)

其他日志将被静默丢弃。