Last active
July 29, 2025 13:28
-
-
Save rumart/7ba416ac88fda917e5749cf90a53be63 to your computer and use it in GitHub Desktop.
OTel instrumentation.js file used in the blog post https://rudimartinsen.com/2025/07/27/otel-instrumenting-app/
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /*instrumentation.js*/ | |
| // Require dependencies | |
| const opentelemetry = require('@opentelemetry/api'); | |
| const { NodeSDK } = require('@opentelemetry/sdk-node'); | |
| const { | |
| OTLPTraceExporter, | |
| } = require('@opentelemetry/exporter-trace-otlp-proto'); | |
| const { | |
| getNodeAutoInstrumentations, | |
| } = require('@opentelemetry/auto-instrumentations-node'); | |
| const { | |
| OTLPMetricExporter, | |
| } = require('@opentelemetry/exporter-metrics-otlp-proto'); | |
| const { | |
| PeriodicExportingMetricReader, | |
| } = require('@opentelemetry/sdk-metrics'); | |
| const { resourceFromAttributes } = require('@opentelemetry/resources'); | |
| const { LoggerProvider, BatchLogRecordProcessor } = require('@opentelemetry/sdk-logs'); | |
| const { OTLPLogExporter } = require('@opentelemetry/exporter-logs-otlp-proto'); | |
| const logsAPI = require('@opentelemetry/api-logs'); | |
| const logExporter = new OTLPLogExporter({ | |
| url: process.env.OTLP_LOG_EXPORTER_URL || 'http://localhost:4318/v1/logs', | |
| headers: { | |
| 'Content-Type': 'application/x-protobuf', | |
| }, | |
| }); | |
| // Create a LoggerProvider | |
| const loggerProvider = new LoggerProvider({ | |
| resource: resourceFromAttributes({ | |
| 'service.name': process.env.OTEL_SERVICE_NAME || 'my-app', | |
| 'service.version': process.env.APP_VERSION || '0.1.0', | |
| 'service.namespace': process.env.APP_NAMESPACE || 'my-namespace' | |
| }), | |
| processors: [new BatchLogRecordProcessor(logExporter)], | |
| }); | |
| // Register the provider globally | |
| logsAPI.logs.setGlobalLoggerProvider(loggerProvider); | |
| const sdk = new NodeSDK({ | |
| traceExporter: new OTLPTraceExporter({ | |
| url: process.env.OTLP_TRACE_EXPORTER_URL || 'http://localhost:4318/v1/traces', // Default to localhost if env variable is not set | |
| headers: { | |
| 'Content-Type': 'application/x-protobuf', | |
| }, | |
| }), | |
| metricReader: new PeriodicExportingMetricReader({ | |
| exporter: new OTLPMetricExporter({ | |
| url: process.env.OTLP_METRIC_EXPORTER_URL || 'http://localhost:4318/v1/metrics', // Default to localhost if env variable is not set | |
| headers: { | |
| 'Content-Type': 'application/x-protobuf', | |
| }, | |
| }), | |
| }), | |
| instrumentations: [getNodeAutoInstrumentations()], | |
| }); | |
| console.log('Starting OpenTelemetry SDK...'); | |
| sdk.start(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment