首先,我认为您需要为此创建一个事务,因为事务是用户的“流”。如果您想将其作为Span进行跟踪,则需要处于活动的 Transaction中,而您没有*。
现在,根据这个文档,您需要创建一个自定义事务,然后关闭它。
例如:
const click = () => {
const transaction = apm.startTransaction('UserClicked', 'custom')
transaction.addLabels({ buttonText })
originalClickAction()
transaction.end()
}
现在你可以将它与你的 JSX 一起使用,<Button text={buttonText} click={click} />
就个人而言,我更喜欢为任何代码创建包装器:
export const monitor = (eventName, action, labels) => {
const transaction = apm.startTransaction(eventName, 'custom')
if (labels) transaction.addLabels(labels)
return Promise.resolve(action(transaction))
.finally(() => transaction.end())
}
// Usage
const click = () => monitor('UserClicked', originalClickAction, { buttonText })
* 如果你想说你在page-load
/route-change
事务中,你不能。因为用户可能会等待一段时间,查看页面,然后单击它。实际上,您可以调用它,route-change
因为它不是。