[OTLP] Limit response body size read by exporters#7017
[OTLP] Limit response body size read by exporters#7017martincostello merged 9 commits intoopen-telemetry:mainfrom
Conversation
Limit the length of the HTTP response body that is read if export fails for gRPC or HTTP. See open-telemetry/opentelemetry-proto#781.
Add PR number.
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #7017 +/- ##
==========================================
- Coverage 88.87% 88.78% -0.09%
==========================================
Files 263 263
Lines 12424 12451 +27
==========================================
+ Hits 11042 11055 +13
- Misses 1382 1396 +14
Flags with carried forward coverage won't be shown. Click here to find out more.
|
There was a problem hiding this comment.
Pull request overview
Limits the amount of HTTP response body read (for error logging) when OTLP export fails, aligning exporter behavior with updated OTLP guidance.
Changes:
- Add size-capped response-body reading helper (
TryGetResponseBody) and unit tests for truncation/edge cases. - Avoid reading the response body unless EventSource error logging is enabled (HTTP and gRPC exporters).
- Update exporter changelog to document the behavioral change.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExportClientTests.cs | Adds tests validating TryGetResponseBody behavior, including truncation and exception handling. |
| src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpHttpExportClient.cs | Gates response-body reading on EventSource being enabled to avoid unnecessary work. |
| src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcExportClient.cs | Same gating for gRPC; minor refactor to expression-bodied helper. |
| src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpExportClient.cs | Implements capped response-body reading and refactors SendHttpRequest to expression-bodied form. |
| src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md | Documents the new response-body read limiting behavior. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExportClientTests.cs
Show resolved
Hide resolved
...OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpExportClient.cs
Outdated
Show resolved
Hide resolved
...OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpExportClient.cs
Outdated
Show resolved
Hide resolved
...OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpExportClient.cs
Outdated
Show resolved
Hide resolved
test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExportClientTests.cs
Show resolved
Hide resolved
Fix test method name.
- Eagerly read until no more data or limit reached. - Read bytes and convert to string respecting encoding. - Avoid reading content if `CancellationToken` is signalled.
Update limit from 32KiB to 4MiB.
When targeting .NET, rent a buffer rather than allocate.
Add a test that verifies the behaviour if the content is compressed.
...OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpExportClient.cs
Outdated
Show resolved
Hide resolved
Move `ArrayPool<T>.Return(...)` call into `finally`.
...OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpExportClient.cs
Show resolved
Hide resolved
Add a suffix of `[TRUNCATED]` if the response body is truncated.
|
I'll merge this once open-telemetry/opentelemetry-proto#781 is merged, just in case there's any last-minute changes. |
|
The documentation change hasn't been merged yet, but both Go and Kotlin have merged the equivalent PRs, so I think we're good to merge this. |
Updated [OpenTelemetry.Exporter.Console](https://github.com/open-telemetry/opentelemetry-dotnet) from 1.15.1 to 1.15.2. <details> <summary>Release notes</summary> _Sourced from [OpenTelemetry.Exporter.Console's releases](https://github.com/open-telemetry/opentelemetry-dotnet/releases)._ ## 1.15.2 For highlights and announcements pertaining to this release see: [Release Notes > 1.15.2](https://github.com/open-telemetry/opentelemetry-dotnet/blob/main/RELEASENOTES.md#1152). The following changes are from the previous release [1.15.1](https://github.com/open-telemetry/opentelemetry-dotnet/releases/tag/core-1.15.1). * NuGet: [OpenTelemetry v1.15.2](https://www.nuget.org/packages/OpenTelemetry/1.15.2) * Added Task-based worker support for `BatchExportProcessor` and `PeriodicExportingMetricReader` to enable OpenTelemetry to work in single-threaded WebAssembly environments such as Blazor and Uno Platform. The implementation automatically detects the WebAssembly runtime and switches to Task-based workers accordingly; the Thread-based approach remains the default on all other platforms. ([#6379](open-telemetry/opentelemetry-dotnet#6379)) See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.15.2/src/OpenTelemetry/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Api v1.15.2](https://www.nuget.org/packages/OpenTelemetry.Api/1.15.2) No notable changes. See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.15.2/src/OpenTelemetry.Api/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Api.ProviderBuilderExtensions v1.15.2](https://www.nuget.org/packages/OpenTelemetry.Api.ProviderBuilderExtensions/1.15.2) No notable changes. See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.15.2/src/OpenTelemetry.Api.ProviderBuilderExtensions/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Exporter.Console v1.15.2](https://www.nuget.org/packages/OpenTelemetry.Exporter.Console/1.15.2) No notable changes. See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.15.2/src/OpenTelemetry.Exporter.Console/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Exporter.InMemory v1.15.2](https://www.nuget.org/packages/OpenTelemetry.Exporter.InMemory/1.15.2) No notable changes. See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.15.2/src/OpenTelemetry.Exporter.InMemory/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Exporter.OpenTelemetryProtocol v1.15.2](https://www.nuget.org/packages/OpenTelemetry.Exporter.OpenTelemetryProtocol/1.15.2) * Limit how much of the response body is read when export fails and error logging is enabled. ([#7017](open-telemetry/opentelemetry-dotnet#7017)) See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.15.2/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Exporter.Zipkin v1.15.2](https://www.nuget.org/packages/OpenTelemetry.Exporter.Zipkin/1.15.2) ... (truncated) ## 1.15.2-beta.1 The following changes are from the previous release [1.15.1-beta.1](https://github.com/open-telemetry/opentelemetry-dotnet/releases/tag/coreunstable-1.15.1-beta.1). * NuGet: [OpenTelemetry.Exporter.Prometheus.AspNetCore v1.15.2-beta.1](https://www.nuget.org/packages/OpenTelemetry.Exporter.Prometheus.AspNetCore/1.15.2-beta.1) * Updated OpenTelemetry core component version(s) to `1.15.2`. ([#7049](open-telemetry/opentelemetry-dotnet#7049)) See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/coreunstable-1.15.2-beta.1/src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Exporter.Prometheus.HttpListener v1.15.2-beta.1](https://www.nuget.org/packages/OpenTelemetry.Exporter.Prometheus.HttpListener/1.15.2-beta.1) * Updated OpenTelemetry core component version(s) to `1.15.2`. ([#7049](open-telemetry/opentelemetry-dotnet#7049)) See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/coreunstable-1.15.2-beta.1/src/OpenTelemetry.Exporter.Prometheus.HttpListener/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Shims.OpenTracing v1.15.2-beta.1](https://www.nuget.org/packages/OpenTelemetry.Shims.OpenTracing/1.15.2-beta.1) * Updated OpenTelemetry core component version(s) to `1.15.2`. ([#7049](open-telemetry/opentelemetry-dotnet#7049)) See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/coreunstable-1.15.2-beta.1/src/OpenTelemetry.Shims.OpenTracing/CHANGELOG.md) for details. Commits viewable in [compare view](open-telemetry/opentelemetry-dotnet@core-1.15.1...core-1.15.2). </details> Updated [OpenTelemetry.Exporter.OpenTelemetryProtocol](https://github.com/open-telemetry/opentelemetry-dotnet) from 1.15.1 to 1.15.2. <details> <summary>Release notes</summary> _Sourced from [OpenTelemetry.Exporter.OpenTelemetryProtocol's releases](https://github.com/open-telemetry/opentelemetry-dotnet/releases)._ ## 1.15.2 For highlights and announcements pertaining to this release see: [Release Notes > 1.15.2](https://github.com/open-telemetry/opentelemetry-dotnet/blob/main/RELEASENOTES.md#1152). The following changes are from the previous release [1.15.1](https://github.com/open-telemetry/opentelemetry-dotnet/releases/tag/core-1.15.1). * NuGet: [OpenTelemetry v1.15.2](https://www.nuget.org/packages/OpenTelemetry/1.15.2) * Added Task-based worker support for `BatchExportProcessor` and `PeriodicExportingMetricReader` to enable OpenTelemetry to work in single-threaded WebAssembly environments such as Blazor and Uno Platform. The implementation automatically detects the WebAssembly runtime and switches to Task-based workers accordingly; the Thread-based approach remains the default on all other platforms. ([#6379](open-telemetry/opentelemetry-dotnet#6379)) See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.15.2/src/OpenTelemetry/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Api v1.15.2](https://www.nuget.org/packages/OpenTelemetry.Api/1.15.2) No notable changes. See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.15.2/src/OpenTelemetry.Api/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Api.ProviderBuilderExtensions v1.15.2](https://www.nuget.org/packages/OpenTelemetry.Api.ProviderBuilderExtensions/1.15.2) No notable changes. See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.15.2/src/OpenTelemetry.Api.ProviderBuilderExtensions/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Exporter.Console v1.15.2](https://www.nuget.org/packages/OpenTelemetry.Exporter.Console/1.15.2) No notable changes. See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.15.2/src/OpenTelemetry.Exporter.Console/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Exporter.InMemory v1.15.2](https://www.nuget.org/packages/OpenTelemetry.Exporter.InMemory/1.15.2) No notable changes. See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.15.2/src/OpenTelemetry.Exporter.InMemory/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Exporter.OpenTelemetryProtocol v1.15.2](https://www.nuget.org/packages/OpenTelemetry.Exporter.OpenTelemetryProtocol/1.15.2) * Limit how much of the response body is read when export fails and error logging is enabled. ([#7017](open-telemetry/opentelemetry-dotnet#7017)) See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.15.2/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Exporter.Zipkin v1.15.2](https://www.nuget.org/packages/OpenTelemetry.Exporter.Zipkin/1.15.2) ... (truncated) ## 1.15.2-beta.1 The following changes are from the previous release [1.15.1-beta.1](https://github.com/open-telemetry/opentelemetry-dotnet/releases/tag/coreunstable-1.15.1-beta.1). * NuGet: [OpenTelemetry.Exporter.Prometheus.AspNetCore v1.15.2-beta.1](https://www.nuget.org/packages/OpenTelemetry.Exporter.Prometheus.AspNetCore/1.15.2-beta.1) * Updated OpenTelemetry core component version(s) to `1.15.2`. ([#7049](open-telemetry/opentelemetry-dotnet#7049)) See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/coreunstable-1.15.2-beta.1/src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Exporter.Prometheus.HttpListener v1.15.2-beta.1](https://www.nuget.org/packages/OpenTelemetry.Exporter.Prometheus.HttpListener/1.15.2-beta.1) * Updated OpenTelemetry core component version(s) to `1.15.2`. ([#7049](open-telemetry/opentelemetry-dotnet#7049)) See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/coreunstable-1.15.2-beta.1/src/OpenTelemetry.Exporter.Prometheus.HttpListener/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Shims.OpenTracing v1.15.2-beta.1](https://www.nuget.org/packages/OpenTelemetry.Shims.OpenTracing/1.15.2-beta.1) * Updated OpenTelemetry core component version(s) to `1.15.2`. ([#7049](open-telemetry/opentelemetry-dotnet#7049)) See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/coreunstable-1.15.2-beta.1/src/OpenTelemetry.Shims.OpenTracing/CHANGELOG.md) for details. Commits viewable in [compare view](open-telemetry/opentelemetry-dotnet@core-1.15.1...core-1.15.2). </details> Updated [OpenTelemetry.Extensions.Hosting](https://github.com/open-telemetry/opentelemetry-dotnet) from 1.15.1 to 1.15.2. <details> <summary>Release notes</summary> _Sourced from [OpenTelemetry.Extensions.Hosting's releases](https://github.com/open-telemetry/opentelemetry-dotnet/releases)._ ## 1.15.2 For highlights and announcements pertaining to this release see: [Release Notes > 1.15.2](https://github.com/open-telemetry/opentelemetry-dotnet/blob/main/RELEASENOTES.md#1152). The following changes are from the previous release [1.15.1](https://github.com/open-telemetry/opentelemetry-dotnet/releases/tag/core-1.15.1). * NuGet: [OpenTelemetry v1.15.2](https://www.nuget.org/packages/OpenTelemetry/1.15.2) * Added Task-based worker support for `BatchExportProcessor` and `PeriodicExportingMetricReader` to enable OpenTelemetry to work in single-threaded WebAssembly environments such as Blazor and Uno Platform. The implementation automatically detects the WebAssembly runtime and switches to Task-based workers accordingly; the Thread-based approach remains the default on all other platforms. ([#6379](open-telemetry/opentelemetry-dotnet#6379)) See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.15.2/src/OpenTelemetry/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Api v1.15.2](https://www.nuget.org/packages/OpenTelemetry.Api/1.15.2) No notable changes. See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.15.2/src/OpenTelemetry.Api/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Api.ProviderBuilderExtensions v1.15.2](https://www.nuget.org/packages/OpenTelemetry.Api.ProviderBuilderExtensions/1.15.2) No notable changes. See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.15.2/src/OpenTelemetry.Api.ProviderBuilderExtensions/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Exporter.Console v1.15.2](https://www.nuget.org/packages/OpenTelemetry.Exporter.Console/1.15.2) No notable changes. See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.15.2/src/OpenTelemetry.Exporter.Console/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Exporter.InMemory v1.15.2](https://www.nuget.org/packages/OpenTelemetry.Exporter.InMemory/1.15.2) No notable changes. See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.15.2/src/OpenTelemetry.Exporter.InMemory/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Exporter.OpenTelemetryProtocol v1.15.2](https://www.nuget.org/packages/OpenTelemetry.Exporter.OpenTelemetryProtocol/1.15.2) * Limit how much of the response body is read when export fails and error logging is enabled. ([#7017](open-telemetry/opentelemetry-dotnet#7017)) See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/core-1.15.2/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Exporter.Zipkin v1.15.2](https://www.nuget.org/packages/OpenTelemetry.Exporter.Zipkin/1.15.2) ... (truncated) ## 1.15.2-beta.1 The following changes are from the previous release [1.15.1-beta.1](https://github.com/open-telemetry/opentelemetry-dotnet/releases/tag/coreunstable-1.15.1-beta.1). * NuGet: [OpenTelemetry.Exporter.Prometheus.AspNetCore v1.15.2-beta.1](https://www.nuget.org/packages/OpenTelemetry.Exporter.Prometheus.AspNetCore/1.15.2-beta.1) * Updated OpenTelemetry core component version(s) to `1.15.2`. ([#7049](open-telemetry/opentelemetry-dotnet#7049)) See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/coreunstable-1.15.2-beta.1/src/OpenTelemetry.Exporter.Prometheus.AspNetCore/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Exporter.Prometheus.HttpListener v1.15.2-beta.1](https://www.nuget.org/packages/OpenTelemetry.Exporter.Prometheus.HttpListener/1.15.2-beta.1) * Updated OpenTelemetry core component version(s) to `1.15.2`. ([#7049](open-telemetry/opentelemetry-dotnet#7049)) See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/coreunstable-1.15.2-beta.1/src/OpenTelemetry.Exporter.Prometheus.HttpListener/CHANGELOG.md) for details. * NuGet: [OpenTelemetry.Shims.OpenTracing v1.15.2-beta.1](https://www.nuget.org/packages/OpenTelemetry.Shims.OpenTracing/1.15.2-beta.1) * Updated OpenTelemetry core component version(s) to `1.15.2`. ([#7049](open-telemetry/opentelemetry-dotnet#7049)) See [CHANGELOG](https://github.com/open-telemetry/opentelemetry-dotnet/blob/coreunstable-1.15.2-beta.1/src/OpenTelemetry.Shims.OpenTracing/CHANGELOG.md) for details. Commits viewable in [compare view](open-telemetry/opentelemetry-dotnet@core-1.15.1...core-1.15.2). </details> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <dependabot[bot]@users.noreply.github.com>
See open-telemetry/opentelemetry-proto#781.
Changes
Limit the length of the HTTP response body that is read if export fails for gRPC or HTTP.
Merge requirement checklist
CHANGELOG.mdfiles updated for non-trivial changesChanges in public API reviewed (if applicable)