Elastic APM RUM Отсутствуют вложенные пролеты

При вложении в Elsatic APM используется либо API-интерфейс Opentracing, либо API-интерфейс Elastic 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's ngOnInit может быть записано с помощью промежутка, но другие перехватчики событий никогда не записываются.

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

Я пробовал варианты этого. Обертывание span в span, childOf, span уровня приложения, отдельные экземпляры span.

1 ответ

Чтобы включить интервалы в транзакции, вы должны запустить интервалы из объекта транзакции.

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

И при завершении родительского объекта транзакции все вложенные участки также будут завершены каскадом

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

Другие вопросы по тегам