Span API
编辑Span
API
编辑Span 用于衡量单个事件的持续时间。当创建一个 span 时,它会测量时间直到调用 span.end()
。
要获取 Span
对象,您需要调用 apm.startSpan()
。
有关使用自定义 span 的示例,请参阅Node.js 中的自定义 Span文章。
span.type
编辑添加于: v0.1.0
在以下版本中将组件拆分为 type
、subtype
和 action
:v3.0.0
-
<string>
默认值:custom
span 的类型。也可以通过 apm.startSpan()
设置。
该类型用于将类似的 span 分组在一起。例如,所有 MySQL 查询的 span 都被赋予 db
类型,以及 mysql
子类型和 query
操作。
在上面的示例中,db
被认为是类型。虽然该类型没有命名限制,但以下类型在所有 Elastic APM 代理中都是标准化的:app
、db
、cache
、template
和 ext
。
span.subtype
编辑添加于: v0.1.0
-
<string>
默认值:custom
span 的子类型。也可以通过 apm.startSpan()
设置。
子类型通常是模块或库的名称。例如,MySQL 查询的子类型为 mysql
。
span.action
编辑添加于: v0.1.0
-
<string>
默认值:custom
span 的操作。也可以通过 apm.startSpan()
设置。
操作通常是特定的函数名称或特定功能的总体描述。例如,数据库查询通常具有 query
操作。
span.setLabel(name, value[, stringify = true])
编辑添加于: v2.1.0
从 span.setTag()
重命名为 span.setLabel()
: v2.10.0
在以下版本中添加 stringify
参数:v3.11.0
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
span.addLabels({productId: 42, productName: 'butter'}, false);
在 span 上添加多个标签。您可以多次添加标签。
标签是 Elasticsearch 索引的键/值对,因此可以搜索(与通过 apm.setCustomContext()
设置的数据相反)。在使用自定义标签之前,请确保您了解可用的不同类型的元数据。
避免定义过多的用户指定标签。在索引中定义太多唯一的字段是一种可能导致映射爆炸的情况。
span.ids
编辑添加于: v2.17.0
生成一个包含 span.id
和 trace.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
-
outcome
<string>
setOutcome
方法允许最终用户覆盖 Node.js 代理对 span 的 outcome
属性的默认设置。 setOutcome
方法接受一个字符串,可以是 success
、failure
或 unknown
,并将强制代理报告特定 span 的此值。
span.setServiceTarget(type, name)
编辑添加于: v3.39.0
手动设置 service.target.type
和 service.target.name
字段,用于标识下游服务。它们用于 Kibana APM 应用程序中的服务地图和依赖项。这些值仅用于“退出” span - 表示传出通信的 span,在创建 span 时标记为 exitSpan: true
。
如果为 type
和 name
都提供了假值(例如 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" 字段,该字段可以是 Transaction
、Span
、OpenTelemetry SpanContext
对象,或 W3C 跟踪上下文 traceparent 字符串。例如:span.addLink({ context: anotherSpan })
。
span.addLinks([links])
编辑添加于:v4.7.0
-
links
<Array>
Span 链接。
将 span 链接添加到此 span。
一个 span 可以引用零个或多个其他事务或 span(与其父级分离)。Span 链接将显示在 Kibana APM 应用的跟踪视图中。link
参数是一个对象,其中包含一个 "context" 字段,该字段可以是 Transaction
、Span
、OpenTelemetry SpanContext
对象,或 W3C 跟踪上下文 traceparent 字符串。例如:span.addLinks([{ context: anotherSpan }])
。