'use strict'; const { NodeSDK } = require('@opentelemetry/sdk-node'); const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node'); const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-grpc'); const { OTLPMetricExporter } = require('@opentelemetry/exporter-metrics-otlp-grpc'); const { PeriodicExportingMetricReader } = require('@opentelemetry/sdk-metrics'); const otlpEndpoint = process.env.OTEL_EXPORTER_OTLP_ENDPOINT || 'http://otel-collector-opentelemetry-collector.monitoring:4317'; const serviceName = process.env.OTEL_SERVICE_NAME || 'demo-app'; const traceExporter = new OTLPTraceExporter({ url: otlpEndpoint, }); const metricExporter = new OTLPMetricExporter({ url: otlpEndpoint, }); const metricReader = new PeriodicExportingMetricReader({ exporter: metricExporter, exportIntervalMillis: 15000, }); const sdk = new NodeSDK({ serviceName, traceExporter, metricReader, instrumentations: [ getNodeAutoInstrumentations({ '@opentelemetry/instrumentation-fs': { enabled: false }, }), ], }); sdk.start(); process.on('SIGTERM', () => { sdk.shutdown() .then(() => console.log('OpenTelemetry SDK shut down')) .catch((err) => console.error('Error shutting down OpenTelemetry SDK', err)) .finally(() => process.exit(0)); }); console.log(`OpenTelemetry initialized for service "${serviceName}" -> ${otlpEndpoint}`);