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

结束 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)

编辑

添加于: v3.39.0

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

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

如果为 typename 都提供了假值(例如 null),则将显式地从该 span 中排除 service.target。这可能会影响服务地图和 Kibana APM 应用中关于此服务的其他报告。

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

对于 v8.3 之前的 APM Server,service.target.* 字段将被忽略。

span.addLink(link)

编辑

添加于:v4.7.0

  • link {type-link}

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

span.addLinks([links])

编辑

添加于:v4.7.0

将 span 链接添加到此 span。

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