|
1 |
| -import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node'; |
| 1 | +import { getNodeAutoInstrumentations, getResourceDetectorsFromEnv } from '@opentelemetry/auto-instrumentations-node'; |
2 | 2 | import { OTLPTraceExporter as OTLPProtoTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';
|
3 | 3 | import { OTLPTraceExporter as OTLPHttpTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
4 | 4 | import { OTLPTraceExporter as OTLPGrpcTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc';
|
5 | 5 | import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-grpc';
|
6 | 6 | import { PrometheusExporter } from '@opentelemetry/exporter-prometheus';
|
7 | 7 | 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 | +); |
14 | 16 |
|
15 |
| -import { NodeSDK } from '@opentelemetry/sdk-node'; |
16 | 17 |
|
17 | 18 | function getTraceExporter() {
|
18 | 19 | let protocol = process.env.OTEL_EXPORTER_OTLP_PROTOCOL;
|
@@ -52,26 +53,32 @@ function getMetricReader() {
|
52 | 53 |
|
53 | 54 | const sdk = new NodeSDK({
|
54 | 55 | autoDetectResources: true,
|
55 |
| - instrumentations: [getNodeAutoInstrumentations()], |
| 56 | + instrumentations: getNodeAutoInstrumentations(), |
56 | 57 | traceExporter: getTraceExporter(),
|
57 | 58 | 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() |
75 | 60 | });
|
76 | 61 |
|
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