OpenTracing编辑

Elastic APM RUM 代理提供了对 OpenTracing API 的实现。 ElasticApmTracer 将 OpenTracing API 调用转换为 Elastic APM,从而允许重用现有的检测。

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

入门编辑

为了使用 Elastic APM 的 OpenTracing API,您需要先创建一个 Tracer

const { init: initApm, createTracer } = require('@elastic/apm-rum/dist/bundles/elastic-apm-opentracing.umd.js')
const elasticApm = initApm({
    // ...
})
const elasticTracer = createTracer(elasticApm)

此时,您可以直接使用 elasticTracer,也可以将其注册为全局跟踪器

const opentracing = require('opentracing-javascript')
opentracing.initGlobalTracer(elasticTracer);

// ...

const tracer = opentracing.globalTracer();

有关 OpenTracing API 的更多详细信息,请参阅 opentracing-javascript 文档。

如果您使用脚本标签加载 RUM 代理,请确保在您的脚本中使用我们的 OpenTracing 包(@elastic/apm-rum/dist/bundles/elastic-apm-opentracing.umd.js),然后您可以使用 window.elasticApm.createTracer() 创建跟踪器。

Elastic APM 特定标签编辑

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

  • type - 设置事务或跨度的类型,例如“page-load”或“ext.http”。如果未指定 type,则会设置 custom

以下标签仅与根跨度相关,这些跨度将被转换为 Elastic APM 事务。这些标签出现在 Elastic APM 应用程序中事务详细信息页面上的“用户”选项卡中。

  • user.id - 设置用户 ID
  • user.email - 设置用户电子邮件
  • user.username - 设置用户名

注意事项编辑

Elastic APM RUM 代理不支持 OpenTracing 的某些功能。

上下文传播编辑

目前,唯一支持的载体格式是 FORMAT_HTTP_HEADERSFORMAT_TEXT_MAP。不支持 FORMAT_BINARY

跨度引用编辑

目前,Elastic APM Tracer 支持 REFERENCE_CHILD_OF 引用。但是,只记录第一个 REFERENCE_CHILD_OF 引用,其余引用将被忽略。其他引用(例如 follows_from)目前不支持。

行李编辑

不支持 Span.setBaggageItem 方法。行李物品会被静默丢弃。

日志编辑

只支持错误日志记录。在 OpenTracing 跨度上记录错误将创建一个 Elastic APM 错误。