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