import { useMicrosoftOpenTelemetry } from '@microsoft/opentelemetry';
// Instrumentation must occur before other imports
useMicrosoftOpenTelemetry({
azureMonitor: {
azureMonitorExporterOptions: {
connectionString: process.env.APPLICATIONINSIGHTS_CONNECTION_STRING,
},
enableLiveMetrics: false,
},
instrumentationOptions: {
bunyan: { enabled: true },
winston: { enabled: true },
},
});
import { OpenAIInstrumentation } from '@opentelemetry/instrumentation-openai';
import { registerInstrumentations } from '@opentelemetry/instrumentation';
registerInstrumentations({
instrumentations: [new OpenAIInstrumentation()],
});
import express from 'express';
import { OpenAI } from 'openai';
import winston from 'winston';
import bunyan from 'bunyan';
const winstonLogger = winston.createLogger({
level: 'info',
format: winston.format.combine(winston.format.timestamp(), winston.format.json()),
transports: [new winston.transports.Console()]
});
const bunyanLogger = bunyan.createLogger({ name: 'express-openai-otel-test-app' });
process.on('uncaughtException', (err) => {
winstonLogger.error('Uncaught exception in test app', { message: err.message, stack: err.stack });
});
process.on('unhandledRejection', (reason) => {
winstonLogger.error('Unhandled rejection in test app', { reason: reason instanceof Error ? reason.message : reason });
});
const app = express();
const port = Number(process.env.PORT || process.env.NODE_TEST_APP_PORT || 5000);
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
baseURL: 'https://naarkalg-sw.cognitiveservices.azure.com/openai/v1/'
});
app.get('/', (_req, res) => {
winstonLogger.info('Received request for root endpoint');
res.status(200).send('Hello from the Express OpenAI OTel instrumentation test app');
});
app.get('/dependencies', async (_req, res, next) => {
winstonLogger.info('Received request for dependencies endpoint');
try {
const completion = await client.chat.completions.create({
model: 'gpt-4o-mini',
messages: [
{ role: 'system', content: 'You are a helpful assistant. Respond in one sentence.' },
{ role: 'user', content: 'What is the capital of France?' },
],
max_tokens: 50,
});
const answer = completion.choices[0].message.content;
winstonLogger.info('OpenAI dependency request completed', { answer });
res.status(200).send(`OpenAI dependency request completed: ${answer}`);
} catch (err) {
winstonLogger.error('OpenAI dependency request failed', { message: err.message });
next(err);
}
});
app.get('/exceptions', (_req, res) => {
winstonLogger.info('Received request for exceptions endpoint');
res.status(500).send('Triggering exception');
setImmediate(() => {
throw new Error('Intentional test error from Express OpenAI OTel app');
});
});
app.get('/logs', (_req, res) => {
console.log('Console log message from Express OpenAI OTel test app');
console.warn('Console warn message from Express OpenAI OTel test app');
console.info('Console info message from Express OpenAI OTel test app');
winstonLogger.info('Winston info message from Express OpenAI OTel test app');
winstonLogger.warn('Winston warn message from Express OpenAI OTel test app');
winstonLogger.error('Winston error message from Express OpenAI OTel test app');
bunyanLogger.info('Bunyan info message from Express OpenAI OTel test app');
bunyanLogger.warn('Bunyan warn message from Express OpenAI OTel test app');
bunyanLogger.error('Bunyan error message from Express OpenAI OTel test app');
res.status(200).send('Logs generated with console, winston, and bunyan');
});
app.get('/logs/complex', (_req, res) => {
const complexObject = {
userId: 'e2e-test-user-42',
action: 'complex-object-serialization-test',
metadata: {
nested: {
level: 3,
tags: ['alpha', 'beta', 'gamma'],
config: { enabled: true, retryCount: 5, timeout: 30000 }
},
timestamp: '2026-01-15T12:00:00.000Z',
scores: [99.5, 87.3, 100.0]
},
items: [
{ id: 1, name: 'item-one', active: true },
{ id: 2, name: 'item-two', active: false }
],
nullField: null,
emptyString: ''
};
console.log('ComplexObjectTest-Console', complexObject);
winstonLogger.info('ComplexObjectTest-Winston', { complexPayload: complexObject });
bunyanLogger.info({ complexPayload: complexObject }, 'ComplexObjectTest-Bunyan');
res.status(200).json({ message: 'Complex object logs generated', objectKeys: Object.keys(complexObject) });
});
app.use((err, _req, res, next) => {
winstonLogger.error('Express error handler caught exception', { message: err.message, stack: err.stack });
if (res.headersSent) {
return next(err);
}
res.status(500).send('Intentional test error');
});
app.listen(port, () => {
winstonLogger.info(`Express OpenAI OTel test app listening on port ${port}`);
});
Component
distro
Description
Error:

Distro version: 1.0.1 (built from sources)
Exporter version: 1.0.0-beta.39
App:
Expected Behavior
Should run without type error
Steps to Reproduce
pnpm run buildat rootpnpm packEnvironment
Windows
Distro version: 1.0.1 (built from sources)
Exporter version: 1.0.0-beta.39
Additional Context
No response