@@ -22,62 +22,56 @@ initialize the SDK and auto-instrumentation based on standard
22
22
for OTLP export, resource attributes, and service name.
23
23
24
24
``` javascript
25
- const opentelemetry = require (' @opentelemetry/sdk-node' );
26
- const {
27
- getNodeAutoInstrumentations ,
28
- } = require (' @opentelemetry/auto-instrumentations-node' );
29
- const {
30
- OTLPTraceExporter ,
31
- } = require (' @opentelemetry/exporter-trace-otlp-grpc' );
32
- const {
33
- OTLPMetricExporter ,
34
- } = require (' @opentelemetry/exporter-metrics-otlp-grpc' );
35
- const { PeriodicExportingMetricReader } = require (' @opentelemetry/sdk-metrics' );
36
- const {
37
- alibabaCloudEcsDetector ,
38
- } = require (' @opentelemetry/resource-detector-alibaba-cloud' );
39
- const {
40
- awsEc2Detector ,
41
- awsEksDetector ,
42
- } = require (' @opentelemetry/resource-detector-aws' );
43
- const {
44
- containerDetector ,
45
- } = require (' @opentelemetry/resource-detector-container' );
46
- const { gcpDetector } = require (' @opentelemetry/resource-detector-gcp' );
47
- const {
48
- envDetector ,
49
- hostDetector ,
50
- osDetector ,
51
- processDetector ,
52
- } = require (' @opentelemetry/resources' );
53
-
54
- const sdk = new opentelemetry.NodeSDK ({
55
- traceExporter: new OTLPTraceExporter (),
56
- instrumentations: [
57
- getNodeAutoInstrumentations ({
58
- // only instrument fs if it is part of another trace
59
- ' @opentelemetry/instrumentation-fs' : {
60
- requireParentSpan: true ,
61
- },
25
+ const FrontendTracer = async () => {
26
+ const { ZoneContextManager } = await import (' @opentelemetry/context-zone' );
27
+
28
+ let resource = new Resource ({
29
+ [SEMRESATTRS_SERVICE_NAME ]: NEXT_PUBLIC_OTEL_SERVICE_NAME ,
30
+ });
31
+ const detectedResources = detectResourcesSync ({ detectors: [browserDetector] });
32
+ resource = resource .merge (detectedResources);
33
+
34
+ const provider = new WebTracerProvider ({
35
+ resource,
36
+ spanProcessors: [
37
+ new SessionIdProcessor (),
38
+ new BatchSpanProcessor (
39
+ new OTLPTraceExporter ({
40
+ url: NEXT_PUBLIC_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT || ' http://localhost:4318/v1/traces' ,
41
+ }),
42
+ {
43
+ scheduledDelayMillis: 500 ,
44
+ }
45
+ ),
46
+ ],
47
+ });
48
+
49
+ const contextManager = new ZoneContextManager ();
50
+
51
+ provider .register ({
52
+ contextManager,
53
+ propagator: new CompositePropagator ({
54
+ propagators: [
55
+ new W3CBaggagePropagator (),
56
+ new W3CTraceContextPropagator ()],
62
57
}),
63
- ],
64
- metricReader: new PeriodicExportingMetricReader ({
65
- exporter: new OTLPMetricExporter (),
66
- }),
67
- resourceDetectors: [
68
- containerDetector,
69
- envDetector,
70
- hostDetector,
71
- osDetector,
72
- processDetector,
73
- alibabaCloudEcsDetector,
74
- awsEksDetector,
75
- awsEc2Detector,
76
- gcpDetector,
77
- ],
78
- });
58
+ });
79
59
80
- sdk .start ();
60
+ registerInstrumentations ({
61
+ tracerProvider: provider,
62
+ instrumentations: [
63
+ getWebAutoInstrumentations ({
64
+ ' @opentelemetry/instrumentation-fetch' : {
65
+ propagateTraceHeaderCorsUrls: / . * / ,
66
+ clearTimingResources: true ,
67
+ applyCustomAttributesOnSpan (span ) {
68
+ span .setAttribute (' app.synthetic_request' , IS_SYNTHETIC_REQUEST );
69
+ },
70
+ },
71
+ }),
72
+ ],
73
+ });
74
+ };
81
75
```
82
76
83
77
Node required modules are loaded using the ` --require ` command line argument.
0 commit comments