Skip to content

Commit 9cfa92c

Browse files
authored
Use instrumentation loader to load plugins and instrumentations (#1855)
* chore: removing plugin loader from node, updating usage and docs * chore: testing and updating examples * chore: lint * chore: adding comment about usage * chore: adding upgrading guidelines
1 parent 9981763 commit 9cfa92c

File tree

74 files changed

+380
-1249
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+380
-1249
lines changed

.github/ISSUE_TEMPLATE/request_for_instrumentation.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ labels: instrumentation
55
---
66

77
<!--
8-
**NB:** Before opening a plugin support request against this repo, consider whether the plugin should reside in the [contrib repository](https://github.com/open-telemetry/opentelemetry-js-contrib).
8+
**NB:** Before opening an instrumentation support request against this repo, consider whether the instrumentation should reside in the [contrib repository](https://github.com/open-telemetry/opentelemetry-js-contrib).
99
10-
You are welcome to try out the [plugin api](https://github.com/open-telemetry/opentelemetry-js/blob/main/doc/plugin-guide.md) to build your own plugin. If you do try out the plugin api, please let us know if you have any questions/feedback.
10+
You are welcome to try out the [instrumentation api](https://github.com/open-telemetry/opentelemetry-js/blob/main/doc/instrumentation-guide.md) to build your own instrumentation. If you do try out the instrumentation api, please let us know if you have any questions/feedback.
1111
-->
1212

1313
### Is it applicable for Node or Browser or both

README.md

Lines changed: 73 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -135,15 +135,15 @@ Approvers ([@open-telemetry/js-approvers](https://github.com/orgs/open-telemetry
135135
- [Naseem K. Ullah](https://github.com/naseemkullah), Transit
136136
- [Olivier Albertini](https://github.com/OlivierAlbertini), Ville de Montréal
137137

138-
*Find more about the approver role in [community repository](https://github.com/open-telemetry/community/blob/master/community-membership.md#approver).*
138+
*Find more about the approver role in [community repository](https://github.com/open-telemetry/community/blob/main/community-membership.md#approver).*
139139

140140
Maintainers ([@open-telemetry/js-maintainers](https://github.com/orgs/open-telemetry/teams/javascript-maintainers)):
141141

142142
- [Bartlomiej Obecny](https://github.com/obecny), LightStep
143143
- [Daniel Dyla](https://github.com/dyladan), Dynatrace
144144
- [Valentin Marchaud](https://github.com/vmarchaud), Open Source Contributor
145145

146-
*Find more about the maintainer role in [community repository](https://github.com/open-telemetry/community/blob/master/community-membership.md#maintainer).*
146+
*Find more about the maintainer role in [community repository](https://github.com/open-telemetry/community/blob/main/community-membership.md#maintainer).*
147147

148148
### Thanks to all the people who already contributed
149149

@@ -182,18 +182,17 @@ OpenTelemetry is vendor-agnostic and can upload data to any backend with various
182182

183183
See the [OpenTelemetry registry](https://opentelemetry.io/registry/?s=node.js) for a list of exporters available.
184184

185-
### Plugins
185+
### Instrumentations & Plugins
186186

187-
OpenTelemetry can collect tracing data automatically using plugins. Vendors/Users can also create and use their own. Currently, OpenTelemetry supports automatic tracing for:
187+
OpenTelemetry can collect tracing data automatically using instrumentations. Vendors/Users can also create and use their own. Currently, OpenTelemetry supports automatic tracing for:
188188

189-
#### Node Plugins
189+
#### Node Instrumentations & Plugins
190190

191191
##### Core
192192

193-
- [@opentelemetry/plugin-grpc][otel-plugin-grpc]
193+
- [@opentelemetry/instrumentation-grpc][otel-instrumentation-grpc] previous [@opentelemetry/plugin-grpc][otel-plugin-grpc]
194194
- [@opentelemetry/plugin-grpc-js][otel-plugin-grpc-js]
195-
- [@opentelemetry/plugin-http][otel-plugin-http]
196-
- [@opentelemetry/plugin-https][otel-plugin-https]
195+
- [@opentelemetry/instrumentation-http][otel-plugin-http] previous [@opentelemetry/plugin-http][otel-plugin-http] and [@opentelemetry/plugin-https][otel-plugin-https]
197196

198197
##### Contrib
199198

@@ -215,7 +214,7 @@ These plugins are hosted at <https://github.com/open-telemetry/opentelemetry-js-
215214
##### Core
216215

217216
- [@opentelemetry/instrumentation-xml-http-request][otel-instrumentation-xml-http-request]
218-
- [@opentelemetry/plugin-fetch][otel-plugin-fetch]
217+
- [@opentelemetry/instrumentation-fetch][otel-instrumentation-fetch]
219218

220219
##### Contrib
221220

@@ -224,7 +223,7 @@ These plugins are hosted at <https://github.com/open-telemetry/opentelemetry-js-
224223
- [@opentelemetry/plugin-document-load][otel-contrib-plugin-document-load]
225224
- [@opentelemetry/plugin-user-interaction][otel-contrib-plugin-user-interaction]
226225

227-
To request automatic tracing support for a module not on this list, please [file an issue](https://github.com/open-telemetry/opentelemetry-js/issues). Alternatively, you can [write a plugin yourself](https://github.com/open-telemetry/opentelemetry-js/blob/main/doc/plugin-guide.md).
226+
To request automatic tracing support for a module not on this list, please [file an issue](https://github.com/open-telemetry/opentelemetry-js/issues). Alternatively, you can [write an instrumentation yourself](https://github.com/open-telemetry/opentelemetry-js/blob/main/doc/instrumentation-guide.md).
228227

229228
### Shims
230229

@@ -234,6 +233,65 @@ To request automatic tracing support for a module not on this list, please [file
234233

235234
## Upgrade guidelines
236235

236+
### 0.16.0 to 0.17.0
237+
238+
[PR-1855](https://github.com/open-telemetry/opentelemetry-js/pull/1855) Use instrumentation loader to load plugins and instrumentations
239+
240+
- Providers do no load the plugins anymore. Also PluginLoader has been removed from providers, use `registerInstrumentations` instead
241+
242+
```javascript
243+
//Previously in node
244+
const provider = new NodeTracerProvider({
245+
plugins: {
246+
'@grpc/grpc-js': {
247+
enabled: true,
248+
path: '@opentelemetry/plugin-grpc-js',
249+
},
250+
}
251+
});
252+
253+
// Now
254+
const provider = new NodeTracerProvider();
255+
const { registerInstrumentations } = require('@opentelemetry/instrumentation');
256+
registerInstrumentations({
257+
instrumentations: [
258+
{
259+
plugins: {
260+
'@grpc/grpc-js': {
261+
enabled: true,
262+
path: '@opentelemetry/plugin-grpc-js',
263+
},
264+
}
265+
}
266+
],
267+
tracerProvider: provider,
268+
});
269+
270+
// or if you want to load only default instrumentations / plugins
271+
registerInstrumentations({
272+
tracerProvider: provider,
273+
});
274+
275+
//Previously in browser
276+
const provider = new WebTracerProvider({
277+
plugins: [
278+
new DocumentLoad()
279+
]
280+
});
281+
// Now
282+
const { registerInstrumentations } = require('@opentelemetry/instrumentation');
283+
const provider = new WebTracerProvider();
284+
registerInstrumentations({
285+
instrumentations: [
286+
new DocumentLoad(),
287+
],
288+
});
289+
```
290+
291+
- `registerInstrumentations` supports loading old plugins and instrumentations together. It also supports setting tracer provider and meter provider on instrumentations
292+
293+
## Upgrade guidelines
294+
237295
### 0.15.0 to 0.16.0
238296

239297
[PR-1874](https://github.com/open-telemetry/opentelemetry-js/pull/1874) More specific API type names
@@ -290,11 +348,15 @@ Apache 2.0 - See [LICENSE][license-url] for more information.
290348
[otel-metrics]: https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-metrics
291349
[otel-node]: https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-node
292350

293-
[otel-plugin-fetch]: https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-plugin-fetch
294351
[otel-plugin-grpc]: https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-plugin-grpc
295352
[otel-plugin-grpc-js]: https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-plugin-grpc-js
296353
[otel-plugin-http]: https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-plugin-http
297354
[otel-plugin-https]: https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-plugin-https
355+
356+
[otel-instrumentation-fetch]: https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-instrumentation-fetch
357+
[otel-instrumentation-grpc]: https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-instrumentation-grpc
358+
[otel-instrumentation-http]: https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-instrumentation-http
359+
[otel-instrumentation-https]: https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-instrumentation-https
298360
[otel-instrumentation-xml-http-request]: https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-instrumentation-xml-http-request
299361

300362
[otel-shim-opentracing]: https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-shim-opentracing
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# Plugin Developer Guide
1+
# Instrumentation Developer Guide
22

3-
The `NodeTracerProvider` or `Node-SDK` is driven by a set of plugins that describe how to patch a module to generate trace spans when that module is used. We provide out-of-the-box instrumentation for many popular frameworks and libraries by using a plugin system (see [builtin plugins][builtin-plugins]), and provide a means for developers to create their own.
3+
We provide out-of-the-box instrumentations for many popular frameworks and libraries by using an instrumentation system (see [builtin instrumentations][builtin-instrumentations]), and provide a means for developers to create their own.
44

55
We strongly recommended to create a dedicated package for newly added plugin, example: `@opentelemetry/plugin-xxx`.
66

@@ -45,7 +45,7 @@ We recommend using [`shimmer`][shimmer] to modify function properties on objects
4545
Please refer to the [HTTP instrumentation][http-plugin] or [gRPC instrumentation][grpc-plugin] for more comprehensive examples.
4646

4747
[shimmer]: https://github.com/othiym23/shimmer
48-
[builtin-plugins]: https://github.com/open-telemetry/opentelemetry-js#plugins
48+
[builtin-instrumentations]: https://github.com/open-telemetry/opentelemetry-js#instrumentations&plugins
4949
[base-plugin]: https://github.com/open-telemetry/opentelemetry-js/blob/main/packages/opentelemetry-core/src/platform/node/BasePlugin.ts
5050
[http-plugin]: https://github.com/open-telemetry/opentelemetry-js/blob/main/packages/opentelemetry-plugin-http/src/http.ts#L44
5151
[grpc-plugin]: https://github.com/open-telemetry/opentelemetry-js/blob/main/packages/opentelemetry-plugin-grpc/src/grpc.ts#L52

examples/grpc-js/client.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict';
22

33
const api = require('@opentelemetry/api');
4-
const tracer = require('./tracer')('example-grpc-client');
4+
const tracer = require('./tracer')('example-grpc-js-client');
55
// eslint-disable-next-line import/order
66
const grpc = require('@grpc/grpc-js');
77
const messages = require('./helloworld_pb');

examples/grpc-js/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
"@opentelemetry/api": "^0.16.0",
3333
"@opentelemetry/exporter-jaeger": "^0.16.0",
3434
"@opentelemetry/exporter-zipkin": "^0.16.0",
35+
"@opentelemetry/instrumentation": "^0.16.0",
3536
"@opentelemetry/node": "^0.16.0",
3637
"@opentelemetry/plugin-grpc-js": "^0.16.0",
3738
"@opentelemetry/tracing": "^0.16.0",

examples/grpc-js/server.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict';
22

33
const api = require('@opentelemetry/api');
4-
const tracer = require('./tracer')(('example-grpc-server'));
4+
const tracer = require('./tracer')(('example-grpc-js-server'));
55
// eslint-disable-next-line import/order
66
const grpc = require('@grpc/grpc-js');
77

examples/grpc-js/tracer.js

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use strict';
22

33
const opentelemetry = require('@opentelemetry/api');
4+
const { registerInstrumentations } = require('@opentelemetry/instrumentation');
45
const { NodeTracerProvider } = require('@opentelemetry/node');
56
const { SimpleSpanProcessor } = require('@opentelemetry/tracing');
67
const { JaegerExporter } = require('@opentelemetry/exporter-jaeger');
@@ -9,13 +10,26 @@ const { ZipkinExporter } = require('@opentelemetry/exporter-zipkin');
910
const EXPORTER = process.env.EXPORTER || '';
1011

1112
module.exports = (serviceName) => {
12-
const provider = new NodeTracerProvider({
13-
plugins: {
14-
'@grpc/grpc-js': {
15-
enabled: true,
16-
path: '@opentelemetry/plugin-grpc-js',
13+
const provider = new NodeTracerProvider();
14+
registerInstrumentations({
15+
instrumentations: [
16+
{
17+
plugins: {
18+
'@grpc/grpc-js': {
19+
enabled: true,
20+
path: '@opentelemetry/plugin-grpc-js',
21+
// // when boostraping with lerna for testing purposes
22+
// path: `${__dirname}/../../packages/opentelemetry-plugin-grpc-js/build/src`
23+
},
24+
// // when boostraping with lerna for testing purposes
25+
// 'http': {
26+
// enabled: true,
27+
// path: `${__dirname}/../../packages/opentelemetry-plugin-http/build/src`
28+
// },
29+
},
1730
},
18-
},
31+
],
32+
tracerProvider: provider,
1933
});
2034

2135
let exporter;

examples/grpc/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
"@opentelemetry/api": "^0.16.0",
3232
"@opentelemetry/exporter-jaeger": "^0.16.0",
3333
"@opentelemetry/exporter-zipkin": "^0.16.0",
34+
"@opentelemetry/instrumentation": "^0.16.0",
3435
"@opentelemetry/node": "^0.16.0",
3536
"@opentelemetry/plugin-grpc": "^0.16.0",
3637
"@opentelemetry/tracing": "^0.16.0",

examples/grpc/tracer.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use strict';
22

33
const opentelemetry = require('@opentelemetry/api');
4+
const { registerInstrumentations } = require('@opentelemetry/instrumentation');
45
const { NodeTracerProvider } = require('@opentelemetry/node');
56
const { SimpleSpanProcessor } = require('@opentelemetry/tracing');
67
const { JaegerExporter } = require('@opentelemetry/exporter-jaeger');
@@ -10,6 +11,20 @@ const EXPORTER = process.env.EXPORTER || '';
1011

1112
module.exports = (serviceName) => {
1213
const provider = new NodeTracerProvider();
14+
registerInstrumentations({
15+
tracerProvider: provider,
16+
// // when boostraping with lerna for testing purposes
17+
// instrumentations: [
18+
// {
19+
// plugins: {
20+
// grpc: {
21+
// enabled: true,
22+
// path: `${__dirname}/../../packages/opentelemetry-plugin-grpc/build/src`
23+
// }
24+
// }
25+
// }
26+
// ],
27+
});
1328

1429
let exporter;
1530
if (EXPORTER.toLowerCase().startsWith('z')) {

examples/http/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
"@opentelemetry/api": "^0.16.0",
3232
"@opentelemetry/exporter-jaeger": "^0.16.0",
3333
"@opentelemetry/exporter-zipkin": "^0.16.0",
34+
"@opentelemetry/instrumentation": "^0.16.0",
3435
"@opentelemetry/node": "^0.16.0",
3536
"@opentelemetry/plugin-http": "^0.16.0",
3637
"@opentelemetry/tracing": "^0.16.0"

0 commit comments

Comments
 (0)