From c928207a31dc79239a1e23c5e0af79b31490f55c Mon Sep 17 00:00:00 2001 From: Long Mai Date: Sat, 28 Aug 2021 10:36:58 -0500 Subject: [PATCH 1/5] 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 --- .../src/CollectorMetricExporter.ts | 6 ++++-- .../src/CollectorTraceExporter.ts | 6 ++++-- .../src/util.ts | 6 ++++++ .../test/CollectorMetricExporter.test.ts | 11 ++++++++++- .../test/CollectorTraceExporter.test.ts | 11 ++++++++++- .../src/platform/browser/CollectorMetricExporter.ts | 6 ++++-- .../src/platform/browser/CollectorTraceExporter.ts | 6 ++++-- .../src/platform/node/CollectorMetricExporter.ts | 6 ++++-- .../src/platform/node/CollectorTraceExporter.ts | 6 ++++-- packages/opentelemetry-exporter-collector/src/util.ts | 6 ++++++ .../test/browser/CollectorMetricExporter.test.ts | 11 ++++++++++- .../test/browser/CollectorTraceExporter.test.ts | 11 ++++++++++- .../test/node/CollectorMetricExporter.test.ts | 11 ++++++++++- .../test/node/CollectorTraceExporter.test.ts | 11 ++++++++++- 14 files changed, 96 insertions(+), 18 deletions(-) diff --git a/packages/opentelemetry-exporter-collector-proto/src/CollectorMetricExporter.ts b/packages/opentelemetry-exporter-collector-proto/src/CollectorMetricExporter.ts index 7b7f98d2d6d..0fc9b86feb0 100644 --- a/packages/opentelemetry-exporter-collector-proto/src/CollectorMetricExporter.ts +++ b/packages/opentelemetry-exporter-collector-proto/src/CollectorMetricExporter.ts @@ -23,8 +23,10 @@ import { MetricRecord, MetricExporter } from '@opentelemetry/sdk-metrics-base'; import { ServiceClientType } from './types'; import { CollectorExporterNodeBase } from './CollectorExporterNodeBase'; 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 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 75a6936a1a1..09db6e38259 100644 --- a/packages/opentelemetry-exporter-collector-proto/src/CollectorTraceExporter.ts +++ b/packages/opentelemetry-exporter-collector-proto/src/CollectorTraceExporter.ts @@ -23,8 +23,10 @@ import { } from '@opentelemetry/exporter-collector'; import { ServiceClientType } 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 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 e9e9ea8acc0..1f15246dbdc 100644 --- a/packages/opentelemetry-exporter-collector-proto/src/util.ts +++ b/packages/opentelemetry-exporter-collector-proto/src/util.ts @@ -86,3 +86,9 @@ export function send( onError(new collectorTypes.CollectorExporterError('No proto')); } } + +export function appendResourcePathToUrlIfNotPresent(url: string, path: string): string { + if (url.match(/v\d\/(traces|metrics)$/)) return url; + + return url + path; +} \ 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 78d62c23906..86546a35276 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 97d7b6b8c5e..1218d527853 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/src/platform/browser/CollectorMetricExporter.ts b/packages/opentelemetry-exporter-collector/src/platform/browser/CollectorMetricExporter.ts index 55a2f39d5bc..bfd7697235f 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 1e8b656abca..801a8633dc8 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 eeb01e65480..1be12d369f8 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 ce051c0bbf4..a8853a4405a 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 c8f1c0bf0e0..b018000110c 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 f52187c7227..4090bbcccf5 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 f480a948367..5f2dc1c46e2 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 bfef016cfad..aa906b5bf7a 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 4f38704bd4c..b4a9e9367c3 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'; From b23f4e8ccf8c92baa93be5e2322fc7f38d929a4d Mon Sep 17 00:00:00 2001 From: Long Mai Date: Mon, 30 Aug 2021 11:30:31 -0500 Subject: [PATCH 2/5] docs: update exporter collector readme --- .../opentelemetry-exporter-collector/README.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/opentelemetry-exporter-collector/README.md b/packages/opentelemetry-exporter-collector/README.md index 0912079a550..1d3ddd5e0be 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,18 @@ 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` +``` + +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 +174,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 From 64742838b4b41738f0a28a10f049e635f3eaa933 Mon Sep 17 00:00:00 2001 From: Long Mai Date: Mon, 30 Aug 2021 11:59:06 -0500 Subject: [PATCH 3/5] docs: update exporter readme --- packages/opentelemetry-exporter-collector/README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/opentelemetry-exporter-collector/README.md b/packages/opentelemetry-exporter-collector/README.md index 1d3ddd5e0be..0fae4508887 100644 --- a/packages/opentelemetry-exporter-collector/README.md +++ b/packages/opentelemetry-exporter-collector/README.md @@ -144,6 +144,15 @@ OTEL_EXPORTER_OTLP_ENDPOINT=https://localhost:4317 # 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 From 43b97071ded3c6feda4fd21eab62860d828761ab Mon Sep 17 00:00:00 2001 From: Long Mai Date: Mon, 30 Aug 2021 12:07:19 -0500 Subject: [PATCH 4/5] refactor: append util --- .../src/CollectorMetricExporter.ts | 2 +- .../src/CollectorTraceExporter.ts | 2 +- packages/opentelemetry-exporter-collector-proto/src/util.ts | 6 ------ packages/opentelemetry-exporter-collector/src/index.ts | 1 + 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/packages/opentelemetry-exporter-collector-proto/src/CollectorMetricExporter.ts b/packages/opentelemetry-exporter-collector-proto/src/CollectorMetricExporter.ts index 0fc9b86feb0..cffbdec9f90 100644 --- a/packages/opentelemetry-exporter-collector-proto/src/CollectorMetricExporter.ts +++ b/packages/opentelemetry-exporter-collector-proto/src/CollectorMetricExporter.ts @@ -18,12 +18,12 @@ 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'; -import { appendResourcePathToUrlIfNotPresent } from './util'; const DEFAULT_COLLECTOR_RESOURCE_PATH = '/v1/metrics'; const DEFAULT_COLLECTOR_URL=`http://localhost:55681${DEFAULT_COLLECTOR_RESOURCE_PATH}`; diff --git a/packages/opentelemetry-exporter-collector-proto/src/CollectorTraceExporter.ts b/packages/opentelemetry-exporter-collector-proto/src/CollectorTraceExporter.ts index 09db6e38259..561890d04e5 100644 --- a/packages/opentelemetry-exporter-collector-proto/src/CollectorTraceExporter.ts +++ b/packages/opentelemetry-exporter-collector-proto/src/CollectorTraceExporter.ts @@ -20,10 +20,10 @@ import { collectorTypes, toCollectorExportTraceServiceRequest, CollectorExporterNodeConfigBase, + appendResourcePathToUrlIfNotPresent, } from '@opentelemetry/exporter-collector'; import { ServiceClientType } from './types'; import { getEnv, baggageUtils } from '@opentelemetry/core'; -import { appendResourcePathToUrlIfNotPresent } from './util'; const DEFAULT_COLLECTOR_RESOURCE_PATH = '/v1/traces'; const DEFAULT_COLLECTOR_URL=`http://localhost:55681${DEFAULT_COLLECTOR_RESOURCE_PATH}`; diff --git a/packages/opentelemetry-exporter-collector-proto/src/util.ts b/packages/opentelemetry-exporter-collector-proto/src/util.ts index 1f15246dbdc..e7f3aeb004d 100644 --- a/packages/opentelemetry-exporter-collector-proto/src/util.ts +++ b/packages/opentelemetry-exporter-collector-proto/src/util.ts @@ -85,10 +85,4 @@ export function send( } else { onError(new collectorTypes.CollectorExporterError('No proto')); } -} - -export function appendResourcePathToUrlIfNotPresent(url: string, path: string): string { - if (url.match(/v\d\/(traces|metrics)$/)) return url; - - return url + path; } \ No newline at end of file diff --git a/packages/opentelemetry-exporter-collector/src/index.ts b/packages/opentelemetry-exporter-collector/src/index.ts index 7d549152f16..0d24649794c 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'; From 2e24a0345fe8552f99805bf4592bb842d1a3fad5 Mon Sep 17 00:00:00 2001 From: Long Mai Date: Mon, 30 Aug 2021 14:13:44 -0500 Subject: [PATCH 5/5] fix: lint on readme --- packages/opentelemetry-exporter-collector/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/opentelemetry-exporter-collector/README.md b/packages/opentelemetry-exporter-collector/README.md index 0fae4508887..c58147413ad 100644 --- a/packages/opentelemetry-exporter-collector/README.md +++ b/packages/opentelemetry-exporter-collector/README.md @@ -151,6 +151,7 @@ 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].