@apolitical/server
Version:
Node.js module to encapsulate Apolitical's express server setup
35 lines (31 loc) • 1.33 kB
JavaScript
;
const { NodeSDK } = require('@opentelemetry/sdk-node');
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-grpc');
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
const { resourceFromAttributes } = require('@opentelemetry/resources');
const { ATTR_SERVICE_NAME } = require('@opentelemetry/semantic-conventions');
module.exports = ({ logger }) => {
return async function load() {
const otlpHost = process.env.OPENTELEMETRY_COLLECTOR_SERVICE_HOST;
const otlpPort = process.env.OPENTELEMETRY_COLLECTOR_SERVICE_PORT;
if (!otlpHost || !otlpPort) {
return;
}
const oltpEndpoint = `http://${otlpHost}:${otlpPort}`;
const serviceName = process.env.CONTAINER_NAME || 'unknown-v1-service';
const sdk = new NodeSDK({
resource: resourceFromAttributes({
[ATTR_SERVICE_NAME]: serviceName,
}),
traceExporter: new OTLPTraceExporter({ url: oltpEndpoint }),
instrumentations: [getNodeAutoInstrumentations()],
});
sdk.start();
const log = logger.where(__filename, 'load');
log.info(`OpenTelemetry SDK started with service name ${serviceName} and endpoint ${oltpEndpoint}`);
process.on('SIGTERM', async () => {
await sdk.shutdown();
process.exit(0);
});
};
};