@@ -22,62 +22,61 @@ 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 ({
32
+ detectors : [browserDetector],
33
+ });
34
+ resource = resource . merge (detectedResources );
35
+
36
+ const provider = new WebTracerProvider ( {
37
+ resource ,
38
+ spanProcessors : [
39
+ new SessionIdProcessor (),
40
+ new BatchSpanProcessor (
41
+ new OTLPTraceExporter ({
42
+ url :
43
+ NEXT_PUBLIC_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT ||
44
+ ' http://localhost:4318/v1/traces ' ,
45
+ }),
46
+ {
47
+ scheduledDelayMillis : 500 ,
48
+ } ,
49
+ ) ,
50
+ ] ,
51
+ });
52
+
53
+ const contextManager = new ZoneContextManager ();
54
+
55
+ provider . register ({
56
+ contextManager,
57
+ propagator : new CompositePropagator ({
58
+ propagators : [
59
+ new W3CBaggagePropagator (),
60
+ new W3CTraceContextPropagator () ,
61
+ ] ,
62
62
}),
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
- });
63
+ });
79
64
80
- sdk .start ();
65
+ registerInstrumentations ({
66
+ tracerProvider: provider,
67
+ instrumentations: [
68
+ getWebAutoInstrumentations ({
69
+ ' @opentelemetry/instrumentation-fetch' : {
70
+ propagateTraceHeaderCorsUrls: / . * / ,
71
+ clearTimingResources: true ,
72
+ applyCustomAttributesOnSpan (span ) {
73
+ span .setAttribute (' app.synthetic_request' , IS_SYNTHETIC_REQUEST );
74
+ },
75
+ },
76
+ }),
77
+ ],
78
+ });
79
+ };
81
80
```
82
81
83
82
Node required modules are loaded using the ` --require ` command line argument.
0 commit comments