Files
mats 5757156843
Build and Publish / Metadata (push) Successful in 1s
Build and Publish / BuildAndDeployAmd64 (push) Successful in 18s
feat: migrate voice app, add otel/rum, dockerfile, k8s deployment with ingress
2026-09-22 09:43:47 +02:00

72 lines
2.4 KiB
JavaScript

// OpenTelemetry tracing and logging initialization for gibbz backend
'use strict';
const process = require('process');
const { NodeSDK } = require('@opentelemetry/sdk-node');
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');
const { OTLPLogExporter } = require('@opentelemetry/exporter-logs-otlp-http');
const { BatchLogRecordProcessor } = require('@opentelemetry/sdk-logs');
const { resourceFromAttributes } = require('@opentelemetry/resources');
const { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } = require('@opentelemetry/semantic-conventions');
const serviceName = process.env.OTEL_SERVICE_NAME || 'gibbz';
const serviceRelease = process.env.SERVICE_RELEASE || process.env.OTEL_SERVICE_RELEASE || process.env.APP_RELEASE || 'dev';
const environment = process.env.ENVIRONMENT || process.env.NODE_ENV || 'production';
const otelUrl = (process.env.OTEL_EXPORTER_OTLP_ENDPOINT || process.env.OTEL_URL || 'https://otel.k6n.net').replace(/\/+$/, '');
const ingestKey = process.env.OTEL_INGEST_KEY || '';
const headers = {};
if (ingestKey) {
headers['X-Otel-Ingest-Key'] = ingestKey;
}
const resource = resourceFromAttributes({
[ATTR_SERVICE_NAME]: serviceName,
[ATTR_SERVICE_VERSION]: serviceRelease,
'service.name': serviceName,
'service.release': serviceRelease,
'service.environment': environment,
});
// Configure trace exporter
const traceExporter = new OTLPTraceExporter({
url: `${otelUrl}/v1/traces`,
headers,
});
// Configure logs exporter
const logExporter = new OTLPLogExporter({
url: `${otelUrl}/v1/logs`,
headers,
});
const logRecordProcessor = new BatchLogRecordProcessor(logExporter);
const sdk = new NodeSDK({
resource,
traceExporter,
logRecordProcessor,
instrumentations: [
getNodeAutoInstrumentations({
'@opentelemetry/instrumentation-fs': { enabled: false },
}),
],
});
try {
sdk.start();
console.log(`[otel] Initialized OpenTelemetry for ${serviceName} (release: ${serviceRelease}, env: ${environment}) -> ${otelUrl}`);
} catch (err) {
console.error('[otel] Failed to start OpenTelemetry SDK:', err);
}
process.on('SIGTERM', () => {
sdk.shutdown()
.then(() => console.log('[otel] SDK shut down successfully'))
.catch((err) => console.error('[otel] Error shutting down SDK', err))
.finally(() => process.exit(0));
});
module.exports = { sdk };