2

Describe the bug

Transaction not recorded while i am hit some endpoint, but the apm-server get metric data.

To Reproduce

I have start apm-server connection in the first file named server.ts

const apm = elasticApmNode.start({
    serviceName: 'Elk Stack',
    serverUrl: '${process.env.APM_SERVER_HOST}',
    captureBody: 'all',
});

Creating express route using decorators, implement routing using app.use()

router.route('${route.path}')[route.method]([...middlewares.before, handler, ...middlewares.after, ...middlewares.error])
app.use('${uses}${prefix}', router);

And i have try to solve this problem by creating transaction manualy using apm.startTransaction code example.

res.locals.apm.startTransaction(`${req.method.toUpperCase()} ${req.originalUrl}`, 'HTTP Request');
res.locals.apm.setTransactionName(`${req.method.toUpperCase()} ${req.originalUrl}`, 'HTTP Request');

But the transaction still not recorded, actually the span of transaction recorded but transaction object only have transaction.id element. this is the data.

{
  "_index": "apm-7.4.0-span-000002",
  "_type": "_doc",
  "_id": "qE6CsW4B-ATTlniHYhaa",
  "_version": 1,
  "_score": null,
  "_source": {
    "parent": {
      "id": "e7a181e4404a3b3b"
    },
    "observer": {
      "hostname": "c25837d06ef9",
      "id": "25003f85-d836-49cc-b242-36241e59c3b8",
      "ephemeral_id": "19bd8d86-e90a-40d2-8d3b-c4a2cfe3e182",
      "type": "apm-server",
      "version": "7.4.0",
      "version_major": 7
    },
    "agent": {
      "name": "nodejs",
      "version": "3.2.0"
    },
    "trace": {
      "id": "7da976d15b45dd660f47f21f60155902"
    },
    "@timestamp": "2019-11-28T10:15:39.471Z",
    "ecs": {
      "version": "1.1.0"
    },
    "service": {
      "environment": "production",
      "name": "Elk Stack"
    },
    "processor": {
      "name": "transaction",
      "event": "span"
    },
    "transaction": {
      "id": "e7a181e4404a3b3b"
    },
    "timestamp": {
      "us": 1574936139471892
    },
    "span": {
      "duration": {
        "us": 5802
      },
      "stacktrace": [
        {
          "library_frame": true,
          "exclude_from_grouping": false,
          "filename": "node_modules/sequelize/lib/dialects/postgres/query.js",
          "abs_path": "/var/www/app/node_modules/sequelize/lib/dialects/postgres/query.js",
          "line": {
            "number": 59
          },
          "function": "parameters.length.Promise"
        },
        {
          "library_frame": true,
          "exclude_from_grouping": false,
          "filename": "node_modules/bluebird/js/release/debuggability.js",
          "abs_path": "/var/www/app/node_modules/bluebird/js/release/debuggability.js",
          "line": {
            "number": 411
          },
          "function": "Promise._execute"
        },
        {
          "library_frame": true,
          "exclude_from_grouping": false,
          "filename": "node_modules/bluebird/js/release/promise.js",
          "abs_path": "/var/www/app/node_modules/bluebird/js/release/promise.js",
          "line": {
            "number": 518
          },
          "function": "Promise._resolveFromExecutor"
        },
        {
          "library_frame": true,
          "exclude_from_grouping": false,
          "filename": "node_modules/bluebird/js/release/promise.js",
          "abs_path": "/var/www/app/node_modules/bluebird/js/release/promise.js",
          "line": {
            "number": 103
          },
          "function": "Promise"
        },
        {
          "exclude_from_grouping": false,
          "library_frame": true,
          "filename": "node_modules/sequelize/lib/dialects/postgres/query.js",
          "abs_path": "/var/www/app/node_modules/sequelize/lib/dialects/postgres/query.js",
          "line": {
            "number": 59
          },
          "function": "run"
        },
        {
          "library_frame": true,
          "exclude_from_grouping": false,
          "abs_path": "/var/www/app/node_modules/sequelize/lib/sequelize.js",
          "filename": "node_modules/sequelize/lib/sequelize.js",
          "line": {
            "number": 645
          },
          "function": "runHooks.then.then"
        },
        {
          "library_frame": true,
          "exclude_from_grouping": false,
          "filename": "node_modules/bluebird/js/release/util.js",
          "abs_path": "/var/www/app/node_modules/bluebird/js/release/util.js",
          "line": {
            "number": 16
          },
          "function": "tryCatcher"
        },
        {
          "library_frame": true,
          "exclude_from_grouping": false,
          "filename": "node_modules/bluebird/js/release/promise.js",
          "abs_path": "/var/www/app/node_modules/bluebird/js/release/promise.js",
          "line": {
            "number": 547
          },
          "function": "Promise._settlePromiseFromHandler"
        },
        {
          "exclude_from_grouping": false,
          "library_frame": true,
          "filename": "node_modules/bluebird/js/release/promise.js",
          "abs_path": "/var/www/app/node_modules/bluebird/js/release/promise.js",
          "line": {
            "number": 604
          },
          "function": "Promise._settlePromise"
        },
        {
          "library_frame": true,
          "exclude_from_grouping": false,
          "filename": "node_modules/bluebird/js/release/promise.js",
          "abs_path": "/var/www/app/node_modules/bluebird/js/release/promise.js",
          "line": {
            "number": 649
          },
          "function": "Promise._settlePromise0"
        },
        {
          "library_frame": true,
          "exclude_from_grouping": false,
          "filename": "node_modules/bluebird/js/release/promise.js",
          "abs_path": "/var/www/app/node_modules/bluebird/js/release/promise.js",
          "line": {
            "number": 729
          },
          "function": "Promise._settlePromises"
        },
        {
          "library_frame": true,
          "exclude_from_grouping": false,
          "filename": "node_modules/bluebird/js/release/async.js",
          "abs_path": "/var/www/app/node_modules/bluebird/js/release/async.js",
          "line": {
            "number": 93
          },
          "function": "_drainQueueStep"
        },
        {
          "library_frame": true,
          "exclude_from_grouping": false,
          "filename": "node_modules/bluebird/js/release/async.js",
          "abs_path": "/var/www/app/node_modules/bluebird/js/release/async.js",
          "line": {
            "number": 86
          },
          "function": "_drainQueue"
        },
        {
          "library_frame": true,
          "exclude_from_grouping": false,
          "filename": "node_modules/bluebird/js/release/async.js",
          "abs_path": "/var/www/app/node_modules/bluebird/js/release/async.js",
          "line": {
            "number": 102
          },
          "function": "Async._drainQueues"
        },
        {
          "exclude_from_grouping": false,
          "library_frame": true,
          "filename": "node_modules/bluebird/js/release/async.js",
          "abs_path": "/var/www/app/node_modules/bluebird/js/release/async.js",
          "line": {
            "number": 15
          },
          "function": "Async.drainQueues"
        },
        {
          "exclude_from_grouping": false,
          "library_frame": true,
          "filename": "timers.js",
          "abs_path": "timers.js",
          "line": {
            "number": 810
          },
          "function": "runCallback"
        },
        {
          "exclude_from_grouping": false,
          "library_frame": true,
          "filename": "timers.js",
          "abs_path": "timers.js",
          "line": {
            "number": 768
          },
          "function": "tryOnImmediate"
        },
        {
          "library_frame": true,
          "exclude_from_grouping": false,
          "filename": "timers.js",
          "abs_path": "timers.js",
          "line": {
            "number": 745
          },
          "function": "processImmediate"
        }
      ],
      "subtype": "postgresql",
      "name": "INSERT INTO \"user\"",
      "action": "query",
      "id": "02a2368953f0f483",
      "type": "db",
      "sync": false,
      "db": {
        "statement": "INSERT INTO \"user\" (\"id\",\"name\",\"username\",\"email\",\"password\",\"birthdate\",\"phone\",\"createdDate\",\"updatedDate\") VALUES (DEFAULT,$1,$2,$3,$4,$5,$6,$7,$8) RETURNING *;",
        "type": "sql"
      }
    }
  },
  "fields": {
    "@timestamp": [
      "2019-11-28T10:15:39.471Z"
    ]
  },
  "sort": [
    1574936139471
  ]
}

Expected behavior

APM page like this image

The Transaction Data should be like this (example using loopback 2)

image

Environment (please complete the following information)

  • OS: Linux (Docker in Windows)
  • Node.js version: 8
  • APM Server version: 7.4.0
  • Agent version: 3.2.0
  • Express version: 4.17.1

How are you starting the agent? (please tick one of the boxes)

  • [x] Calling agent.start() directly (e.g. require('elastic-apm-node').start(...))
  • [ ] Requiring elastic-apm-node/start from within the source code
  • [ ] Starting node with -r elastic-apm-node/start

1 Answers1

0

I have fixing this case, i put apm-server connection to the first of my server.ts. import 'localenv' is the suspect of this case.

Fixing case with place apm-server connect at first line of server