自定义事务
编辑自定义事务编辑
这是一个关于如何使用自定义事务的示例。有关 Elastic APM Node.js 事务 API 的一般信息,请参阅 事务 API 文档。
Elastic APM Node.js 代理通过将传入的 HTTP 请求分组到逻辑桶中来检测您的应用程序。每个 HTTP 请求都记录在我们称为事务的内容中。但是,如果您的应用程序不是常规的 HTTP 服务器,则 Node.js 代理将无法知道事务何时开始和结束。
例如,如果您的应用程序是后台作业处理程序或仅接受 WebSockets,则需要手动启动和结束事务。
后台作业应用程序轮询 SQS 排队系统以获取作业的示例
var apm = require('elastic-apm-node').start() var sqs = require('simple-sqs')() // listen for jobs on the queue var queue = sqs(queueUrl, function (msg, cb) { // The SQS queue will send multiple messages using an array // of records var tasks = msg.Body.Records.map(function (job) { return new Promise(function (resolve, reject) { // start one new transaction for each job record received // on the queue var name = 'Job ' + job.type var type = 'job' var trans = apm.startTransaction(name, type) // call the function that actually processes the job processJob(job, function (err) { // if the job could not be processes, set the result to // a 5xx error code. Here 500 indicates error, 200 is ok trans.result = err ? 'error' : 'success' // end the transaction trans.end() if (err) { reject(err) } else { resolve() } }) }) }) Promise.all(tasks).then(function () { cb() }, cb) }) queue.on('error', function (err) { // in case the queue encounters an error, report it to Elastic APM apm.captureError(err) })