From 92d8647962b7155721c8e6bc8cdaa2b1bfc9a77d Mon Sep 17 00:00:00 2001 From: Aksel Allas Date: Tue, 1 Oct 2024 16:08:45 +0300 Subject: [PATCH] feat(add-option-to-disable-instrumentation-http-metrics --- experimental/CHANGELOG.md | 1 + .../README.md | 1 + .../src/http.ts | 6 +- .../src/types.ts | 2 + .../functionals/http-metrics-disabled.test.ts | 78 +++++++++++++++++++ 5 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 experimental/packages/opentelemetry-instrumentation-http/test/functionals/http-metrics-disabled.test.ts diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 04ea9a97b3a..a158b0a8e31 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -14,6 +14,7 @@ All notable changes to experimental packages in this project will be documented * Applies to both client and server spans * Generate spans compliant with Semantic Conventions 1.27+ when `OTEL_SEMCONV_STABILITY_OPT_IN` contains `http` or `http/dup` * Generate spans backwards compatible with previous attributes when `OTEL_SEMCONV_STABILITY_OPT_IN` contains `http/dup` or DOES NOT contain `http` +* feat(add-option-to-disable-instrumentation-http-metrics): Add option to disable instrumentation-http metrics such as incoming/outgoing HTTP request duration [#4409](https://github.com/open-telemetry/opentelemetry-js/pull/5029) @AkselAllas ### :bug: (Bug Fix) diff --git a/experimental/packages/opentelemetry-instrumentation-http/README.md b/experimental/packages/opentelemetry-instrumentation-http/README.md index 456d5b34738..e934f082591 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/README.md +++ b/experimental/packages/opentelemetry-instrumentation-http/README.md @@ -63,6 +63,7 @@ Http instrumentation has few options available to choose from. You can set the f | `ignoreOutgoingRequestHook` | `IgnoreOutgoingRequestFunction` | Http instrumentation will not trace all outgoing requests that matched with custom function | | `disableOutgoingRequestInstrumentation` | `boolean` | Set to true to avoid instrumenting outgoing requests at all. This can be helpful when another instrumentation handles outgoing requests. | | `disableIncomingRequestInstrumentation` | `boolean` | Set to true to avoid instrumenting incoming requests at all. This can be helpful when another instrumentation handles incoming requests. | +| `disableMetrics` | `boolean` | Set to true in order to disable instrumentation-http from emitting any metrics such as duration of inbound/outbound HTTP requests. | | [`serverName`](https://github.com/open-telemetry/opentelemetry-js/blob/main/experimental/packages/opentelemetry-instrumentation-http/src/types.ts#L101) | `string` | The primary server name of the matched virtual host. | | [`requireParentforOutgoingSpans`](https://github.com/open-telemetry/opentelemetry-js/blob/main/experimental/packages/opentelemetry-instrumentation-http/src/types.ts#L103) | Boolean | Require that is a parent span to create new span for outgoing requests. | | [`requireParentforIncomingSpans`](https://github.com/open-telemetry/opentelemetry-js/blob/main/experimental/packages/opentelemetry-instrumentation-http/src/types.ts#L105) | Boolean | Require that is a parent span to create new span for incoming requests. | diff --git a/experimental/packages/opentelemetry-instrumentation-http/src/http.ts b/experimental/packages/opentelemetry-instrumentation-http/src/http.ts index 456b8d08e0c..b2af51ff8ed 100644 --- a/experimental/packages/opentelemetry-instrumentation-http/src/http.ts +++ b/experimental/packages/opentelemetry-instrumentation-http/src/http.ts @@ -88,6 +88,7 @@ export class HttpInstrumentation extends InstrumentationBase = new WeakSet(); private _headerCapture; + private _disableMetrics: boolean; private _httpServerDurationHistogram!: Histogram; private _httpClientDurationHistogram!: Histogram; @@ -96,6 +97,7 @@ export class HttpInstrumentation extends InstrumentationBase { + beforeEach(() => { + metricsMemoryExporter.reset(); + }); + + before(() => { + instrumentation.enable(); + server = http.createServer((request, response) => { + response.end('Test Server Response'); + }); + server.listen(serverPort); + }); + + after(() => { + server.close(); + instrumentation.disable(); + }); + + it('should not create server/client duration metrics', async () => { + const requestCount = 3; + for (let i = 0; i < requestCount; i++) { + await httpRequest.get( + `${protocol}://${hostname}:${serverPort}${pathname}` + ); + } + await metricReader.collectAndExport(); + const resourceMetrics = metricsMemoryExporter.getMetrics(); + const scopeMetrics = resourceMetrics[0].scopeMetrics; + assert.strictEqual(scopeMetrics.length, 0, 'scopeMetrics count'); + }); +});