From dc574f71685b90c3541c8ede9a91f852c8345fe7 Mon Sep 17 00:00:00 2001 From: Long Mai Date: Tue, 31 Aug 2021 13:19:44 -0500 Subject: [PATCH] feat: OTEL_EXPORTER_OTLP_ENDPOINT append version and signal (#2438) * fix(@opentelemetry/exporter-collector): OTEL_EXPORTER_OTLP_ENDPOINT append version and signal collector convention of appending the version and signal to the path (e.g. v1/traces or v1/metrics), if not present already * docs: update exporter collector readme * docs: update exporter readme * refactor: append util * fix: lint on readme Co-authored-by: Bartlomiej Obecny --- .../src/CollectorMetricExporter.ts | 6 +++-- .../src/CollectorTraceExporter.ts | 6 +++-- .../src/util.ts | 2 +- .../test/CollectorMetricExporter.test.ts | 11 +++++++- .../test/CollectorTraceExporter.test.ts | 11 +++++++- .../README.md | 27 +++++++++++++++++-- .../src/index.ts | 1 + .../browser/CollectorMetricExporter.ts | 6 +++-- .../browser/CollectorTraceExporter.ts | 6 +++-- .../platform/node/CollectorMetricExporter.ts | 6 +++-- .../platform/node/CollectorTraceExporter.ts | 6 +++-- .../src/util.ts | 6 +++++ .../browser/CollectorMetricExporter.test.ts | 11 +++++++- .../browser/CollectorTraceExporter.test.ts | 11 +++++++- .../test/node/CollectorMetricExporter.test.ts | 11 +++++++- .../test/node/CollectorTraceExporter.test.ts | 11 +++++++- 16 files changed, 117 insertions(+), 21 deletions(-) diff --git a/packages/opentelemetry-exporter-collector-proto/src/CollectorMetricExporter.ts b/packages/opentelemetry-exporter-collector-proto/src/CollectorMetricExporter.ts index 7b7f98d2d6..cffbdec9f9 100644 --- a/packages/opentelemetry-exporter-collector-proto/src/CollectorMetricExporter.ts +++ b/packages/opentelemetry-exporter-collector-proto/src/CollectorMetricExporter.ts @@ -18,13 +18,15 @@ import { collectorTypes, toCollectorExportMetricServiceRequest, CollectorExporterNodeConfigBase, + appendResourcePathToUrlIfNotPresent, } from '@opentelemetry/exporter-collector'; import { MetricRecord, MetricExporter } from '@opentelemetry/sdk-metrics-base'; import { ServiceClientType } from './types'; import { CollectorExporterNodeBase } from './CollectorExporterNodeBase'; import { getEnv, baggageUtils } from '@opentelemetry/core'; -const DEFAULT_COLLECTOR_URL = 'http://localhost:55681/v1/metrics'; +const DEFAULT_COLLECTOR_RESOURCE_PATH = '/v1/metrics'; +const DEFAULT_COLLECTOR_URL=`http://localhost:55681${DEFAULT_COLLECTOR_RESOURCE_PATH}`; /** * Collector Metric Exporter for Node with protobuf @@ -64,7 +66,7 @@ export class CollectorMetricExporter : getEnv().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT.length > 0 ? getEnv().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT : getEnv().OTEL_EXPORTER_OTLP_ENDPOINT.length > 0 - ? getEnv().OTEL_EXPORTER_OTLP_ENDPOINT + ? appendResourcePathToUrlIfNotPresent(getEnv().OTEL_EXPORTER_OTLP_ENDPOINT, DEFAULT_COLLECTOR_RESOURCE_PATH) : DEFAULT_COLLECTOR_URL; } diff --git a/packages/opentelemetry-exporter-collector-proto/src/CollectorTraceExporter.ts b/packages/opentelemetry-exporter-collector-proto/src/CollectorTraceExporter.ts index 75a6936a1a..561890d04e 100644 --- a/packages/opentelemetry-exporter-collector-proto/src/CollectorTraceExporter.ts +++ b/packages/opentelemetry-exporter-collector-proto/src/CollectorTraceExporter.ts @@ -20,11 +20,13 @@ import { collectorTypes, toCollectorExportTraceServiceRequest, CollectorExporterNodeConfigBase, + appendResourcePathToUrlIfNotPresent, } from '@opentelemetry/exporter-collector'; import { ServiceClientType } from './types'; import { getEnv, baggageUtils } from '@opentelemetry/core'; -const DEFAULT_COLLECTOR_URL = 'http://localhost:55681/v1/traces'; +const DEFAULT_COLLECTOR_RESOURCE_PATH = '/v1/traces'; +const DEFAULT_COLLECTOR_URL=`http://localhost:55681${DEFAULT_COLLECTOR_RESOURCE_PATH}`; /** * Collector Trace Exporter for Node with protobuf @@ -57,7 +59,7 @@ export class CollectorTraceExporter : getEnv().OTEL_EXPORTER_OTLP_TRACES_ENDPOINT.length > 0 ? getEnv().OTEL_EXPORTER_OTLP_TRACES_ENDPOINT : getEnv().OTEL_EXPORTER_OTLP_ENDPOINT.length > 0 - ? getEnv().OTEL_EXPORTER_OTLP_ENDPOINT + ? appendResourcePathToUrlIfNotPresent(getEnv().OTEL_EXPORTER_OTLP_ENDPOINT, DEFAULT_COLLECTOR_RESOURCE_PATH) : DEFAULT_COLLECTOR_URL; } diff --git a/packages/opentelemetry-exporter-collector-proto/src/util.ts b/packages/opentelemetry-exporter-collector-proto/src/util.ts index e9e9ea8acc..e7f3aeb004 100644 --- a/packages/opentelemetry-exporter-collector-proto/src/util.ts +++ b/packages/opentelemetry-exporter-collector-proto/src/util.ts @@ -85,4 +85,4 @@ export function send( } else { onError(new collectorTypes.CollectorExporterError('No proto')); } -} +} \ No newline at end of file diff --git a/packages/opentelemetry-exporter-collector-proto/test/CollectorMetricExporter.test.ts b/packages/opentelemetry-exporter-collector-proto/test/CollectorMetricExporter.test.ts index 78d62c2390..86546a3527 100644 --- a/packages/opentelemetry-exporter-collector-proto/test/CollectorMetricExporter.test.ts +++ b/packages/opentelemetry-exporter-collector-proto/test/CollectorMetricExporter.test.ts @@ -56,7 +56,7 @@ describe('CollectorMetricExporter - node with proto over http', () => { describe('when configuring via environment', () => { const envSource = process.env; it('should use url defined in env', () => { - envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar'; + envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar/v1/metrics'; const collectorExporter = new CollectorMetricExporter(); assert.strictEqual( collectorExporter.url, @@ -64,6 +64,15 @@ describe('CollectorMetricExporter - node with proto over http', () => { ); envSource.OTEL_EXPORTER_OTLP_ENDPOINT = ''; }); + it('should use url defined in env and append version and signal when not present', () => { + envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar'; + const collectorExporter = new CollectorMetricExporter(); + assert.strictEqual( + collectorExporter.url, + `${envSource.OTEL_EXPORTER_OTLP_ENDPOINT}/v1/metrics` + ); + envSource.OTEL_EXPORTER_OTLP_ENDPOINT = ''; + }); it('should override global exporter url with signal url defined in env', () => { envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar'; envSource.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT = 'http://foo.metrics'; diff --git a/packages/opentelemetry-exporter-collector-proto/test/CollectorTraceExporter.test.ts b/packages/opentelemetry-exporter-collector-proto/test/CollectorTraceExporter.test.ts index 97d7b6b8c5..1218d52785 100644 --- a/packages/opentelemetry-exporter-collector-proto/test/CollectorTraceExporter.test.ts +++ b/packages/opentelemetry-exporter-collector-proto/test/CollectorTraceExporter.test.ts @@ -50,7 +50,7 @@ describe('CollectorTraceExporter - node with proto over http', () => { describe('when configuring via environment', () => { const envSource = process.env; it('should use url defined in env', () => { - envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar'; + envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar/v1/traces'; const collectorExporter = new CollectorTraceExporter(); assert.strictEqual( collectorExporter.url, @@ -58,6 +58,15 @@ describe('CollectorTraceExporter - node with proto over http', () => { ); envSource.OTEL_EXPORTER_OTLP_ENDPOINT = ''; }); + it('should use url defined in env and append version and signal when not present', () => { + envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar'; + const collectorExporter = new CollectorTraceExporter(); + assert.strictEqual( + collectorExporter.url, + `${envSource.OTEL_EXPORTER_OTLP_ENDPOINT}/v1/traces` + ); + envSource.OTEL_EXPORTER_OTLP_ENDPOINT = ''; + }); it('should override global exporter url with signal url defined in env', () => { envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar'; envSource.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT = 'http://foo.traces'; diff --git a/packages/opentelemetry-exporter-collector/README.md b/packages/opentelemetry-exporter-collector/README.md index 0912079a55..c58147413a 100644 --- a/packages/opentelemetry-exporter-collector/README.md +++ b/packages/opentelemetry-exporter-collector/README.md @@ -28,7 +28,7 @@ import { WebTracerProvider } from '@opentelemetry/sdk-trace-web'; import { CollectorTraceExporter } from '@opentelemetry/exporter-collector'; const collectorOptions = { - url: '', // url is optional and can be omitted - default is http://localhost:55681/v1/trace + url: '', // url is optional and can be omitted - default is http://localhost:55681/v1/traces headers: {}, // an optional object containing custom headers to be sent with each request concurrencyLimit: 10, // an optional limit on pending requests }; @@ -83,7 +83,7 @@ const { BasicTracerProvider, BatchSpanProcessor } = require('@opentelemetry/sdk- const { CollectorTraceExporter } = require('@opentelemetry/exporter-collector'); const collectorOptions = { - url: '', // url is optional and can be omitted - default is http://localhost:55681/v1/trace + url: '', // url is optional and can be omitted - default is http://localhost:55681/v1/traces headers: { foo: 'bar' }, // an optional object containing custom headers to be sent with each request will only work with http @@ -134,6 +134,28 @@ For GRPC please check [npm-url-grpc] For PROTOBUF please check [npm-url-proto] +## Configuration options as environment variables + +Instead of providing options to `CollectorMetricExporter` and `CollectorTraceExporter` explicitly, environment variables may be provided instead. + +```sh +OTEL_EXPORTER_OTLP_ENDPOINT=https://localhost:4317 +# this will automatically append the version and signal path +# e.g. https://localhost:4317/v1/traces for `CollectorTraceExporter` and https://localhost:4317/v1/metrics for `CollectorMetricExporter` +``` + +If the trace and metric exporter endpoints have different providers, the env var for per-signal endpoints are available to use + +```sh +OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://trace-service:4317/v1/traces +OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=https://metric-service:4317/v1/metrics +# version and signal needs to be explicit +``` + +> The per-signal endpoints take precedence and overrides `OTEL_EXPORTER_OTLP_ENDPOINT` + +For more details, see [OpenTelemetry Specification on Protocol Exporter][opentelemetry-spec-protocol-exporter]. + ## Running opentelemetry-collector locally to see the traces 1. Go to examples/collector-exporter-node @@ -162,4 +184,5 @@ Apache 2.0 - See [LICENSE][license-url] for more information. [npm-url-proto]: https://www.npmjs.com/package/@opentelemetry/exporter-collector-proto [npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fexporter-collector.svg [opentelemetry-collector-url]: https://github.com/open-telemetry/opentelemetry-collector +[opentelemetry-spec-protocol-exporter]: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#configuration-options [semconv-resource-service-name]: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/resource/semantic_conventions/README.md#service diff --git a/packages/opentelemetry-exporter-collector/src/index.ts b/packages/opentelemetry-exporter-collector/src/index.ts index 7d549152f1..0d24649794 100644 --- a/packages/opentelemetry-exporter-collector/src/index.ts +++ b/packages/opentelemetry-exporter-collector/src/index.ts @@ -19,3 +19,4 @@ export * from './platform'; export * as collectorTypes from './types'; export { toCollectorExportTraceServiceRequest } from './transform'; export { toCollectorExportMetricServiceRequest } from './transformMetrics'; +export { appendResourcePathToUrlIfNotPresent } from './util'; diff --git a/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorMetricExporter.ts b/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorMetricExporter.ts index 55a2f39d5b..bfd7697235 100644 --- a/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorMetricExporter.ts +++ b/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorMetricExporter.ts @@ -20,8 +20,10 @@ import * as collectorTypes from '../../types'; import { CollectorExporterBrowserBase } from './CollectorExporterBrowserBase'; import { toCollectorExportMetricServiceRequest } from '../../transformMetrics'; import { getEnv, baggageUtils } from '@opentelemetry/core'; +import { appendResourcePathToUrlIfNotPresent } from '../../util'; -const DEFAULT_COLLECTOR_URL = 'http://localhost:55681/v1/metrics'; +const DEFAULT_COLLECTOR_RESOURCE_PATH = '/v1/metrics'; +const DEFAULT_COLLECTOR_URL=`http://localhost:55681${DEFAULT_COLLECTOR_RESOURCE_PATH}`; /** * Collector Metric Exporter for Web @@ -61,7 +63,7 @@ export class CollectorMetricExporter : getEnv().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT.length > 0 ? getEnv().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT : getEnv().OTEL_EXPORTER_OTLP_ENDPOINT.length > 0 - ? getEnv().OTEL_EXPORTER_OTLP_ENDPOINT + ? appendResourcePathToUrlIfNotPresent(getEnv().OTEL_EXPORTER_OTLP_ENDPOINT, DEFAULT_COLLECTOR_RESOURCE_PATH) : DEFAULT_COLLECTOR_URL; } } diff --git a/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorTraceExporter.ts b/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorTraceExporter.ts index 1e8b656abc..801a8633dc 100644 --- a/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorTraceExporter.ts +++ b/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorTraceExporter.ts @@ -20,8 +20,10 @@ import { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base'; import { toCollectorExportTraceServiceRequest } from '../../transform'; import * as collectorTypes from '../../types'; import { getEnv, baggageUtils } from '@opentelemetry/core'; +import { appendResourcePathToUrlIfNotPresent } from '../../util'; -const DEFAULT_COLLECTOR_URL = 'http://localhost:55681/v1/traces'; +const DEFAULT_COLLECTOR_RESOURCE_PATH = '/v1/traces'; +const DEFAULT_COLLECTOR_URL=`http://localhost:55681${DEFAULT_COLLECTOR_RESOURCE_PATH}`; /** * Collector Trace Exporter for Web @@ -53,7 +55,7 @@ export class CollectorTraceExporter : getEnv().OTEL_EXPORTER_OTLP_TRACES_ENDPOINT.length > 0 ? getEnv().OTEL_EXPORTER_OTLP_TRACES_ENDPOINT : getEnv().OTEL_EXPORTER_OTLP_ENDPOINT.length > 0 - ? getEnv().OTEL_EXPORTER_OTLP_ENDPOINT + ? appendResourcePathToUrlIfNotPresent(getEnv().OTEL_EXPORTER_OTLP_ENDPOINT, DEFAULT_COLLECTOR_RESOURCE_PATH) : DEFAULT_COLLECTOR_URL; } } diff --git a/packages/opentelemetry-exporter-collector/src/platform/node/CollectorMetricExporter.ts b/packages/opentelemetry-exporter-collector/src/platform/node/CollectorMetricExporter.ts index eeb01e6548..1be12d369f 100644 --- a/packages/opentelemetry-exporter-collector/src/platform/node/CollectorMetricExporter.ts +++ b/packages/opentelemetry-exporter-collector/src/platform/node/CollectorMetricExporter.ts @@ -20,8 +20,10 @@ import { CollectorExporterNodeConfigBase } from './types'; import { CollectorExporterNodeBase } from './CollectorExporterNodeBase'; import { toCollectorExportMetricServiceRequest } from '../../transformMetrics'; import { getEnv, baggageUtils } from '@opentelemetry/core'; +import { appendResourcePathToUrlIfNotPresent } from '../../util'; -const DEFAULT_COLLECTOR_URL = 'http://localhost:55681/v1/metrics'; +const DEFAULT_COLLECTOR_RESOURCE_PATH = '/v1/metrics'; +const DEFAULT_COLLECTOR_URL=`http://localhost:55681${DEFAULT_COLLECTOR_RESOURCE_PATH}`; /** * Collector Metric Exporter for Node @@ -61,7 +63,7 @@ export class CollectorMetricExporter : getEnv().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT.length > 0 ? getEnv().OTEL_EXPORTER_OTLP_METRICS_ENDPOINT : getEnv().OTEL_EXPORTER_OTLP_ENDPOINT.length > 0 - ? getEnv().OTEL_EXPORTER_OTLP_ENDPOINT + ? appendResourcePathToUrlIfNotPresent(getEnv().OTEL_EXPORTER_OTLP_ENDPOINT, DEFAULT_COLLECTOR_RESOURCE_PATH) : DEFAULT_COLLECTOR_URL; } } diff --git a/packages/opentelemetry-exporter-collector/src/platform/node/CollectorTraceExporter.ts b/packages/opentelemetry-exporter-collector/src/platform/node/CollectorTraceExporter.ts index ce051c0bbf..a8853a4405 100644 --- a/packages/opentelemetry-exporter-collector/src/platform/node/CollectorTraceExporter.ts +++ b/packages/opentelemetry-exporter-collector/src/platform/node/CollectorTraceExporter.ts @@ -20,8 +20,10 @@ import { CollectorExporterNodeConfigBase } from './types'; import * as collectorTypes from '../../types'; import { toCollectorExportTraceServiceRequest } from '../../transform'; import { getEnv, baggageUtils } from '@opentelemetry/core'; +import { appendResourcePathToUrlIfNotPresent } from '../../util'; -const DEFAULT_COLLECTOR_URL = 'http://localhost:55681/v1/traces'; +const DEFAULT_COLLECTOR_RESOURCE_PATH = '/v1/traces'; +const DEFAULT_COLLECTOR_URL=`http://localhost:55681${DEFAULT_COLLECTOR_RESOURCE_PATH}`; /** * Collector Trace Exporter for Node @@ -54,7 +56,7 @@ export class CollectorTraceExporter : getEnv().OTEL_EXPORTER_OTLP_TRACES_ENDPOINT.length > 0 ? getEnv().OTEL_EXPORTER_OTLP_TRACES_ENDPOINT : getEnv().OTEL_EXPORTER_OTLP_ENDPOINT.length > 0 - ? getEnv().OTEL_EXPORTER_OTLP_ENDPOINT + ? appendResourcePathToUrlIfNotPresent(getEnv().OTEL_EXPORTER_OTLP_ENDPOINT, DEFAULT_COLLECTOR_RESOURCE_PATH) : DEFAULT_COLLECTOR_URL; } } diff --git a/packages/opentelemetry-exporter-collector/src/util.ts b/packages/opentelemetry-exporter-collector/src/util.ts index c8f1c0bf0e..b018000110 100644 --- a/packages/opentelemetry-exporter-collector/src/util.ts +++ b/packages/opentelemetry-exporter-collector/src/util.ts @@ -33,3 +33,9 @@ export function parseHeaders( }); return headers; } + +export function appendResourcePathToUrlIfNotPresent(url: string, path: string): string { + if (url.match(/v\d\/(traces|metrics)$/)) return url; + + return url + path; +} diff --git a/packages/opentelemetry-exporter-collector/test/browser/CollectorMetricExporter.test.ts b/packages/opentelemetry-exporter-collector/test/browser/CollectorMetricExporter.test.ts index f52187c722..4090bbcccf 100644 --- a/packages/opentelemetry-exporter-collector/test/browser/CollectorMetricExporter.test.ts +++ b/packages/opentelemetry-exporter-collector/test/browser/CollectorMetricExporter.test.ts @@ -383,7 +383,7 @@ describe('CollectorMetricExporter - web', () => { describe('when configuring via environment', () => { const envSource = window as any; it('should use url defined in env', () => { - envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar'; + envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar/v1/metrics'; const collectorExporter = new CollectorMetricExporter(); assert.strictEqual( collectorExporter.url, @@ -391,6 +391,15 @@ describe('when configuring via environment', () => { ); envSource.OTEL_EXPORTER_OTLP_ENDPOINT = ''; }); + it('should use url defined in env and append version and signal when not present', () => { + envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar'; + const collectorExporter = new CollectorMetricExporter(); + assert.strictEqual( + collectorExporter.url, + `${envSource.OTEL_EXPORTER_OTLP_ENDPOINT}/v1/metrics` + ); + envSource.OTEL_EXPORTER_OTLP_ENDPOINT = ''; + }); it('should override global exporter url with signal url defined in env', () => { envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar'; envSource.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT = 'http://foo.metrics'; diff --git a/packages/opentelemetry-exporter-collector/test/browser/CollectorTraceExporter.test.ts b/packages/opentelemetry-exporter-collector/test/browser/CollectorTraceExporter.test.ts index f480a94836..5f2dc1c46e 100644 --- a/packages/opentelemetry-exporter-collector/test/browser/CollectorTraceExporter.test.ts +++ b/packages/opentelemetry-exporter-collector/test/browser/CollectorTraceExporter.test.ts @@ -312,7 +312,7 @@ describe('CollectorTraceExporter - browser (getDefaultUrl)', () => { describe('when configuring via environment', () => { const envSource = window as any; it('should use url defined in env', () => { - envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar'; + envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar/v1/traces'; const collectorExporter = new CollectorTraceExporter(); assert.strictEqual( collectorExporter.url, @@ -320,6 +320,15 @@ describe('when configuring via environment', () => { ); envSource.OTEL_EXPORTER_OTLP_ENDPOINT = ''; }); + it('should use url defined in env and append version and signal when not present', () => { + envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar'; + const collectorExporter = new CollectorTraceExporter(); + assert.strictEqual( + collectorExporter.url, + `${envSource.OTEL_EXPORTER_OTLP_ENDPOINT}/v1/traces` + ); + envSource.OTEL_EXPORTER_OTLP_ENDPOINT = ''; + }); it('should override global exporter url with signal url defined in env', () => { envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar'; envSource.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT = 'http://foo.traces'; diff --git a/packages/opentelemetry-exporter-collector/test/node/CollectorMetricExporter.test.ts b/packages/opentelemetry-exporter-collector/test/node/CollectorMetricExporter.test.ts index bfef016cfa..aa906b5bf7 100644 --- a/packages/opentelemetry-exporter-collector/test/node/CollectorMetricExporter.test.ts +++ b/packages/opentelemetry-exporter-collector/test/node/CollectorMetricExporter.test.ts @@ -84,7 +84,7 @@ describe('CollectorMetricExporter - node with json over http', () => { describe('when configuring via environment', () => { const envSource = process.env; it('should use url defined in env', () => { - envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar'; + envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar/v1/metrics'; const collectorExporter = new CollectorMetricExporter(); assert.strictEqual( collectorExporter.url, @@ -92,6 +92,15 @@ describe('CollectorMetricExporter - node with json over http', () => { ); envSource.OTEL_EXPORTER_OTLP_ENDPOINT = ''; }); + it('should use url defined in env and append version and signal when not present', () => { + envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar'; + const collectorExporter = new CollectorMetricExporter(); + assert.strictEqual( + collectorExporter.url, + `${envSource.OTEL_EXPORTER_OTLP_ENDPOINT}/v1/metrics` + ); + envSource.OTEL_EXPORTER_OTLP_ENDPOINT = ''; + }); it('should override global exporter url with signal url defined in env', () => { envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar'; envSource.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT = 'http://foo.metrics'; diff --git a/packages/opentelemetry-exporter-collector/test/node/CollectorTraceExporter.test.ts b/packages/opentelemetry-exporter-collector/test/node/CollectorTraceExporter.test.ts index 4f38704bd4..b4a9e9367c 100644 --- a/packages/opentelemetry-exporter-collector/test/node/CollectorTraceExporter.test.ts +++ b/packages/opentelemetry-exporter-collector/test/node/CollectorTraceExporter.test.ts @@ -70,7 +70,7 @@ describe('CollectorTraceExporter - node with json over http', () => { describe('when configuring via environment', () => { const envSource = process.env; it('should use url defined in env', () => { - envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar'; + envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar/v1/traces'; const collectorExporter = new CollectorTraceExporter(); assert.strictEqual( collectorExporter.url, @@ -78,6 +78,15 @@ describe('CollectorTraceExporter - node with json over http', () => { ); envSource.OTEL_EXPORTER_OTLP_ENDPOINT = ''; }); + it('should use url defined in env and append version and signal when not present', () => { + envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar'; + const collectorExporter = new CollectorTraceExporter(); + assert.strictEqual( + collectorExporter.url, + `${envSource.OTEL_EXPORTER_OTLP_ENDPOINT}/v1/traces` + ); + envSource.OTEL_EXPORTER_OTLP_ENDPOINT = ''; + }); it('should override global exporter url with signal url defined in env', () => { envSource.OTEL_EXPORTER_OTLP_ENDPOINT = 'http://foo.bar'; envSource.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT = 'http://foo.traces';