自定义事务
编辑自定义事务编辑
Elastic APM 使用事务和跨度的概念来收集性能数据:跨度衡量操作单元,并分组到事务中。
默认情况下,Elastic APM JS 代理会为所有 支持的技术 创建事务,并将它们发送到 apm-server。但是,如果当前的检测无法提供所有洞察,您可以创建自定义事务来填补空白。
以下是如何使用自定义事务和跨度的示例
const transaction = apm.startTransaction('Application start', 'custom') const url = 'http://example.com/data.json' const httpSpan = transaction.startSpan('GET ' + url, 'external.http') fetch(url) .then((resp) => { if (!resp.ok) { apm.captureError(new Error(`fetch failed with status ${resp.status} ${resp.statusText}`)) } httpSpan.end() transaction.end() })
自定义事务不受代理管理,因此代理不会捕获 自动检测 中显示的跨度和其他计时信息,例如 XHR、资源计时等。
创建受管理的事务编辑
如果用户有兴趣根据 支持的技术 将所有其他计时信息和跨度关联到自定义事务,他们可以在创建事务时将 managed
标志传递给 true
,并将由代理控制。但是,一旦所有关联的跨度完成,事务可能会自动关闭。如果用户希望控制此行为,他们可以创建一个阻塞跨度,该跨度将保留事务,直到调用 span.end
。
const transaction = apm.startTransaction('custom managed', 'custom', { managed: true }) const span = transaction.startSpan('async-task', 'app', { blocking: true }) setTimeout(() => { span.end() /** * This would also end the managed transaction once all the blocking spans are completed and * transaction would also contain other timing information and spans similar to auto * instrumented transactions like `page-load` and `route-change`. */ }, 1000)
自定义事务和受管理事务都会在调用 transaction.end
后以配置的间隔自动排队并一起发送。