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,也可以将其注册为全局 tracer。

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

// ...

const tracer = opentracing.globalTracer();

请参考 opentracing-javascript 文档以了解更多关于 OpenTracing API 的详细信息。

如果您使用 script 标签加载 RUM 代理,请确保使用我们的 OpenTracing bundle (@elastic/apm-rum/dist/bundles/elastic-apm-opentracing.umd.js) ,然后您可以使用 window.elasticApm.createTracer() 创建一个 tracer。

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 错误。