自定义事务编辑

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