-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathtracing.js
94 lines (77 loc) · 2.77 KB
/
tracing.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
const {
SentrySpanProcessor,
SentryPropagator
} = require("@sentry/opentelemetry-node");
const { node } = require("@opentelemetry/sdk-node");
const { NodeTracerProvider } = node;
const opentelemetry = require("@opentelemetry/api");
const { registerInstrumentations } = require("@opentelemetry/instrumentation");
const {
getNodeAutoInstrumentations
} = require("@opentelemetry/auto-instrumentations-node");
const {
ConsoleSpanExporter,
BatchSpanProcessor,
SimpleSpanProcessor
} = require("@opentelemetry/sdk-trace-base");
const { Resource } = require("@opentelemetry/resources");
const {
SemanticResourceAttributes
} = require("@opentelemetry/semantic-conventions");
const { JaegerExporter } = require("@opentelemetry/exporter-jaeger");
const jaegerExporter = new JaegerExporter();
const process = require("process");
const sdks = [];
module.exports = (serviceName) => {
if (sdks[serviceName]) return sdks[serviceName];
const provider = new NodeTracerProvider({
resource: new Resource({
[SemanticResourceAttributes.SERVICE_NAME]: serviceName
})
});
provider.addSpanProcessor(new SimpleSpanProcessor(jaegerExporter));
provider.addSpanProcessor(new SentrySpanProcessor());
provider.register();
registerInstrumentations({
instrumentations: getNodeAutoInstrumentations({
"@opentelemetry/instrumentation-fs": {
enabled: false
}
})
});
return opentelemetry.trace.getTracer(serviceName);
// configure the SDK to export telemetry data to the console
// enable all auto-instrumentations from the meta package
// const traceExporter = new ConsoleSpanExporter();
/*
const sdk = sdks[serviceName] = new opentelemetry.NodeSDK({
resource: new Resource({
[SemanticResourceAttributes.SERVICE_NAME]: serviceName,
}),
//traceExporter,
spanProcessor: new SimpleSpanProcessor(jaegerExporter),
// spanProcessor: new SentrySpanProcessor(),
instrumentations: [
getNodeAutoInstrumentations({
"@opentelemetry/instrumentation-fs": {
enabled: false,
},
}),
],
});
otelApi.propagation.setGlobalPropagator(new SentryPropagator());
// initialize the SDK and register with the OpenTelemetry API
// this enables the API to record telemetry
sdk.start()
.then(() => console.log(`Tracing initialized for service [${serviceName}]`))
.catch((error) => console.log(`Error initializing tracing for service [${serviceName}]`, error));
// gracefully shut down the SDK on process exit
process.on('SIGTERM', () => {
sdk.shutdown()
.then(() => console.log(`Tracing for service [${serviceName}] terminated`))
.catch((error) => console.log(`Error terminating tracing for service [${serviceName}]`, error))
.finally(() => process.exit(0));
});
return sdk;
*/
};