Segment reference and reporting overhaul (#50)

20 files changed
tree: 9000eaf6eb19780f782789bf748d3e80bc318181
  1. .github/
  2. dist/
  3. docs/
  4. scripts/
  5. src/
  6. tests/
  7. .asf.yaml
  8. .dockerignore
  9. .editorconfig
  10. .gitignore
  11. .gitmodules
  12. .prettierrc
  13. CHANGELOG.md
  14. jest.config.js
  15. jest.setup.js
  16. LICENSE
  17. NOTICE
  18. package-lock.json
  19. package.json
  20. README.md
  21. tsconfig.json
  22. tslint.json
README.md

SkyWalking NodeJS Agent

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';

agent.start();

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:
agent.start({
  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 VariableDescriptionDefault
SW_AGENT_NAMEThe name of the serviceyour-nodejs-service
SW_AGENT_INSTANCEThe name of the service instanceRandomly generated
SW_AGENT_COLLECTOR_BACKEND_SERVICESThe backend OAP server address127.0.0.1:11800
SW_AGENT_SECUREWhether to use secure connection to backend OAP serverfalse
SW_AGENT_AUTHENTICATIONThe 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_LEVELThe logging level, could be one of error, warn, info, debuginfo
SW_AGENT_DISABLE_PLUGINSComma-delimited list of plugins to disable in the plugins directory (e.g. “mysql”, “express”).``
SW_IGNORE_SUFFIXThe 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_PATHThe paths of endpoints that will be ignored (not traced), comma separated``
SW_HTTP_IGNORE_METHODComma-delimited list of http methods to ignore (GET, POST, HEAD, OPTIONS, etc...)``
SW_SQL_TRACE_PARAMETERSIf set to ‘true’ then SQL query parameters will be includedfalse
SW_SQL_PARAMETERS_MAX_LENGTHThe maximum string length of SQL parameters to log512
SW_MONGO_TRACE_PARAMETERSIf set to ‘true’ then mongodb query parameters will be includedfalse
SW_MONGO_PARAMETERS_MAX_LENGTHThe maximum string length of mongodb parameters to log512
SW_AGENT_MAX_BUFFER_SIZEThe 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:

LibraryPlugin Name
built-in http and https modulehttp / https
Expressexpress
Axiosaxios
MySQLmysql
PostgreSQLpg
pg-cursorpg-cursor
MongoDBmongodb
Mongoosemongoose
RabbitMQamqplib

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:

LibraryUnderlying Plugin Name
requesthttp / https
request-promisehttp / https
koahttp / https

Contact Us

License

Apache 2.0