Skip to content

Commit db14633

Browse files
authored
feat(sdk-trace-base): add spanProcessors property in TracerConfig interface (open-telemetry#5138)
1 parent f1ef596 commit db14633

File tree

38 files changed

+529
-727
lines changed

38 files changed

+529
-727
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ For semantic convention package changes, see the [semconv CHANGELOG](packages/se
1717
* default: `true` (no change in behavior)
1818
* note: `false` will become the default behavior in the next major version in order to comply with [specification requirements](https://github.com/open-telemetry/opentelemetry-specification/blob/f3511a5ccda376dfd1de76dfa086fc9b35b54757/specification/resource/sdk.md?plain=1#L31-L36)
1919

20+
* feat(sdk-trace-base): add `spanProcessors` property in `TracerConfig` interface. [#5138](https://github.com/open-telemetry/opentelemetry-js/pull/5138) @david-luna
21+
2022
### :bug: (Bug Fix)
2123

2224
* fix(sdk-metrics): await exports in `PeriodicExportingMetricReader` when async resource attributes have not yet settled [#5119](https://github.com/open-telemetry/opentelemetry-js/pull/5119/) @pichlermarc

api/README.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,9 @@ const { trace } = require("@opentelemetry/api");
4545
const { BasicTracerProvider, ConsoleSpanExporter, SimpleSpanProcessor } = require("@opentelemetry/sdk-trace-base");
4646

4747
// Create and register an SDK
48-
const provider = new BasicTracerProvider();
49-
provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
48+
const provider = new BasicTracerProvider({
49+
spanProcessors: [new SimpleSpanProcessor(new ConsoleSpanExporter())]
50+
});
5051
trace.setGlobalTracerProvider(provider);
5152

5253
// Acquire a tracer from the global tracer provider which will be used to trace the application

examples/basic-tracer-node/index.js

+8-7
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,20 @@ const { SEMRESATTRS_SERVICE_NAME } = require('@opentelemetry/semantic-convention
66
const { BasicTracerProvider, ConsoleSpanExporter, SimpleSpanProcessor } = require('@opentelemetry/sdk-trace-base');
77
const { JaegerExporter } = require('@opentelemetry/exporter-jaeger');
88

9+
// Configure span processor to send spans to the exporter
10+
const exporter = new JaegerExporter({
11+
endpoint: 'http://localhost:14268/api/traces',
12+
});
913
const provider = new BasicTracerProvider({
1014
resource: new Resource({
1115
[SEMRESATTRS_SERVICE_NAME]: 'basic-service',
1216
}),
17+
spanProcessors: [
18+
new SimpleSpanProcessor(exporter),
19+
new SimpleSpanProcessor(new ConsoleSpanExporter()),
20+
]
1321
});
1422

15-
// Configure span processor to send spans to the exporter
16-
const exporter = new JaegerExporter({
17-
endpoint: 'http://localhost:14268/api/traces',
18-
});
19-
provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
20-
provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
21-
2223
/**
2324
* Initialize the OpenTelemetry APIs to use the BasicTracerProvider bindings.
2425
*

examples/grpc-js/tracer.js

+3-9
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,15 @@ const { GrpcInstrumentation } = require('@opentelemetry/instrumentation-grpc');
1313
const EXPORTER = process.env.EXPORTER || '';
1414

1515
module.exports = (serviceName) => {
16+
const useZipkin = EXPORTER.toLowerCase().startsWith('z');
17+
const exporter = useZipkin ? new ZipkinExporter() : new JaegerExporter();
1618
const provider = new NodeTracerProvider({
1719
resource: new Resource({
1820
[SEMRESATTRS_SERVICE_NAME]: serviceName,
1921
}),
22+
spanProcessors: [new SimpleSpanProcessor(exporter)]
2023
});
2124

22-
let exporter;
23-
if (EXPORTER.toLowerCase().startsWith('z')) {
24-
exporter = new ZipkinExporter();
25-
} else {
26-
exporter = new JaegerExporter();
27-
}
28-
29-
provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
30-
3125
// Initialize the OpenTelemetry APIs to use the NodeTracerProvider bindings
3226
provider.register();
3327

examples/http/tracer.js

+4-10
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,15 @@ const { HttpInstrumentation } = require('@opentelemetry/instrumentation-http');
1313
const EXPORTER = process.env.EXPORTER || '';
1414

1515
module.exports = (serviceName) => {
16+
const useZipkin = EXPORTER.toLowerCase().startsWith('z');
17+
const exporter = useZipkin ? new ZipkinExporter() : new JaegerExporter();
1618
const provider = new NodeTracerProvider({
1719
resource: new Resource({
1820
[SEMRESATTRS_SERVICE_NAME]: serviceName,
1921
}),
22+
spanProcessors: [new SimpleSpanProcessor(exporter)]
2023
});
21-
22-
let exporter;
23-
if (EXPORTER.toLowerCase().startsWith('z')) {
24-
exporter = new ZipkinExporter();
25-
} else {
26-
exporter = new JaegerExporter();
27-
}
28-
29-
provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
30-
24+
3125
// Initialize the OpenTelemetry APIs to use the NodeTracerProvider bindings
3226
provider.register();
3327

examples/https/tracer.js

+3-10
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,14 @@ const EXPORTER = process.env.EXPORTER || '';
1414
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
1515

1616
module.exports = (serviceName) => {
17-
let exporter;
17+
const useZipkin = EXPORTER.toLowerCase().startsWith('z');
18+
const exporter = useZipkin ? new ZipkinExporter() : new JaegerExporter();
1819
const provider = new NodeTracerProvider({
1920
resource: new Resource({
2021
[SEMRESATTRS_SERVICE_NAME]: serviceName,
2122
}),
23+
spanProcessors: [new SimpleSpanProcessor(exporter)]
2224
});
23-
24-
if (EXPORTER.toLowerCase().startsWith('z')) {
25-
exporter = new ZipkinExporter();
26-
} else {
27-
exporter = new JaegerExporter();
28-
}
29-
30-
provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
31-
3225
// Initialize the OpenTelemetry APIs to use the NodeTracerProvider bindings
3326
provider.register();
3427

examples/opentelemetry-web/examples/fetch-proto/index.js

+8-9
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,16 @@ const { SEMRESATTRS_SERVICE_NAME } = require("@opentelemetry/semantic-convention
1212
const provider = new WebTracerProvider({
1313
resource: new Resource({
1414
[SEMRESATTRS_SERVICE_NAME]: 'fetch-proto-web-service'
15-
})
15+
}),
16+
// Note: For production consider using the "BatchSpanProcessor" to reduce the number of requests
17+
// to your exporter. Using the SimpleSpanProcessor here as it sends the spans immediately to the
18+
// exporter without delay
19+
spanProcessors: [
20+
new SimpleSpanProcessor(new ConsoleSpanExporter()),
21+
new SimpleSpanProcessor(new OTLPTraceExporterProto()),
22+
]
1623
});
1724

18-
// Note: For production consider using the "BatchSpanProcessor" to reduce the number of requests
19-
// to your exporter. Using the SimpleSpanProcessor here as it sends the spans immediately to the
20-
// exporter without delay
21-
provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
22-
provider.addSpanProcessor(
23-
new SimpleSpanProcessor(new OTLPTraceExporterProto())
24-
);
25-
2625
provider.register({
2726
contextManager: new ZoneContextManager(),
2827
propagator: new B3Propagator(),

examples/opentelemetry-web/examples/fetch/index.js

+8-6
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,16 @@ const { SEMRESATTRS_SERVICE_NAME } = require('@opentelemetry/semantic-convention
1212
const provider = new WebTracerProvider({
1313
resource: new Resource({
1414
[SEMRESATTRS_SERVICE_NAME]: 'fetch-web-service'
15-
})
15+
}),
16+
// Note: For production consider using the "BatchSpanProcessor" to reduce the number of requests
17+
// to your exporter. Using the SimpleSpanProcessor here as it sends the spans immediately to the
18+
// exporter without delay
19+
spanProcessors:[
20+
new SimpleSpanProcessor(new ConsoleSpanExporter()),
21+
new SimpleSpanProcessor(new OTLPTraceExporter()),
22+
]
1623
});
1724

18-
// Note: For production consider using the "BatchSpanProcessor" to reduce the number of requests
19-
// to your exporter. Using the SimpleSpanProcessor here as it sends the spans immediately to the
20-
// exporter without delay
21-
provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
22-
provider.addSpanProcessor(new SimpleSpanProcessor(new OTLPTraceExporter()));
2325
provider.register({
2426
contextManager: new ZoneContextManager(),
2527
propagator: new B3Propagator(),

examples/opentelemetry-web/examples/fetchXhr/index.js

+8-6
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,16 @@ const { SEMRESATTRS_SERVICE_NAME } = require('@opentelemetry/semantic-convention
1212
const provider = new WebTracerProvider({
1313
resource: new Resource({
1414
[SEMRESATTRS_SERVICE_NAME]: 'fetch-xhr-web-service'
15-
})
15+
}),
16+
// Note: For production consider using the "BatchSpanProcessor" to reduce the number of requests
17+
// to your exporter. Using the SimpleSpanProcessor here as it sends the spans immediately to the
18+
// exporter without delay
19+
spanProcessors: [
20+
new SimpleSpanProcessor(new ConsoleSpanExporter()),
21+
new SimpleSpanProcessor(new OTLPTraceExporter()),
22+
]
1623
});
1724

18-
// Note: For production consider using the "BatchSpanProcessor" to reduce the number of requests
19-
// to your exporter. Using the SimpleSpanProcessor here as it sends the spans immediately to the
20-
// exporter without delay
21-
provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
22-
provider.addSpanProcessor(new SimpleSpanProcessor(new OTLPTraceExporter()));
2325
provider.register({
2426
contextManager: new ZoneContextManager(),
2527
});

examples/opentelemetry-web/examples/fetchXhrB3/index.js

+8-6
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,16 @@ const { SEMRESATTRS_SERVICE_NAME } = require('@opentelemetry/semantic-convention
1313
const provider = new WebTracerProvider({
1414
resource: new Resource({
1515
[SEMRESATTRS_SERVICE_NAME]: 'fetch-xhr-b3-web-service'
16-
})
16+
}),
17+
// Note: For production consider using the "BatchSpanProcessor" to reduce the number of requests
18+
// to your exporter. Using the SimpleSpanProcessor here as it sends the spans immediately to the
19+
// exporter without delay
20+
spanProcessors: [
21+
new SimpleSpanProcessor(new ConsoleSpanExporter()),
22+
new SimpleSpanProcessor(new OTLPTraceExporter()),
23+
]
1724
});
1825

19-
// Note: For production consider using the "BatchSpanProcessor" to reduce the number of requests
20-
// to your exporter. Using the SimpleSpanProcessor here as it sends the spans immediately to the
21-
// exporter without delay
22-
provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
23-
provider.addSpanProcessor(new SimpleSpanProcessor(new OTLPTraceExporter()));
2426
provider.register({
2527
contextManager: new ZoneContextManager(),
2628
propagator: new B3Propagator(),

examples/opentelemetry-web/examples/xml-http-request/index.js

+8-7
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,16 @@ const { SEMRESATTRS_SERVICE_NAME } = require('@opentelemetry/semantic-convention
1212
const providerWithZone = new WebTracerProvider({
1313
resource: new Resource({
1414
[SEMRESATTRS_SERVICE_NAME]: 'xml-http-web-service'
15-
})
15+
}),
16+
// Note: For production consider using the "BatchSpanProcessor" to reduce the number of requests
17+
// to your exporter. Using the SimpleSpanProcessor here as it sends the spans immediately to the
18+
// exporter without delay
19+
spanProcessors: [
20+
new SimpleSpanProcessor(new ConsoleSpanExporter()),
21+
new SimpleSpanProcessor(new OTLPTraceExporter()),
22+
]
1623
});
1724

18-
// Note: For production consider using the "BatchSpanProcessor" to reduce the number of requests
19-
// to your exporter. Using the SimpleSpanProcessor here as it sends the spans immediately to the
20-
// exporter without delay
21-
providerWithZone.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
22-
providerWithZone.addSpanProcessor(new SimpleSpanProcessor(new OTLPTraceExporter()));
23-
2425
providerWithZone.register({
2526
contextManager: new ZoneContextManager(),
2627
propagator: new B3Propagator(),

examples/opentelemetry-web/examples/zipkin/index.js

+15-11
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,23 @@ const { SEMRESATTRS_SERVICE_NAME } = require('@opentelemetry/semantic-convention
77
const provider = new WebTracerProvider({
88
resource: new Resource({
99
[SEMRESATTRS_SERVICE_NAME]: 'zipkin-web-service'
10-
})
10+
}),
11+
// Note: For production consider using the "BatchSpanProcessor" to reduce the number of requests
12+
// to your exporter. Using the SimpleSpanProcessor here as it sends the spans immediately to the
13+
// exporter without delay
14+
spanProcessors: [
15+
new SimpleSpanProcessor(new ConsoleSpanExporter()),
16+
new SimpleSpanProcessor(new ZipkinExporter({
17+
// testing interceptor
18+
// getExportRequestHeaders: () => {
19+
// return {
20+
// foo: 'bar',
21+
// }
22+
// }
23+
})),
24+
]
1125
});
1226

13-
provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
14-
provider.addSpanProcessor(new SimpleSpanProcessor(new ZipkinExporter({
15-
// testing interceptor
16-
// getExportRequestHeaders: ()=> {
17-
// return {
18-
// foo: 'bar',
19-
// }
20-
// }
21-
})));
22-
2327
provider.register();
2428

2529
const tracer = provider.getTracer('example-tracer-web');

examples/opentracing-shim/shim.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ const { TracerShim } = require('@opentelemetry/shim-opentracing');
1111
function shim(serviceName) {
1212
const provider = new NodeTracerProvider({
1313
resource: new Resource({ [SEMRESATTRS_SERVICE_NAME]: serviceName }),
14+
spanProcessors: [new SimpleSpanProcessor(getExporter(serviceName))],
1415
});
1516

16-
provider.addSpanProcessor(new SimpleSpanProcessor(getExporter(serviceName)));
1717
// Initialize the OpenTelemetry APIs to use the NodeTracerProvider bindings
1818
provider.register();
1919

examples/otlp-exporter-node/tracing.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@ const provider = new BasicTracerProvider({
2626
resource: new Resource({
2727
[SEMRESATTRS_SERVICE_NAME]: 'basic-service',
2828
}),
29+
spanProcessors: [
30+
new SimpleSpanProcessor(exporter),
31+
new SimpleSpanProcessor(new ConsoleSpanExporter()),
32+
]
2933
});
30-
provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
31-
provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
3234
provider.register();
3335

3436
const tracer = trace.getTracer('example-otlp-exporter-node');

experimental/examples/opencensus-shim/setup.js

+8-6
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,14 @@ module.exports = function setup(serviceName) {
4848
const resource = new Resource({
4949
[SEMRESATTRS_SERVICE_NAME]: serviceName,
5050
});
51-
const tracerProvider = new NodeTracerProvider({ resource });
52-
tracerProvider.addSpanProcessor(
53-
new BatchSpanProcessor(new OTLPTraceExporter(), {
54-
scheduledDelayMillis: 5000,
55-
})
56-
);
51+
const tracerProvider = new NodeTracerProvider({
52+
resource,
53+
spanProcessors: [
54+
new BatchSpanProcessor(new OTLPTraceExporter(), {
55+
scheduledDelayMillis: 5000,
56+
})
57+
]
58+
});
5759
tracerProvider.register();
5860

5961
const meterProvider = new MeterProvider({ resource });

experimental/packages/exporter-trace-otlp-grpc/README.md

+9-6
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,10 @@ const collectorOptions = {
3333
url: 'http://<collector-hostname>:<port>',
3434
};
3535

36-
const provider = new BasicTracerProvider();
3736
const exporter = new OTLPTraceExporter(collectorOptions);
38-
provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
37+
const provider = new BasicTracerProvider({
38+
spanProcessors: [new SimpleSpanProcessor(exporter)]
39+
});
3940

4041
provider.register();
4142
['SIGINT', 'SIGTERM'].forEach(signal => {
@@ -59,9 +60,10 @@ const collectorOptions = {
5960
credentials: grpc.credentials.createSsl(),
6061
};
6162

62-
const provider = new BasicTracerProvider();
6363
const exporter = new OTLPTraceExporter(collectorOptions);
64-
provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
64+
const provider = new BasicTracerProvider({
65+
spanProcessors: [new SimpleSpanProcessor(exporter)]
66+
});
6567

6668
provider.register();
6769
['SIGINT', 'SIGTERM'].forEach(signal => {
@@ -100,9 +102,10 @@ const collectorOptions = {
100102
metadata, // // an optional grpc.Metadata object to be sent with each request
101103
};
102104

103-
const provider = new BasicTracerProvider();
104105
const exporter = new OTLPTraceExporter(collectorOptions);
105-
provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
106+
const provider = new BasicTracerProvider({
107+
spanProcessors: [new SimpleSpanProcessor(exporter)]
108+
});
106109

107110
provider.register();
108111
['SIGINT', 'SIGTERM'].forEach(signal => {

0 commit comments

Comments
 (0)