@opentelemetry/instrumentation-sequelize
v0.2.1
Published
OpenTelemetry instrumentation for `sequelize` ORM
Readme
OpenTelemetry sequelize Instrumentation for Node.js
This module provides automatic instrumentation for the sequelize package, which may be loaded using the @opentelemetry/sdk-trace-node package and is included in the @opentelemetry/auto-instrumentations-node bundle.
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.
Installation
npm install --save @opentelemetry/instrumentation-sequelizeSupported versions
sequelizeversions>=6 <7
Usage
const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node');
const { SequelizeInstrumentation } = require('@opentelemetry/instrumentation-sequelize');
const { registerInstrumentations } = require('@opentelemetry/instrumentation');
const provider = new NodeTracerProvider();
provider.register();
registerInstrumentations({
instrumentations: [
new SequelizeInstrumentation({
// see below for available configuration
}),
],
});
export interface SequelizeInstrumentationConfig extends InstrumentationConfig {
/** Hook for adding custom attributes using the query */
queryHook?: SequelizeQueryHook;
/** Hook for adding custom attributes using the response payload */
responseHook?: SequelizeResponseCustomAttributesFunction;
/** Set to true if you only want to trace operation which has parent spans */
ignoreOrphanedSpans?: boolean;
/**
* Sequelize operation use postgres/mysql/mariadb/etc. under the hood.
* If, for example, postgres instrumentation is enabled, a postgres operation will also create
* a postgres span describing the communication.
* Setting the `suppressInternalInstrumentation` config value to `true` will
* cause the instrumentation to suppress instrumentation of underlying operations.
*/
suppressInternalInstrumentation?: boolean;
* An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.Instrumentation Options
You can set the following:
| Options | Type | Description |
| --------------------------------- | ------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| queryHook | SequelizeQueryHook | Function called before running the query. Allows for adding custom attributes to the span. |
| responseHook | SequelizeResponseCustomAttributesFunction | Function called after a response is received. Allows for adding custom attributes to the span. |
| ignoreOrphanedSpans | boolean | Can be set to only produce spans which have parent spans. Default: false |
| suppressInternalInstrumentation | boolean | Set to ignore the underlying database library instrumentation. Default: false |
Semantic Conventions
| Attribute | Short Description |
| -------------------- | --------------------------------------------------------------------------- |
| db.namespace | The name of the database being accessed. |
| db.operation.name | The name of the operation being executed (e.g. the SQL keyword). |
| db.collection.name | The name of the table being accessed. |
| db.query.text | The database statement being executed. |
| db.system.name | An identifier for the database management system (DBMS) product being used. |
| server.address | Remote address of the database. |
| server.port | Peer port number of the network connection. |
| network transport | OSI transport layer or inter-process communication method. |
Attributes collected:
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.
