Transaction API编辑

事务将多个跨度分组到一个逻辑组中。

要启动事务,您需要调用 apm.startTransaction().

要查看使用自定义事务的示例,请参阅 自定义事务 文章。

transaction.name编辑

  • 类型: 字符串
  • 默认值: Unknown

事务的名称。

可用于设置或覆盖事务的名称(在性能监控细分中可见)。

transaction.type编辑

  • 类型: 字符串
  • 默认值: custom

事务的类型。

transaction.timestamp编辑

  • 类型: 字符串
  • 默认值: undefined

事务的时间戳。如果未提供事务时间戳(默认行为),则它将由 apm-server(v6.3+)设置。但是,您可以在客户端(使用 new Date().toISOString())设置时间戳,但您应该知道时间戳将反映客户端的本地时间,这可能并不总是准确的。

transaction.startSpan([name][, type][, options])编辑

const span = transaction.startSpan('My custom span')

启动并返回与该事务关联的新自定义跨度。

参数

  • name - 跨度的名称(字符串)。默认为 unnamed
  • type - 跨度的类型(字符串)。默认为 custom
  • options - 支持以下选项

    • blocking - 阻止关联的事务在该跨度结束之前结束。阻塞的跨度会自动创建内部任务。默认为 false。
    • parentId - 与新跨度关联的父 ID。默认为当前事务 ID
    • sync - 表示跨度是同步的还是异步的。

启动跨度后,它将测量直到 span.end() 被调用为止的时间。阻塞的跨度允许用户在某些情况下控制 托管事务 的提前关闭。

另请参阅 Span API 文档,了解有关如何使用自定义跨度的详细信息。

transaction.block(flag)编辑

transaction.block(true)

阻止当前运行的自动检测或自定义事务在关联的跨度结束时自动关闭。

参数

  • flag - 布尔值。默认为 false。

大多数情况下,用户不需要阻止正在运行的事务,因为代理会尝试考虑所有异步网络活动并捕获所需的信息。当您认为自动检测代码错过了重要的活动并过早地结束了一个事务时,阻塞 API 会很有用。这可能是一个包含大量无法自动检测的异步任务(如 Web 工作者)的页面的示例。

// get the current active autoinstrumented transaction (page-load, route-change, etc.)
const activeTransaction = apm.getCurrentTransaction()

if (activeTransaction) {
  activeTransaction.block(true)
}

// Perform some more async tasks and unblock it
activeTransaction.block(false)

您还可以通过创建阻塞的跨度来实现类似的操作。查看 托管事务 指南以了解更多信息。

transaction.addLabels()编辑

transaction.addLabels({ [name]: value })

在事务上添加多个标签。如果事务期间发生错误,它也会被标记为相同的标签。

标签是键值对,由 Elasticsearch 索引,因此可搜索(与通过 apm.setCustomContext() 设置的数据集相反)。

在使用自定义标签之前,请确保您了解可用的不同类型的 元数据

参数

  • name - 任何字符串。所有句点 (.)、星号 (*) 和双引号 (") 将被替换为下划线 (_),因为这些字符在 Elasticsearch 中具有特殊含义
  • value - 任何字符串、布尔值或数字。所有其他数据类型将在发送到 APM 服务器之前转换为字符串。

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

transaction.end()编辑

transaction.end()

结束事务。在活动事务上调用 transaction.end 会结束所有底层跨度并将它们标记为 truncated。如果事务已经结束,则不会发生任何事情。

transaction.mark(key)编辑

transaction.mark(key)

标记相对于事务开始的当前时间点。使用此方法标记事务处于活动状态时发生的重大事件。

参数

  • key - 任何字符串。所有句点 (.)、星号 (*) 和双引号 (") 将被替换为下划线 (_),因为这些字符在 Elasticsearch 中具有特殊含义