Skip to content

Commit cf4ab32

Browse files
committed
update nodejs autoinstrumetation, fix #2626
Signed-off-by: matteo.gazzetta <[email protected]>
1 parent ea0da98 commit cf4ab32

File tree

2 files changed

+37
-30
lines changed

2 files changed

+37
-30
lines changed

autoinstrumentation/nodejs/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
"typescript": "^5.6.3"
1515
},
1616
"dependencies": {
17-
"@opentelemetry/exporter-metrics-otlp-grpc": "0.55.0",
18-
"@opentelemetry/auto-instrumentations-node": "0.53.0",
19-
"@opentelemetry/exporter-prometheus": "0.55.0"
17+
"@opentelemetry/exporter-metrics-otlp-grpc": "0.57.0",
18+
"@opentelemetry/auto-instrumentations-node": "0.55.0",
19+
"@opentelemetry/exporter-prometheus": "0.57.0"
2020
}
2121
}

autoinstrumentation/nodejs/src/autoinstrumentation.ts

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
1-
import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
1+
import { getNodeAutoInstrumentations, getResourceDetectorsFromEnv } from '@opentelemetry/auto-instrumentations-node';
22
import { OTLPTraceExporter as OTLPProtoTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';
33
import { OTLPTraceExporter as OTLPHttpTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
44
import { OTLPTraceExporter as OTLPGrpcTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc';
55
import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-grpc';
66
import { PrometheusExporter } from '@opentelemetry/exporter-prometheus';
77
import { PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';
8-
import { alibabaCloudEcsDetector } from '@opentelemetry/resource-detector-alibaba-cloud';
9-
import { awsEc2Detector, awsEksDetector } from '@opentelemetry/resource-detector-aws';
10-
import { containerDetector } from '@opentelemetry/resource-detector-container';
11-
import { gcpDetector } from '@opentelemetry/resource-detector-gcp';
12-
import { envDetector, hostDetector, osDetector, processDetector } from '@opentelemetry/resources';
13-
import { diag } from '@opentelemetry/api';
8+
import { diag, DiagConsoleLogger } from '@opentelemetry/api';
9+
10+
import { NodeSDK, core } from '@opentelemetry/sdk-node';
11+
12+
diag.setLogger(
13+
new DiagConsoleLogger(),
14+
core.getEnv().OTEL_LOG_LEVEL
15+
);
1416

15-
import { NodeSDK } from '@opentelemetry/sdk-node';
1617

1718
function getTraceExporter() {
1819
let protocol = process.env.OTEL_EXPORTER_OTLP_PROTOCOL;
@@ -52,26 +53,32 @@ function getMetricReader() {
5253

5354
const sdk = new NodeSDK({
5455
autoDetectResources: true,
55-
instrumentations: [getNodeAutoInstrumentations()],
56+
instrumentations: getNodeAutoInstrumentations(),
5657
traceExporter: getTraceExporter(),
5758
metricReader: getMetricReader(),
58-
resourceDetectors:
59-
[
60-
// Standard resource detectors.
61-
containerDetector,
62-
envDetector,
63-
hostDetector,
64-
osDetector,
65-
processDetector,
66-
67-
// Cloud resource detectors.
68-
alibabaCloudEcsDetector,
69-
// Ordered AWS Resource Detectors as per:
70-
// https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/processor/resourcedetectionprocessor/README.md#ordering
71-
awsEksDetector,
72-
awsEc2Detector,
73-
gcpDetector,
74-
],
59+
resourceDetectors: getResourceDetectorsFromEnv()
7560
});
7661

77-
sdk.start();
62+
try {
63+
sdk.start();
64+
diag.info('OpenTelemetry automatic instrumentation started successfully');
65+
} catch (error) {
66+
diag.error(
67+
'Error initializing OpenTelemetry SDK. Your application is not instrumented and will not produce telemetry',
68+
error
69+
);
70+
}
71+
72+
async function shutdown(): Promise<void> {
73+
try {
74+
await sdk.shutdown();
75+
diag.debug('OpenTelemetry SDK terminated');
76+
} catch (error) {
77+
diag.error('Error terminating OpenTelemetry SDK', error);
78+
}
79+
}
80+
81+
// Gracefully shutdown SDK if a SIGTERM is received
82+
process.on('SIGTERM', shutdown);
83+
// Gracefully shutdown SDK if Node.js is exiting normally
84+
process.once('beforeExit', shutdown);

0 commit comments

Comments
 (0)