Skip to content
Merged
Changes from 1 commit
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
245d7ee
feat(instrumentation-ioredis): add moduleVersionAttributeName config …
Apr 7, 2021
576233f
Merge remote-tracking branch 'upstream/main' into ioredis-module-vers…
Apr 18, 2021
12ba869
chore(ioredis): type of moduleVersion
Apr 18, 2021
da2eb31
Merge remote-tracking branch 'upstream/main' into ioredis-module-vers…
Apr 25, 2021
ce35c7a
feat(instrumentation-ioredis): convert module version capturing to hook
Apr 25, 2021
077973e
style(instrumentation-ioredis): moduleVersion optional type
Apr 25, 2021
3d06618
fix(instrumentation-ioredis): no assert.match in node 10
Apr 25, 2021
e7db198
docs(instrumentation-ioredis): add request hook signuature to README
Apr 26, 2021
5fbfa93
docs(instrumentation-ioredis): lighter hook params documentation
Apr 26, 2021
0435644
docs(instrumentation-ioredis): add request hook example
Apr 26, 2021
ea1d7b9
docs(instrumentation-ioredis): improve request hook example
Apr 26, 2021
acd1789
Update plugins/node/opentelemetry-instrumentation-ioredis/src/types.ts
blumamir Apr 26, 2021
1dde769
Merge remote-tracking branch 'upstream/main' into ioredis-module-vers…
Apr 26, 2021
14ca036
docs(instrumentation-ioredis): double to single quotes
Apr 26, 2021
4d0a1be
fix(instrumentation-ioredis): update changed interface name everywhere
Apr 26, 2021
a509313
Merge remote-tracking branch 'upstream/main' into ioredis-module-vers…
Apr 26, 2021
2924b56
docs(instrumentation-ioredis): revert change of badge
Apr 26, 2021
b89242e
Merge branch 'main' of https://github.com/open-telemetry/opentelemetr…
Apr 26, 2021
ec1e3d1
Merge branch 'main' of https://github.com/open-telemetry/opentelemetr…
Apr 27, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
docs(instrumentation-ioredis): add request hook example
  • Loading branch information
Amir Blum committed Apr 26, 2021
commit 04356440906250d0ff7363b708337463d1c9a0c6
53 changes: 38 additions & 15 deletions plugins/node/opentelemetry-instrumentation-ioredis/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

[![NPM Published Version][npm-img]][npm-url]
[![dependencies][dependencies-image]][dependencies-url]
[![devDependencies][devDependencies-image]][devDependencies-url]
[![devDependencies][devdependencies-image]][devdependencies-url]
[![Apache License][license-image]][license-image]

This module provides automatic instrumentation for [`ioredis`](https://github.com/luin/ioredis).
Expand All @@ -25,9 +25,11 @@ npm install --save @opentelemetry/instrumentation-ioredis
To load a specific instrumentation (**ioredis** in this case), specify it in the registerInstrumentations's configuration

```javascript
const { NodeTracerProvider } = require('@opentelemetry/node');
const { IORedisInstrumentation } = require('@opentelemetry/instrumentation-ioredis');
const { registerInstrumentations } = require('@opentelemetry/instrumentation');
const { NodeTracerProvider } = require("@opentelemetry/node");
const {
IORedisInstrumentation,
} = require("@opentelemetry/instrumentation-ioredis");
const { registerInstrumentations } = require("@opentelemetry/instrumentation");

const provider = new NodeTracerProvider();
provider.register();
Expand All @@ -36,22 +38,22 @@ registerInstrumentations({
instrumentations: [
new IORedisInstrumentation({
// see under for available configuration
})
}),
],
tracerProvider: provider,
})
});
```

### 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 |
| 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(',')}`.
Expand All @@ -60,12 +62,33 @@ It is also possible to define a custom serialization function. The function will
Here is a simple example to serialize the command name skipping arguments:

```javascript
const { IORedisInstrumentation } = require('@opentelemetry/instrumentation-ioredis');
const {
IORedisInstrumentation,
} = require("@opentelemetry/instrumentation-ioredis");

const ioredisInstrumentation = new IORedisInstrumentation({
dbStatementSerializer: function (cmdName, cmdArgs) {
return cmdName;
}
},
});
```

#### Using `requestHook`

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 and attribute of `ioredis` instrumented version:

```javascript
const { IORedisInstrumentation } = require('@opentelemetry/instrumentation-ioredis');

const ioredisInstrumentation = new IORedisInstrumentation({
requestHook: function(
span: Span,
requestInfo: IoRedisRequestHookInformation
) {
span.setAttribute('instrumented_library.version', requestInfo.moduleVersion)
})
});

```
Expand All @@ -86,6 +109,6 @@ Apache 2.0 - See [LICENSE][license-url] for more information.
[dependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js-contrib.svg?path=plugins%2Fnode%2Fopentelemetry-instrumentation-ioredis
[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js-contrib?path=plugins%2Fnode%2Fopentelemetry-instrumentation-ioredis
[devdependencies-image]: https://status.david-dm.org/gh/open-telemetry/opentelemetry-js-contrib.svg?path=plugins%2Fnode%2Fopentelemetry-instrumentation-ioredis&type=dev
[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js-contrib?path=plugins%2Fnode%2Fopentelemetry-instrumentation-ioredis&type=dev
[devdependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js-contrib?path=plugins%2Fnode%2Fopentelemetry-instrumentation-ioredis&type=dev
[npm-url]: https://www.npmjs.com/package/@opentelemetry/instrumentation-ioredis
[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Finstrumentation-ioredis.svg