UNPKG

traceapm

Version:

SDK for OpenTelemetry auto-instrumentation and OTLP export for Node.js apps.

49 lines (40 loc) 1.91 kB
const { NodeSDK } = require('@opentelemetry/sdk-node'); const { diag, DiagConsoleLogger, DiagLogLevel } = require('@opentelemetry/api'); const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http'); const { OTLPMetricExporter } = require('@opentelemetry/exporter-metrics-otlp-http'); const { SequelizeInstrumentation } = require('opentelemetry-instrumentation-sequelize'); const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node'); const { PeriodicExportingMetricReader } = require('@opentelemetry/sdk-metrics'); const { Resource } = require('@opentelemetry/resources'); const { SemanticResourceAttributes } = require('@opentelemetry/semantic-conventions'); function init(options = {}) { const endpoint = options.endpoint || 'http://localhost:4318'; const serviceName = options.serviceName || process.env.OTEL_SERVICE_NAME || 'default'; if (!options.endpoint) { console.warn('[traceapm] Warning: No collector endpoint provided. Using default.'); } if (!options.serviceName && !process.env.OTEL_SERVICE_NAME) { console.warn('[traceapm] Warning: No service name provided. Using default.'); } diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.ERROR); const traceExporter = new OTLPTraceExporter({ url: endpoint + '/v1/traces', }); const metricExporter = new OTLPMetricExporter({ url: endpoint + '/v1/metrics', }); const sequelizeInstrumentation = new SequelizeInstrumentation({ enhancedDatabaseReporting: true, }); const sdk = new NodeSDK({ traceExporter, metricReader: new PeriodicExportingMetricReader({ exporter: metricExporter }), instrumentations: [getNodeAutoInstrumentations(), sequelizeInstrumentation], resource: new Resource({ [SemanticResourceAttributes.SERVICE_NAME]: serviceName, ...options.attributes, }), }); sdk.start(); } module.exports = { init };