Span API编辑

Span 用于衡量单个事件的持续时间。创建 Span 后,它将测量时间,直到调用 span.end()

要获取 Span 对象,您需要调用 apm.startSpan()

要查看使用自定义 Span 的示例,请参阅 Node.js 中的自定义 Span 文章。

span.transaction编辑

添加于:v0.1.0

  • 类型: Transaction

对父事务对象的引用。

所有 Span 都属于一个事务。

span.name编辑

添加于:v0.1.0

Span 的名称。这也可以通过 apm.startSpan() 设置。

span.type编辑

添加于:v0.1.0

将组件拆分为 typesubtypeaction:v3.0.0

Span 的类型。这也可以通过 apm.startSpan() 设置。

类型用于将类似的 Span 分组在一起。例如,所有 MySQL 查询的 Span 都被赋予类型 db,子类型为 mysql,操作为 query

在上面的示例中,db 被认为是类型。虽然类型没有命名限制,但以下类型在所有 Elastic APM 代理中都是标准化的:appdbcachetemplateext

span.subtype编辑

添加于:v0.1.0

Span 的子类型。这也可以通过 apm.startSpan() 设置。

子类型通常是模块或库的名称。例如,MySQL 查询的子类型为 mysql

span.action编辑

添加于:v0.1.0

Span 的操作。这也可以通过 apm.startSpan() 设置。

操作通常是特定函数名称或特定功能的一般描述。例如,数据库查询通常的操作为 query

span.traceparent编辑

添加于:v2.9.0

获取 Span 的序列化 traceparent 字符串。

span.setLabel(name, value[, stringify = true])编辑

添加于:v2.1.0
span.setTag() 重命名为 span.setLabel():v2.10.0
添加 stringify 参数:v3.11.0

  • name <string> 任何句点 (.)、星号 (*) 或双引号 (") 将被替换为下划线 (_),因为这些字符在 Elasticsearch 中具有特殊含义
  • value <string> | <number> | <boolean> 如果未给出 stringify 参数,或设置为 true,则给定值将被转换为字符串。
  • stringify <boolean> 这默认为 true 以保持向后兼容性,但新用法通常需要 false。如果为 true,则如果给出了非字符串 value,它将在发送到 APM Server 之前被转换为字符串。
span.setLabel('productId', 42, false);

在 Span 上设置标签。您可以在同一个 Span 上设置多个标签。

标签是键值对,由 Elasticsearch 索引,因此可搜索(与通过 apm.setCustomContext() 设置的数据不同)。在使用自定义标签之前,请确保您了解可用的不同类型的 元数据

避免定义太多用户指定的标签。在索引中定义太多唯一字段会导致 映射爆炸

span.addLabels({ [name]: value }[, stringify = true])编辑

添加于:v2.1.0
span.addTags() 重命名为 span.addLabels():v2.10.0
添加 stringify 参数:v3.11.0

  • labels <Object> 包含键值对

    • name <string> 任何句点 (.)、星号 (*) 或双引号 (") 将被替换为下划线 (_),因为这些字符在 Elasticsearch 中具有特殊含义
    • value <string> | <number> | <boolean> 如果未给出 stringify 参数,或设置为 true,则给定值将被转换为字符串。
  • stringify <boolean> 这默认为 true 以保持向后兼容性,但新用法通常需要 false。如果为 true,则如果给出了非字符串 value,它将在发送到 APM Server 之前被转换为字符串。
span.addLabels({productId: 42, productName: 'butter'}, false);

在 Span 上添加多个标签。您可以多次添加标签。

标签是键值对,由 Elasticsearch 索引,因此可搜索(与通过 apm.setCustomContext() 设置的数据不同)。在使用自定义标签之前,请确保您了解可用的不同类型的 元数据

避免定义太多用户指定的标签。在索引中定义太多唯一字段会导致 映射爆炸

span.ids编辑

添加于:v2.17.0

生成一个包含 span.idtrace.id 的对象。这使您可以使用结构化日志记录器将日志与 APM 跟踪相关联。

{
  "trace.id": "abc123",
  "span.id": "abc123"
}

span.end([endTime])编辑

添加于:v0.1.0

  • endTime <number> Span 结束的时间。必须是 Unix 时间戳,表示自 1970 年 1 月 1 日 00:00:00 UTC 以来经过的毫秒数。可以使用小数来实现亚毫秒精度。如果未提供,将使用当前时间

结束 Span。如果 Span 已经结束,则不会发生任何事情。

span.outcome编辑

添加于:v3.12.0

Node.js 代理会在 Span 上自动设置一个 outcome 属性。此属性将是以下三个值之一

  • success:表示 Span 的操作成功。
  • failure:表示 Span 的操作成功。
  • unknown:表示代理无法确定 Span 的操作是否成功。unknown 结果会将事务从错误率考虑因素中移除。

构成成功或失败将取决于 Span 类型。

对于一般情况,如果 Node.js 代理在执行 Span 代表的工作期间捕获到错误,则 Span 的结果被认为是失败。

但是,对于代表 HTTP 请求的退出 Span,outcome 基于 HTTP 响应的状态代码。小于 400 的状态代码被认为是成功。大于或等于 400 的状态代码被认为是失败。

span.setOutcome(outcome)编辑

添加于:v3.12.0

setOutcome 方法允许最终用户覆盖 Node.js 代理对 Span 的 outcome 属性的默认设置。 setOutcome 方法接受 successfailureunknown 的字符串,并将强制代理为特定 Span 报告此值。

span.setServiceTarget(type, name)edit

新增于: v3.39.0

  • type <string> | null 目标服务类型,通常与 span.subtype 相同,例如 "mysql"。
  • name <string> | null 目标服务名称,服务的可选范围。对于数据库,它通常是数据库名称。

手动设置 service.target.typeservice.target.name 字段,用于标识下游服务。它们用于 Kibana APM 应用程序中的 服务地图依赖关系。这些值仅用于“退出”跨度 - 代表传出通信的跨度,在跨度创建时标记为 exitSpan: true

如果 typename 都给出假值(例如 null),则 service.target 将明确地从该跨度中排除。这可能会影响该服务的 Kibana APM 应用程序报告,包括服务地图和其他报告。

如果未调用此方法,则服务目标值将从其他跨度字段推断(规范)。

service.target.* 字段在 v8.3 之前的 APM Server 中被忽略。

span.addLink(link)edit

新增于: v4.7.0

  • link {type-link}

一个跨度可以引用零个或多个其他事务或跨度(与其父级分开)。跨度链接将在 Kibana APM 应用程序跟踪视图中显示。 link 参数是一个对象,只有一个 "context" 字段,该字段是一个 TransactionSpan、OpenTelemetry SpanContext 对象或 W3C 跟踪上下文 *traceparent* 字符串。例如:span.addLink({ context: anotherSpan })

span.addLinks([links])edit

新增于: v4.7.0

将跨度链接添加到此跨度。

一个跨度可以引用零个或多个其他事务或跨度(与其父级分开)。跨度链接将在 Kibana APM 应用程序跟踪视图中显示。 link 参数是一个对象,只有一个 "context" 字段,该字段是一个 TransactionSpan、OpenTelemetry SpanContext 对象或 W3C 跟踪上下文 *traceparent* 字符串。例如:span.addLinks([{ context: anotherSpan }])