feat: migrate voice app, add otel/rum, dockerfile, k8s deployment with ingress
This commit is contained in:
1 parent
a0d5a9a2c7
commit
5757156843
8170 files changed
+3144
-2086523
No files matched your search
+71
@@ -0,0 +1,71 @@
|
||||
// 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 };
|
||||
Reference in new issue
Block a user