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 结束的时间。必须是 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
-
outcome
<string>
setOutcome
方法允许最终用户覆盖 Node.js 代理对 Span 的 outcome
属性的默认设置。 setOutcome
方法接受 success
、failure
或 unknown
的字符串,并将强制代理为特定 Span 报告此值。
span.setServiceTarget(type, name)
edit
新增于: v3.39.0
手动设置 service.target.type
和 service.target.name
字段,用于标识下游服务。它们用于 Kibana APM 应用程序中的 服务地图 和 依赖关系。这些值仅用于“退出”跨度 - 代表传出通信的跨度,在跨度创建时标记为 exitSpan: true
。
如果 type
和 name
都给出假值(例如 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" 字段,该字段是一个 Transaction
、Span
、OpenTelemetry SpanContext
对象或 W3C 跟踪上下文 *traceparent* 字符串。例如:span.addLink({ context: anotherSpan })
。