OpenTelemetry mysql Instrumentation for Node.js
This module provides automatic instrumentation for the mysql2 module.
If total installation size is not constrained, it is recommended to use the @opentelemetry/auto-instrumentations-node bundle with @opentelemetry/sdk-node for the most seamless instrumentation experience.
Compatible with OpenTelemetry JS API and SDK 1.0+.
Installation
npm install --save @opentelemetry/instrumentation-mysql2
Supported Versions
mysql2versions>=1.4.2 <4
Usage
OpenTelemetry MySQL2 Instrumentation allows the user to automatically collect trace data and export them to the backend of choice, to give observability to distributed systems when working with mysql2.
To enable a specific instrumentation, pass it to registerInstrumentations().
This is commonly done via NodeSDK for fully setting up all OpenTelemetry SDK components:
const { NodeSDK } = require('@opentelemetry/sdk-node');
const { MySQL2Instrumentation } = require('@opentelemetry/instrumentation-mysql2');
const sdk = new NodeSDK({
instrumentations: [
new MySQL2Instrumentation(),
],
});
sdk.start();
process.once('beforeExit', async () => { await sdk.shutdown(); });
MySQL2 Instrumentation Options
You can set the following instrumentation options:
| Options | Type | Description |
|---|---|---|
responseHook |
MySQL2InstrumentationExecutionResponseHook (function) |
Function for adding custom attributes from db response |
addSqlCommenterCommentToQueries |
boolean |
If true, adds sqlcommenter specification compliant comment to queries with tracing context (default false). NOTE: A comment will not be added to queries that already contain -- or /* ... */ in them, even if these are not actually part of comments |
maskStatement |
boolean |
If true, masks the db.statement attribute in spans (default false) with the maskStatementHook |
maskStatementHook |
MySQL2InstrumentationMaskStatementHook (function) |
Function for masking the db.statement attribute in spans Default: return query.replace(/\b\d+\b/g, '?').replac(/(["'])(?:(?=(\\?))\2.)*?\1/g, '?'); |
Semantic Conventions
The @opentelemetry/instrumentation-mysql2 versions 0.66.0 and later emit the stable v1.33.0+ semantic conventions.
| Attribute | Description |
|---|---|
db.system.name |
The database system. Always 'mysql'. |
db.query.text |
The database query being executed. |
db.namespace |
The name of the database, fully qualified within the server address and port. |
server.address |
Remote hostname or similar. |
server.port |
Remote port number. |
Useful links
- For more information on OpenTelemetry, visit: https://opentelemetry.io/
- For more about OpenTelemetry JavaScript: https://github.com/open-telemetry/opentelemetry-js
- For help or feedback on this project, join us in GitHub Discussions
License
Apache 2.0 - See LICENSE for more information.