弹性APM RUM缺少嵌套范围

时间:2019-07-31 20:55:46

标签: javascript angular opentracing elastic-apm

当嵌套通过Opentracing API或Elastic APM的API在Elsatic APM中扩展时。某些跨度从未记录。

使用import * as apm from '@elastic/apm-rum';

const transaction = this.apm.startTransaction('transaction-scene-loaded', 'custom'); // recorded
const span = this.apm.startSpan('span-scene-loaded', 'custom'); // recorded
const span2 = this.apm.startSpan('span-loading-state-updated', 'custom'); // Not recorded

span2.end();
span.end();
transaction.end();

使用Elastic的OpenTracing API:

const {
  init: initApm,
  createTracer
} = require('@elastic/apm-rum/dist/bundles/elastic-apm-opentracing.umd.js');

跨度的行为也不一致。目前尚不清楚交易何时开始或结束。某些跨度将转换为事务,并且可能不会记录嵌套的跨度。如果我声明一个页面范围的事务,可以按范围记录Angular的ngOnInit,但是永远不会记录其他事件挂钩。

onLoaded() {
  const span = this.tracer.startSpan('span-scene-loaded'); // Not recorded
  // ...
  span.end();
}

我尝试了这种变化。在范围,childOf,应用程序级别范围,范围的各个实例中包装范围。

1 个答案:

答案 0 :(得分:0)

要将跨度包括在交易中,您应该从交易对象开始跨度

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

并结束父交易对象的所有嵌套范围也将以层叠方式结束

https://www.elastic.co/guide/en/apm/agent/js-base/4.x/transaction-api.html#transaction-start-span