Skip to content

Instantly share code, notes, and snippets.

@rumart
Last active July 29, 2025 13:28
Show Gist options
  • Select an option

  • Save rumart/7ba416ac88fda917e5749cf90a53be63 to your computer and use it in GitHub Desktop.

Select an option

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/
/*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