blob: a13bf206e3d0309ea3394bcd27149a5971eebec6 [file] [view]
# Supported libraries
The agent installs a plugin only when its target module is present and its version matches the
plugin rule. Start the agent before loading these modules.
## Automatic instrumentation
| Library | Module | Disable value | Current plugin CI suite |
| --- | --- | --- | --- |
| Node.js HTTP and HTTPS | Built-in `http` and `https` | `http` | Yes |
| [Express](https://expressjs.com/) | `express` | `express` | Yes |
| [Axios](https://axios-http.com/) | `axios` | `axios` | Yes |
| [MySQL](https://github.com/mysqljs/mysql) | `mysql` | `mysql` | Yes |
| [MySQL2](https://github.com/sidorares/node-mysql2) | `mysql2` | `mysql2` | Yes |
| [PostgreSQL](https://node-postgres.com/) | `pg` | `pg` | Yes |
| [pg-cursor](https://github.com/brianc/node-postgres/tree/master/packages/pg-cursor) | `pg-cursor` through the `pg` plugin | `pg` | No current coverage |
| [MongoDB](https://github.com/mongodb/node-mongodb-native) | `mongodb` | `mongodb` | Yes |
| [Mongoose](https://mongoosejs.com/) | `mongoose` | `mongoose` | Yes |
| [RabbitMQ client](https://github.com/amqp-node/amqplib) | `amqplib` | `amqplib` | No dedicated current suite |
| [ioredis](https://github.com/redis/ioredis) | `ioredis` | `ioredis` | Yes |
| [AWS SDK for JavaScript v2](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/welcome.html) | `aws-sdk` 2.x | See below | No dedicated current suite |
The normal plugin loader uses the plugin file name without its `Plugin` suffix for
`SW_AGENT_DISABLE_PLUGINS`. Values are not case-sensitive. AWS SDK v2 has four plugins, so disable
them separately with `AWS2DynamoDB`, `AWS2Lambda`, `AWS2SNS`, or `AWS2SQS`.
```bash
export SW_AGENT_DISABLE_PLUGINS='mysql,express,AWS2SQS'
```
Webpack uses a separate static plugin loader and currently checks internal names such as
`MySQLPlugin`. Read [Webpack](../advanced/webpack.md) before setting plugin disable values in a
bundle.
## Version rules
Most current plugins declare `*` as their module version rule. The AWS plugins declare `2.*`.
`*` means that the loader accepts the installed version; it does not mean that every past or future
module version has been tested.
Current CI runs plugin suites with the dependency versions in the repository lock file. CI also
runs general unit tests on Node.js 20, 22, and 24. Check the
[test workflow](https://github.com/apache/skywalking-nodejs/blob/master/.github/workflows/test.yaml)
and [package lock](https://github.com/apache/skywalking-nodejs/blob/master/package-lock.json) when an
exact tested version matters.
## Libraries without a direct plugin
Libraries built on Node.js HTTP may create spans through the HTTP plugin even when they do not have
a plugin of their own. Earlier project documentation named `request`, `request-promise`, and `koa`
as examples. The current repository does not run a separate CI suite for these packages, so treat
their behavior as indirect HTTP instrumentation.
## What the plugins record
- HTTP plugins record request operations, peers, status codes, and trace context.
- Database plugins record database type, instance, peer, and statement or command where available.
- Messaging plugins record broker and queue or topic information where available.
- AWS SDK v2 plugins record supported DynamoDB, Lambda, SNS, and SQS operations.
Database parameter values are off by default. See [Configuration](../setup/configuration.md) before
enabling them.