自定义事务
编辑自定义事务
编辑这是一个关于如何使用自定义事务的示例。有关 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) })