OpenTracing bridge编辑

OpenTracing 已停止使用,建议使用 OpenTelemetry bridge
最新支持的 OpenTracing 版本:0.33(截至代理和 OpenTracing-bridge 版本 1.9.0)

Elastic APM OpenTracing bridge 允许使用 OpenTracing API 创建 Elastic APM 事务Span。换句话说,它将对 OpenTracing API 的调用转换为 Elastic APM,从而允许重用现有的仪表。

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

入门编辑

开始使用 OpenTracing API bridge 的第一步是声明对 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 bridge 支持通过 ServiceLoader 机制进行 跟踪器 查找和初始化。依赖于此功能的系统示例是 tracer-resolver,它被各种 OpenTracing 库使用,例如 Apache Camel OpenTracing 组件。当使用此类时,不需要更改代码,只需添加 OpenTracing 库和 Elastic OpenTracing bridge 的依赖项。

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 功能都受支持。

上下文传播编辑

此 bridge 仅支持 Format.Builtin.TEXT_MAPFormat.Builtin.HTTP_HEADERS 格式。 Format.Builtin.BINARY 当前不受支持。

Span 引用编辑

目前,此 bridge 仅支持 child_of 引用。其他引用(如 follows_from)尚不受支持。

Baggage编辑

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

日志编辑

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

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

其他日志将被静默丢弃。