Awesome Open Source
Awesome Open Source

SkyWalking NodeJS Agent

Sky Walking logo

SkyWalking-NodeJS: The NodeJS Agent for Apache SkyWalking, which provides the native tracing abilities for NodeJS backend project.

SkyWalking: an APM(application performance monitor) system, especially designed for microservices, cloud native and container-based (Docker, Kubernetes, Mesos) architectures.

GitHub stars Twitter Follow

Build npm version

Install SkyWalking NodeJS package from npmjs

$ npm install --save skywalking-backend-js

Set up NodeJS Agent

SkyWalking NodeJS SDK requires SkyWalking backend (OAP) 8.0+ and NodeJS >= 10.

import agent from 'skywalking-backend-js';


This will use default configurations to start the SkyWalking agent above, if you want to specify your own configurations, here are two methods.

  • Pass those values to agent.start method, such as:
  serviceName: 'my-service-name',
  serviceInstance: 'my-service-instance-name',
  collectorAddress: 'my.collector.address:port',

Note that all options given (including empty/null values) will override the corresponding default values, e.g. agent.start({ collectorAddress: '' }) will override the default value of collectorAddress to empty string, causing errors like DNS resolution failed.

  • Use environment variables.

The supported environment variables are as follows:

Environment Variable Description Default
SW_AGENT_NAME The name of the service your-nodejs-service
SW_AGENT_INSTANCE The name of the service instance Randomly generated
SW_AGENT_SECURE Whether to use secure connection to backend OAP server false
SW_AGENT_AUTHENTICATION The authentication token to verify that the agent is trusted by the backend OAP, as for how to configure the backend, refer to the yaml. not set
SW_AGENT_LOGGING_LEVEL The logging level, could be one of error, warn, info, debug info
SW_AGENT_DISABLE_PLUGINS Comma-delimited list of plugins to disable in the plugins directory (e.g. "mysql", "express") ``
SW_COLD_ENDPOINT Cold start detection is as follows: First span to run within 1 second of skywalking init is considered a cold start. This span gets the tag coldStart set to 'true'. This span also optionally gets the text '<cold>' appended to the endpoint name if SW_COLD_ENDPOINT is set to 'true'. false
SW_IGNORE_SUFFIX The suffices of endpoints that will be ignored (not traced), comma separated .jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html,.svg
SW_TRACE_IGNORE_PATH The paths of endpoints that will be ignored (not traced), comma separated ``
SW_HTTP_IGNORE_METHOD Comma-delimited list of http methods to ignore (GET, POST, HEAD, OPTIONS, etc...) ``
SW_SQL_TRACE_PARAMETERS If set to 'true' then SQL query parameters will be included false
SW_SQL_PARAMETERS_MAX_LENGTH The maximum string length of SQL parameters to log 512
SW_MONGO_TRACE_PARAMETERS If set to 'true' then mongodb query parameters will be included false
SW_MONGO_PARAMETERS_MAX_LENGTH The maximum string length of mongodb parameters to log 512
SW_AGENT_MAX_BUFFER_SIZE The maximum buffer size before sending the segment data to backend '1000'

Note that the various ignore options like SW_IGNORE_SUFFIX, SW_TRACE_IGNORE_PATH and SW_HTTP_IGNORE_METHOD as well as endpoints which are not recorded due to exceeding SW_AGENT_MAX_BUFFER_SIZE all propagate their ignored status downstream to any other endpoints they may call. If that endpoint is running the Node Skywalking agent then regardless of its ignore settings it will not be recorded since its upstream parent was not recorded. This allows elimination of entire trees of endpoints you are not interested in as well as eliminating partial traces if a span in the chain is ignored but calls out to other endpopints which are recorded as children of ROOT instead of the actual parent.

Supported Libraries

There are some built-in plugins that support automatic instrumentation of NodeJS libraries, the complete lists are as follows:

Library Plugin Name
built-in http and https module http / https
Express express
Axios axios
MySQL mysql
MySQL mysql2
PostgreSQL pg
pg-cursor pg-cursor
MongoDB mongodb
Mongoose mongoose
RabbitMQ amqplib
Redis ioredis

Compatible Libraries

The following are packages that have been tested to some extent and are compatible because they work through the instrumentation of an underlying package:

Library Underlying Plugin Name
request http / https
request-promise http / https
koa http / https

Experimental Azure Functions Support

The plugin AzureHttpTriggerPlugin provides a wrapper function for an Azure Functions Javascript HttpTrigger endpoint. This is an http server endpoint and it must be instrumented manually currently. So far all other plugins tested work within the HttpTrigger and so a trace can pass through the Function and on to other endpoints called by the function. How much sense it makes to instrument an Azure Function which already lives in the cloud and has robust monitoring incorporated is a good question, but at the least this plugin will allow those endpoints to show up in a Skywalking trace.


const {default: agent, AzureHttpTriggerPlugin} = require('skywalking-backend-js');

agent.start({ ... });

module.exports = AzureHttpTriggerPlugin.wrap(async function (context, req) {

  /* contents of http trigger function */


All that needs to be done is the actual trigger function needs to be wrapped with azureHttpTriggerPlugin.wrap(), whether that function is a default export or an explicitly named entryPoint or run or index.

Contact Us


Apache 2.0

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
Typescript (262,494
Nodejs (55,199
Observability (386
Apm (343
Distributed Tracing (300
Dapper (298
Skywalking (77
Related Projects