Pure NodeJS

Code Execution Monitoring for NodeJS applications.

Install

Install the latest version using the npm command below:

npm install @inspector-apm/inspector-nodejs --save

Configure the Ingestion Key

You need an Ingestion Key to create an Inspector instance. You can obtain a key creating a new project in your Inspector dashboard.

If you use dotenv you can configure the Inspector Ingestion Key in your environment file:

INSPECTOR_INGESTION_KEY=[ingestion key]

Initialization

It’s important that Inspector is started before you require any other modules in your NodeJS application - i.e. before, http, mysql, etc.

This means that you should probably require Inspector in your application’s main file (usually index.js, server.js or app.js).

Here’s a code example of how Inspector is normally initialized in a NodeJS script:

/* -------------------------------------------
* Initialize Inspector with the Ingestion Key.
--------------------------------------------- */
const inspector = require('@inspector-apm/inspector-nodejs')({
ingestionKey: 'xxxxxxxxxxxxx'
})

HTTP Request Monitoring

Inspector wrap incoming http requests in an entity called "Transaction". To create a real picture of what happen in your application during an http request you should start the transaction as soon as possible in the web server.

Take a look on the example below where a custom web server use patterns to route requests to handlers.

/* -------------------------------------------
* Initialize Inspector with the Ingestion Key.
--------------------------------------------- */
const inspector = require('@inspector-apm/inspector-nodejs')({
ingestionKey: 'xxxxxxxxxxxxx682eedcce097b64b'
})
var http = require('http')
var patterns = require('patterns')()
// Setup routes and their respective route handlers
patterns.add('GET /posts/{id}', require('./routes/posts').show)
// Start web server
http.createServer(function (req, res) {
// Check if we have a route matching the incoming request
var match = patterns.match(req.method + ' ' + req.url);
// If no match is found, respond with a 404. Elastic APM will in
// this case use the default transaction name "unknown route"
if (!match) {
res.writeHead(404)
res.end()
return
}
// The patterns module exposes the pattern used to match the
// request on the `pattern` property, e.g. `GET /posts/{id}`
inspector.startTransaction(match.pattern)
req.params = match.params
match.value(req, res)
}).listen(3000)

If the transaction is sterted correctly, Inspector will automatically monitor all other task based on supported modules like mysql2, pg, mongodb, etc.

If you are using Express framework, transactions are automatically labeled based on the names of your routes. You should follow the specific express documentation.

Instrument a CLI script

A NodeJS application that run by the command line can start the transaction immediately after initialization:

/*
* Initialize Inspector with the Ingestion Key.
*/
const inspector = require('@inspector-apm/inspector-nodejs')({
ingestionKey: 'xxxxxxxxxxxxx682eedcce097b64b'
})
/*
* Immediately start the transaction.
*/
inspector.startTransaction(__filename)
// Continue with rest of the application...