自定义跨度
编辑自定义跨度编辑
这是一个使用自定义跨度的示例。有关 Elastic APM Node.js Span API 的一般信息,请参阅 Span API 文档。
如果你想跟踪和计时事务期间在应用程序中发生的自定义事件,则可以向现有事务添加新的跨度。
在下面的示例中,我们创建了一个 Express 应用程序,它会计时以下操作需要多长时间:
- 接收 HTTP POST 或 PUT 请求的正文
- 解析客户端发送的 JSON
var apm = require('elastic-apm-node').start() var app = require('express')() // body reader middleware app.use(function (req, res, next) { if (req.method !== 'POST' && req.method !== 'PUT') { return next() } // `startSpan` will only return a span if there's an // active transaction var span = apm.startSpan('receiving body') var buffers = [] req.on('data', function (chunk) { buffers.push(chunk) }) req.on('end', function () { req.body = Buffer.concat(buffers).toString() // end the span after we're done loading data from the // client if (span) span.end() next() }) }) // JSON parser middleware app.use(function (req, res, next) { if (req.headers['content-type'] !== 'application/json') { return next() } // start a span to measure the time it takes to parse // the JSON var span = apm.startSpan('parse json') try { req.json = JSON.parse(req.body) } catch (e) {} // when we've processed the json, stop the custom span if (span) span.end() next() }) // ...your route handler goes here... app.listen(3000)