README
OpenTelemetry ioredis Instrumentation for Node.js
This module provides automatic instrumentation for ioredis
.
For automatic instrumentation see the @opentelemetry/sdk-trace-node package.
Compatible with OpenTelemetry JS API and SDK 1.0+
.
Installation
npm install --save @opentelemetry/instrumentation-ioredis
Supported Versions
>=2.0.0
Usage
To load a specific instrumentation (ioredis in this case), specify it in the registerInstrumentations's configuration
const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node');
const {
IORedisInstrumentation,
} = require('@opentelemetry/instrumentation-ioredis');
const { registerInstrumentations } = require('@opentelemetry/instrumentation');
const provider = new NodeTracerProvider();
provider.register();
registerInstrumentations({
instrumentations: [
new IORedisInstrumentation({
// see under for available configuration
}),
],
});
IORedis Instrumentation Options
IORedis instrumentation has few options available to choose from. You can set the following:
Options | Type | Description |
---|---|---|
dbStatementSerializer |
DbStatementSerializer |
IORedis instrumentation will serialize db.statement using the specified function. |
requestHook |
RedisRequestCustomAttributeFunction (function) |
Function for adding custom attributes on db request. Receives params: span, { moduleVersion, cmdName, cmdArgs } |
responseHook |
RedisResponseCustomAttributeFunction (function) |
Function for adding custom attributes on db response |
requireParentSpan |
boolean |
Require parent to create ioredis span, default when unset is true |
Custom db.statement Serializer
The instrumentation serializes the whole command into a Span attribute called db.statement
. The standard serialization format is {cmdName} {cmdArgs.join(',')}
.
It is also possible to define a custom serialization function. The function will receive the command name and arguments and must return a string.
Here is a simple example to serialize the command name skipping arguments:
const { IORedisInstrumentation } = require('@opentelemetry/instrumentation-ioredis');
const ioredisInstrumentation = new IORedisInstrumentation({
dbStatementSerializer: function (cmdName, cmdArgs) {
return cmdName;
},
});
requestHook
Using Instrumentation user can configure a custom "hook" function which will be called on every request with the relevant span and request information. User can then set custom attributes on the span or run any instrumentation-extension logic per request.
Here is a simple example that adds a span attribute of ioredis
instrumented version on each request:
const { IORedisInstrumentation } = require('@opentelemetry/instrumentation-ioredis');
const ioredisInstrumentation = new IORedisInstrumentation({
requestHook: function (
span: Span,
requestInfo: IORedisRequestHookInformation
) {
if (requestInfo.moduleVersion) {
span.setAttribute(
'instrumented_library.version',
requestInfo.moduleVersion
);
}
}
});
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.