From 9ed9dcb0e08d364158c6f478b7bfd25d792dfe5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Th=C3=A9riault?= Date: Tue, 13 Aug 2024 13:43:09 -0400 Subject: [PATCH 1/4] Use HTTP exporters for OTLP --- packages/sampling/package.json | 1 - packages/sampling/src/metrics.ts | 50 +++++++--------- packages/solarwinds-apm/package.json | 4 +- packages/solarwinds-apm/src/config.ts | 35 +++++------ packages/solarwinds-apm/src/exporters/logs.ts | 28 +++++++++ .../solarwinds-apm/src/exporters/metrics.ts | 60 +++++++++++++++++++ .../solarwinds-apm/src/exporters/traces.ts | 28 +++++++++ packages/solarwinds-apm/src/init.ts | 41 ++----------- packages/solarwinds-apm/src/sampling/grpc.ts | 4 +- .../src/sampling/{core.ts => sampler.ts} | 2 +- .../{core.test.ts => sampler.test.ts} | 6 +- yarn.lock | 48 ++++++++++++--- 12 files changed, 213 insertions(+), 94 deletions(-) create mode 100644 packages/solarwinds-apm/src/exporters/logs.ts create mode 100644 packages/solarwinds-apm/src/exporters/metrics.ts create mode 100644 packages/solarwinds-apm/src/exporters/traces.ts rename packages/solarwinds-apm/src/sampling/{core.ts => sampler.ts} (98%) rename packages/solarwinds-apm/test/sampling/{core.test.ts => sampler.test.ts} (98%) diff --git a/packages/sampling/package.json b/packages/sampling/package.json index 42affcad..8388440f 100644 --- a/packages/sampling/package.json +++ b/packages/sampling/package.json @@ -51,7 +51,6 @@ "@opentelemetry/api": "^1.3.0", "@opentelemetry/sdk-metrics": "~1.25.0", "@solarwinds-apm/eslint-config": "workspace:^", - "@solarwinds-apm/lazy": "workspace:^", "@solarwinds-apm/rollup-config": "workspace:^", "@solarwinds-apm/test": "workspace:^", "@types/node": "^16.13.0", diff --git a/packages/sampling/src/metrics.ts b/packages/sampling/src/metrics.ts index 533a0ff4..adabd782 100644 --- a/packages/sampling/src/metrics.ts +++ b/packages/sampling/src/metrics.ts @@ -15,32 +15,28 @@ limitations under the License. */ import { metrics, ValueType } from "@opentelemetry/api" -import { lazy } from "@solarwinds-apm/lazy" -export const counters = lazy(() => { - const meter = metrics.getMeter("sw.apm.sampling.metrics") +const meter = metrics.getMeter("sw.apm.sampling.metrics") - return { - requestCount: meter.createCounter("trace.service.request_count", { - valueType: ValueType.INT, - }), - sampleCount: meter.createCounter("trace.service.samplecount", { - valueType: ValueType.INT, - }), - traceCount: meter.createCounter("trace.service.tracecount", { - valueType: ValueType.INT, - }), - throughTraceCount: meter.createCounter( - "trace.service.through_trace_count", - { valueType: ValueType.INT }, - ), - triggeredTraceCount: meter.createCounter( - "trace.service.triggered_trace_count", - { valueType: ValueType.INT }, - ), - tokenBucketExhaustionCount: meter.createCounter( - "trace.service.tokenbucket_exhaustion_count", - { valueType: ValueType.INT }, - ), - } -}) +export const counters = { + requestCount: meter.createCounter("trace.service.request_count", { + valueType: ValueType.INT, + }), + sampleCount: meter.createCounter("trace.service.samplecount", { + valueType: ValueType.INT, + }), + traceCount: meter.createCounter("trace.service.tracecount", { + valueType: ValueType.INT, + }), + throughTraceCount: meter.createCounter("trace.service.through_trace_count", { + valueType: ValueType.INT, + }), + triggeredTraceCount: meter.createCounter( + "trace.service.triggered_trace_count", + { valueType: ValueType.INT }, + ), + tokenBucketExhaustionCount: meter.createCounter( + "trace.service.tokenbucket_exhaustion_count", + { valueType: ValueType.INT }, + ), +} diff --git a/packages/solarwinds-apm/package.json b/packages/solarwinds-apm/package.json index 31be5e0e..ffb6ed84 100644 --- a/packages/solarwinds-apm/package.json +++ b/packages/solarwinds-apm/package.json @@ -61,7 +61,9 @@ "@grpc/grpc-js": "^1.10.6", "@opentelemetry/api-logs": "~0.52.0", "@opentelemetry/core": "~1.25.0", - "@opentelemetry/exporter-logs-otlp-grpc": "~0.52.0", + "@opentelemetry/exporter-logs-otlp-proto": "~0.52.0", + "@opentelemetry/exporter-metrics-otlp-proto": "~0.52.0", + "@opentelemetry/exporter-trace-otlp-proto": "~0.52.0", "@opentelemetry/instrumentation": "~0.52.0", "@opentelemetry/resources": "~1.25.0", "@opentelemetry/sdk-logs": "~0.52.0", diff --git a/packages/solarwinds-apm/src/config.ts b/packages/solarwinds-apm/src/config.ts index 98f736c0..9e3a867e 100644 --- a/packages/solarwinds-apm/src/config.ts +++ b/packages/solarwinds-apm/src/config.ts @@ -116,7 +116,9 @@ const transactionSettings = z.array( .transform((s) => ({ tracing: s.tracing, matcher: - "matcher" in s ? s.matcher : (ident: string) => s.regex.test(ident), + "matcher" in s + ? s.matcher.bind(s) + : (ident: string) => s.regex.test(ident), })), ) @@ -172,7 +174,7 @@ const schema = z.object({ .default({}), }) -export interface Config extends Partial> { +export interface Config extends z.input { instrumentations?: Instrumentations metrics?: Metrics } @@ -185,7 +187,7 @@ export interface ExtendedSwConfiguration extends SwConfiguration { tracesEndpoint?: string metricsEndpoint?: string logsEndpoint?: string - authorization?: string + headers: Record } dev: z.infer["dev"] @@ -247,26 +249,25 @@ export function readConfig(): tracesEndpoint: otelEnv.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT ?? otelEnv.OTEL_EXPORTER_OTLP_ENDPOINT ?? - raw.collector?.replace( - /^apm\.collector\./, - "https://otel.collector.", - ), + raw.collector + ?.replace(/^apm\.collector\./, "https://otel.collector.") + .concat("/v1/traces"), metricsEndpoint: otelEnv.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT ?? otelEnv.OTEL_EXPORTER_OTLP_ENDPOINT ?? - raw.collector?.replace( - /^apm\.collector\./, - "https://otel.collector.", - ), + raw.collector + ?.replace(/^apm\.collector\./, "https://otel.collector.") + .concat("/v1/metrics"), logsEndpoint: otelEnv.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT ?? otelEnv.OTEL_EXPORTER_OTLP_ENDPOINT ?? - raw.collector?.replace( - /^apm\.collector\./, - "https://otel.collector.", - ), - authorization: - raw.serviceKey?.token && `Bearer ${raw.serviceKey.token}`, + raw.collector + ?.replace(/^apm\.collector\./, "https://otel.collector.") + .concat("/v1/logs"), + + headers: raw.serviceKey?.token + ? { authorization: `Bearer ${raw.serviceKey.token}` } + : {}, }, } diff --git a/packages/solarwinds-apm/src/exporters/logs.ts b/packages/solarwinds-apm/src/exporters/logs.ts new file mode 100644 index 00000000..5c6b8447 --- /dev/null +++ b/packages/solarwinds-apm/src/exporters/logs.ts @@ -0,0 +1,28 @@ +/* +Copyright 2023-2024 SolarWinds Worldwide, LLC. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-proto" + +import { type ExtendedSwConfiguration } from "../config.js" + +export class LogExporter extends OTLPLogExporter { + constructor(config: ExtendedSwConfiguration) { + super({ + url: config.otlp.logsEndpoint, + headers: config.otlp.headers, + }) + } +} diff --git a/packages/solarwinds-apm/src/exporters/metrics.ts b/packages/solarwinds-apm/src/exporters/metrics.ts new file mode 100644 index 00000000..9865b17f --- /dev/null +++ b/packages/solarwinds-apm/src/exporters/metrics.ts @@ -0,0 +1,60 @@ +/* +Copyright 2023-2024 SolarWinds Worldwide, LLC. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-proto" +import { + Aggregation, + AggregationTemporality, + ExponentialHistogramAggregation, + InstrumentType, +} from "@opentelemetry/sdk-metrics" + +import { type ExtendedSwConfiguration } from "../config.js" + +export class MetricExporter extends OTLPMetricExporter { + constructor(config: ExtendedSwConfiguration) { + super({ + url: config.otlp.metricsEndpoint, + headers: config.otlp.headers, + }) + } + + override selectAggregation(instrumentType: InstrumentType): Aggregation { + switch (instrumentType) { + case InstrumentType.HISTOGRAM: { + return new ExponentialHistogramAggregation(undefined, true) + } + default: { + return Aggregation.Default() + } + } + } + + override selectAggregationTemporality( + instrumentType: InstrumentType, + ): AggregationTemporality { + switch (instrumentType) { + case InstrumentType.COUNTER: + case InstrumentType.OBSERVABLE_COUNTER: + case InstrumentType.HISTOGRAM: { + return AggregationTemporality.DELTA + } + default: { + return super.selectAggregationTemporality(instrumentType) + } + } + } +} diff --git a/packages/solarwinds-apm/src/exporters/traces.ts b/packages/solarwinds-apm/src/exporters/traces.ts new file mode 100644 index 00000000..a4bb1f12 --- /dev/null +++ b/packages/solarwinds-apm/src/exporters/traces.ts @@ -0,0 +1,28 @@ +/* +Copyright 2023-2024 SolarWinds Worldwide, LLC. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto" + +import { type ExtendedSwConfiguration } from "../config.js" + +export class TraceExporter extends OTLPTraceExporter { + constructor(config: ExtendedSwConfiguration) { + super({ + url: config.otlp.tracesEndpoint, + headers: config.otlp.headers, + }) + } +} diff --git a/packages/solarwinds-apm/src/init.ts b/packages/solarwinds-apm/src/init.ts index 73e1b926..b6a572dc 100644 --- a/packages/solarwinds-apm/src/init.ts +++ b/packages/solarwinds-apm/src/init.ts @@ -14,7 +14,6 @@ See the License for the specific language governing permissions and limitations under the License. */ -import type { Metadata } from "@grpc/grpc-js" import { diag, type DiagLogFunction, @@ -25,7 +24,6 @@ import { } from "@opentelemetry/api" import { logs } from "@opentelemetry/api-logs" import { CompositePropagator, W3CBaggagePropagator } from "@opentelemetry/core" -import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-grpc" import { type Instrumentation, registerInstrumentations, @@ -298,11 +296,8 @@ async function spanProcessors( } if (config.dev.otlpTraces) { - const { SwOtlpExporter } = await import("@solarwinds-apm/sdk/otlp-exporter") - const exporter = new SwOtlpExporter(config, { - url: config.otlp.tracesEndpoint, - metadata: await grpcMetadata(config), - }) + const { TraceExporter } = await import("./exporters/traces.js") + const exporter = new TraceExporter(config) const responseTimeProcessor = new sdk.SwResponseTimeProcessor(config) const transactionNameProcessor = new sdk.SwTransactionNameProcessor() @@ -339,13 +334,8 @@ async function metricReaders( } if (config.dev.otlpMetrics) { - const { SwOtlpMetricsExporter } = await import( - "@solarwinds-apm/sdk/otlp-metrics-exporter" - ) - const exporter = new SwOtlpMetricsExporter({ - url: config.otlp.tracesEndpoint, - metadata: await grpcMetadata(config), - }) + const { MetricExporter } = await import("./exporters/metrics.js") + const exporter = new MetricExporter(config) readers.push( new PeriodicExportingMetricReader({ exporter, @@ -360,27 +350,8 @@ async function metricReaders( async function logRecordProcessors( config: ExtendedSwConfiguration, ): Promise { - return [ - new BatchLogRecordProcessor( - new OTLPLogExporter({ - url: config.otlp.logsEndpoint, - metadata: await grpcMetadata(config), - }), - ), - ] -} - -export async function grpcMetadata( - config: ExtendedSwConfiguration, -): Promise { - if (!config.otlp.authorization) return - - const { Metadata } = await import("@grpc/grpc-js") - const metadata = new Metadata() - - metadata.set("authorization", config.otlp.authorization) - - return metadata + const { LogExporter } = await import("./exporters/logs.js") + return [new BatchLogRecordProcessor(new LogExporter(config))] } // https://github.com/boostorg/log/blob/boost-1.82.0/include/boost/log/trivial.hpp#L42-L50 diff --git a/packages/solarwinds-apm/src/sampling/grpc.ts b/packages/solarwinds-apm/src/sampling/grpc.ts index 0ca056dd..c55b9403 100644 --- a/packages/solarwinds-apm/src/sampling/grpc.ts +++ b/packages/solarwinds-apm/src/sampling/grpc.ts @@ -31,7 +31,7 @@ import { import { type SwConfiguration } from "@solarwinds-apm/sdk" import { Backoff } from "../backoff.js" -import { CoreSampler } from "./core.js" +import { Sampler } from "./sampler.js" const CLIENT_VERSION = "2" @@ -58,7 +58,7 @@ const TRIGGER_STRICT_BUCKET_RATE = "TriggerStrictBucketRate" const SIGNATURE_KEY = "SignatureKey" /** Sampler that retrieves settings from the SWO collector directly via gRPC */ -export class GrpcSampler extends CoreSampler { +export class GrpcSampler extends Sampler { readonly #key: string readonly #address: URL readonly #hostname = hostname() diff --git a/packages/solarwinds-apm/src/sampling/core.ts b/packages/solarwinds-apm/src/sampling/sampler.ts similarity index 98% rename from packages/solarwinds-apm/src/sampling/core.ts rename to packages/solarwinds-apm/src/sampling/sampler.ts index 74d467b9..07136f8d 100644 --- a/packages/solarwinds-apm/src/sampling/core.ts +++ b/packages/solarwinds-apm/src/sampling/sampler.ts @@ -44,7 +44,7 @@ import { HEADERS_STORAGE } from "../propagation/headers.js" * response headers setting. The only piece of logic left to implement * by specific sampler is remote setting retrieval. */ -export abstract class CoreSampler extends OboeSampler { +export abstract class Sampler extends OboeSampler { readonly #tracingMode: TracingMode | undefined readonly #triggerMode: boolean readonly #transactionSettings: SwConfiguration["transactionSettings"] diff --git a/packages/solarwinds-apm/test/sampling/core.test.ts b/packages/solarwinds-apm/test/sampling/sampler.test.ts similarity index 98% rename from packages/solarwinds-apm/test/sampling/core.test.ts rename to packages/solarwinds-apm/test/sampling/sampler.test.ts index f3f8bee1..5be16580 100644 --- a/packages/solarwinds-apm/test/sampling/core.test.ts +++ b/packages/solarwinds-apm/test/sampling/sampler.test.ts @@ -25,9 +25,9 @@ import { type SwConfiguration } from "@solarwinds-apm/sdk" import { describe, expect, it, otel } from "@solarwinds-apm/test" import { HEADERS_STORAGE } from "../../src/propagation/headers.js" -import { CoreSampler } from "../../src/sampling/core.js" +import { Sampler } from "../../src/sampling/sampler.js" -class TestSampler extends CoreSampler { +class TestSampler extends Sampler { constructor(config: SwConfiguration, settings: Settings) { super(config, diag) this.updateSettings(settings) @@ -70,7 +70,7 @@ const settings = (options: { } } -describe("CoreSampler", () => { +describe("Sampler", () => { it("respects enabled settings when no config or transaction settings", async () => { const sampler = new TestSampler( options({ triggerTrace: false }), diff --git a/yarn.lock b/yarn.lock index df75f66c..8e00ab1e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -481,18 +481,20 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/exporter-logs-otlp-grpc@npm:~0.52.0": +"@opentelemetry/exporter-logs-otlp-proto@npm:~0.52.0": version: 0.52.1 - resolution: "@opentelemetry/exporter-logs-otlp-grpc@npm:0.52.1" + resolution: "@opentelemetry/exporter-logs-otlp-proto@npm:0.52.1" dependencies: - "@grpc/grpc-js": "npm:^1.7.1" + "@opentelemetry/api-logs": "npm:0.52.1" "@opentelemetry/core": "npm:1.25.1" - "@opentelemetry/otlp-grpc-exporter-base": "npm:0.52.1" + "@opentelemetry/otlp-exporter-base": "npm:0.52.1" "@opentelemetry/otlp-transformer": "npm:0.52.1" + "@opentelemetry/resources": "npm:1.25.1" "@opentelemetry/sdk-logs": "npm:0.52.1" + "@opentelemetry/sdk-trace-base": "npm:1.25.1" peerDependencies: "@opentelemetry/api": ^1.0.0 - checksum: 10c0/e44abdab5e3bfad2492dcc23dc5a7c2a61861b29ad96593025942bb4d350f7148efcece134c504ed657dc3ddc28d8359df6d6ccec4d7131c3b87a32f4cb63432 + checksum: 10c0/5d4eadf8d6da977360525f23476a11b6c23e5da92e67ff63e193e27b355fc4089f2e6fdccd3388be693698b8453652f0aca55bccd2acbe1669f690d110e9a667 languageName: node linkType: hard @@ -529,6 +531,22 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/exporter-metrics-otlp-proto@npm:~0.52.0": + version: 0.52.1 + resolution: "@opentelemetry/exporter-metrics-otlp-proto@npm:0.52.1" + dependencies: + "@opentelemetry/core": "npm:1.25.1" + "@opentelemetry/exporter-metrics-otlp-http": "npm:0.52.1" + "@opentelemetry/otlp-exporter-base": "npm:0.52.1" + "@opentelemetry/otlp-transformer": "npm:0.52.1" + "@opentelemetry/resources": "npm:1.25.1" + "@opentelemetry/sdk-metrics": "npm:1.25.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10c0/782e9ada8a8c0429861a9095b1c0ff80b95f4686e3a6343b750b4773fb8392022b878e070cfcb6cd58f1fc04e3de54a6c4b0143c35d0adf5009d82f3ce245eac + languageName: node + linkType: hard + "@opentelemetry/exporter-trace-otlp-grpc@npm:~0.52.0": version: 0.52.1 resolution: "@opentelemetry/exporter-trace-otlp-grpc@npm:0.52.1" @@ -545,6 +563,21 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/exporter-trace-otlp-proto@npm:~0.52.0": + version: 0.52.1 + resolution: "@opentelemetry/exporter-trace-otlp-proto@npm:0.52.1" + dependencies: + "@opentelemetry/core": "npm:1.25.1" + "@opentelemetry/otlp-exporter-base": "npm:0.52.1" + "@opentelemetry/otlp-transformer": "npm:0.52.1" + "@opentelemetry/resources": "npm:1.25.1" + "@opentelemetry/sdk-trace-base": "npm:1.25.1" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 10c0/7106f707404a36acb028ea98420d819267908db10aa82f6128f64dfaab905ee4d14b5f0fcc879ea66e74248650cec3c07599b1fa21cac844c2d2a33f106a4848 + languageName: node + linkType: hard + "@opentelemetry/instrumentation-amqplib@npm:^0.41.0": version: 0.41.0 resolution: "@opentelemetry/instrumentation-amqplib@npm:0.41.0" @@ -1941,7 +1974,6 @@ __metadata: "@opentelemetry/sdk-metrics": "npm:~1.25.0" "@opentelemetry/sdk-trace-base": "npm:~1.25.0" "@solarwinds-apm/eslint-config": "workspace:^" - "@solarwinds-apm/lazy": "workspace:^" "@solarwinds-apm/rollup-config": "workspace:^" "@solarwinds-apm/test": "workspace:^" "@types/node": "npm:^16.13.0" @@ -7796,7 +7828,9 @@ __metadata: "@opentelemetry/api": "npm:^1.3.0" "@opentelemetry/api-logs": "npm:~0.52.0" "@opentelemetry/core": "npm:~1.25.0" - "@opentelemetry/exporter-logs-otlp-grpc": "npm:~0.52.0" + "@opentelemetry/exporter-logs-otlp-proto": "npm:~0.52.0" + "@opentelemetry/exporter-metrics-otlp-proto": "npm:~0.52.0" + "@opentelemetry/exporter-trace-otlp-proto": "npm:~0.52.0" "@opentelemetry/instrumentation": "npm:~0.52.0" "@opentelemetry/resources": "npm:~1.25.0" "@opentelemetry/sdk-logs": "npm:~0.52.0" From 000792d4e63dfaf26def5a0df20e40be71c400ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Th=C3=A9riault?= Date: Tue, 13 Aug 2024 13:47:34 -0400 Subject: [PATCH 2/4] fix endpoints logic for http --- packages/solarwinds-apm/src/config.ts | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/solarwinds-apm/src/config.ts b/packages/solarwinds-apm/src/config.ts index 9e3a867e..6c8be2fe 100644 --- a/packages/solarwinds-apm/src/config.ts +++ b/packages/solarwinds-apm/src/config.ts @@ -31,6 +31,12 @@ import { z, ZodError, ZodIssueCode } from "zod" import aoCert from "./appoptics.crt.js" +const ENDPOINTS = { + traces: "/v1/traces", + metrics: "/v1/metrics", + logs: "/v1/logs", +} + const boolean = z.union([ z.boolean(), z @@ -248,22 +254,22 @@ export function readConfig(): otlp: { tracesEndpoint: otelEnv.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT ?? - otelEnv.OTEL_EXPORTER_OTLP_ENDPOINT ?? + otelEnv.OTEL_EXPORTER_OTLP_ENDPOINT?.concat(ENDPOINTS.traces) ?? raw.collector ?.replace(/^apm\.collector\./, "https://otel.collector.") - .concat("/v1/traces"), + .concat(ENDPOINTS.traces), metricsEndpoint: otelEnv.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT ?? - otelEnv.OTEL_EXPORTER_OTLP_ENDPOINT ?? + otelEnv.OTEL_EXPORTER_OTLP_ENDPOINT?.concat(ENDPOINTS.metrics) ?? raw.collector ?.replace(/^apm\.collector\./, "https://otel.collector.") - .concat("/v1/metrics"), + .concat(ENDPOINTS.metrics), logsEndpoint: otelEnv.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT ?? - otelEnv.OTEL_EXPORTER_OTLP_ENDPOINT ?? + otelEnv.OTEL_EXPORTER_OTLP_ENDPOINT?.concat(ENDPOINTS.logs) ?? raw.collector ?.replace(/^apm\.collector\./, "https://otel.collector.") - .concat("/v1/logs"), + .concat(ENDPOINTS.logs), headers: raw.serviceKey?.token ? { authorization: `Bearer ${raw.serviceKey.token}` } From 4d67b161e85bbb91d46bf1ef783b0e0567921ed4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Th=C3=A9riault?= Date: Tue, 13 Aug 2024 13:48:22 -0400 Subject: [PATCH 3/4] fix config tests --- packages/solarwinds-apm/test/config.test.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/solarwinds-apm/test/config.test.ts b/packages/solarwinds-apm/test/config.test.ts index 245a4563..6ced7b13 100644 --- a/packages/solarwinds-apm/test/config.test.ts +++ b/packages/solarwinds-apm/test/config.test.ts @@ -51,7 +51,7 @@ describe("readConfig", () => { tracesEndpoint: undefined, metricsEndpoint: undefined, logsEndpoint: undefined, - authorization: "Bearer token", + headers: { authorization: "Bearer token" }, }, dev: { otlpTraces: false, @@ -72,9 +72,11 @@ describe("readConfig", () => { const config = await readConfig() expect(config.otlp).to.include({ - tracesEndpoint: "https://otel.collector.na-01.cloud.solarwinds.com", - metricsEndpoint: "https://otel.collector.na-01.cloud.solarwinds.com", - logsEndpoint: "https://otel.collector.na-01.cloud.solarwinds.com", + tracesEndpoint: + "https://otel.collector.na-01.cloud.solarwinds.com/v1/traces", + metricsEndpoint: + "https://otel.collector.na-01.cloud.solarwinds.com/v1/metrics", + logsEndpoint: "https://otel.collector.na-01.cloud.solarwinds.com/v1/logs", }) }) From 4fbedf822832e644f91d98e015e92bb6aad033bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Th=C3=A9riault?= Date: Tue, 13 Aug 2024 16:19:27 -0400 Subject: [PATCH 4/4] mark version bumps --- .yarn/versions/9578c31f.yml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .yarn/versions/9578c31f.yml diff --git a/.yarn/versions/9578c31f.yml b/.yarn/versions/9578c31f.yml new file mode 100644 index 00000000..63d95b28 --- /dev/null +++ b/.yarn/versions/9578c31f.yml @@ -0,0 +1,3 @@ +releases: + "@solarwinds-apm/sampling": patch + solarwinds-apm: minor