diff --git a/src/cli/operations/dev/__tests__/otel-collector.test.ts b/src/cli/operations/dev/__tests__/otel-collector.test.ts new file mode 100644 index 000000000..d934306ab --- /dev/null +++ b/src/cli/operations/dev/__tests__/otel-collector.test.ts @@ -0,0 +1,32 @@ +import { startOtelCollector } from '../otel'; +import { tmpdir } from 'os'; +import { join } from 'path'; +import { afterEach, describe, expect, it } from 'vitest'; + +describe('startOtelCollector', () => { + const savedEnv = { ...process.env }; + + afterEach(() => { + process.env = { ...savedEnv }; + }); + + it('uses built-in collector endpoint when no external endpoint is set', async () => { + delete process.env.OTEL_EXPORTER_OTLP_ENDPOINT; + const { collector, otelEnvVars } = await startOtelCollector(join(tmpdir(), 'otel-test')); + try { + expect(otelEnvVars.OTEL_EXPORTER_OTLP_ENDPOINT).toMatch(/^http:\/\/127\.0\.0\.1:\d+$/); + } finally { + collector.stop(); + } + }); + + it('uses external endpoint when OTEL_EXPORTER_OTLP_ENDPOINT is set', async () => { + process.env.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://my-collector:4318'; + const { collector, otelEnvVars } = await startOtelCollector(join(tmpdir(), 'otel-test')); + try { + expect(otelEnvVars.OTEL_EXPORTER_OTLP_ENDPOINT).toBe('http://my-collector:4318'); + } finally { + collector.stop(); + } + }); +}); diff --git a/src/cli/operations/dev/otel/collector.ts b/src/cli/operations/dev/otel/collector.ts index ee3ad7838..350abd434 100644 --- a/src/cli/operations/dev/otel/collector.ts +++ b/src/cli/operations/dev/otel/collector.ts @@ -297,12 +297,14 @@ export async function startOtelCollector(persistTracesDir: string): Promise<{ const collectorPort = await collector.start(); const otelEnvVars: Record = { - OTEL_EXPORTER_OTLP_ENDPOINT: `http://127.0.0.1:${collectorPort}`, - OTEL_EXPORTER_OTLP_PROTOCOL: 'http/protobuf', - OTEL_METRICS_EXPORTER: 'none', - AGENT_OBSERVABILITY_ENABLED: 'true', - OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT: 'true', - OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED: 'true', + OTEL_EXPORTER_OTLP_ENDPOINT: process.env.OTEL_EXPORTER_OTLP_ENDPOINT ?? `http://127.0.0.1:${collectorPort}`, + OTEL_EXPORTER_OTLP_PROTOCOL: process.env.OTEL_EXPORTER_OTLP_PROTOCOL ?? 'http/protobuf', + OTEL_METRICS_EXPORTER: process.env.OTEL_METRICS_EXPORTER ?? 'none', + AGENT_OBSERVABILITY_ENABLED: process.env.AGENT_OBSERVABILITY_ENABLED ?? 'true', + OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT: + process.env.OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT ?? 'true', + OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED: + process.env.OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED ?? 'true', }; return { collector, otelEnvVars };