Skip to content

[bug] Header value in OtlpExporterOptions.Headers can not contain comma #6510

@tobias-tengler

Description

@tobias-tengler

Package

OpenTelemetry

Package Version

Package Name Version
OpenTelemetry.Api 1.12.0
OpenTelemetry 1.12.0

Runtime Version

net9.0

Description

A comma is a valid character in a HTTP header value, but the OtlpExporterOptions.Headers string also uses commas as delimiters and the current parser interprets the comma in the value as a delimiter, which consequently leads to an exception since the next (assumed) header pair doesn't have a = delimiter for header key and value.

public static THeaders GetHeaders<THeaders>(this OtlpExporterOptions options, Action<THeaders, string, string> addHeader)

Steps to Reproduce

Assign a header with a value that contains a comma to OtlpExporterOptions.Headers:

services
  .AddOpenTelemetry()
  .WithLogging(x =>
      x.AddOtlpExporter(
         "name",
          o =>
          {
              o.Headers = "VL-Stream-Fields=service.name,service.environment";
          }
      )
  );

Expected Result

The header should be properly parsed.

Actual Result

System.ArgumentException: Headers provided in an invalid format.
   at OpenTelemetry.Exporter.OtlpExporterOptionsExtensions.GetHeaders[THeaders](OtlpExporterOptions options, Action`3 addHeader)
   at OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.ExportClient.OtlpExportClient..ctor(OtlpExporterOptions options, HttpClient httpClient, String signalPath)
   at OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.ExportClient.OtlpHttpExportClient..ctor(OtlpExporterOptions options, HttpClient httpClient, String signalPath)
   at OpenTelemetry.Exporter.OtlpExporterOptionsExtensions.GetExportClient(OtlpExporterOptions options, OtlpSignalType otlpSignalType)
   at OpenTelemetry.Exporter.OtlpExporterOptionsExtensions.GetExportTransmissionHandler(OtlpExporterOptions options, ExperimentalOptions experimentalOptions, OtlpSignalType otlpSignalType)
   at OpenTelemetry.Exporter.OtlpLogExporter..ctor(OtlpExporterOptions exporterOptions, SdkLimitOptions sdkLimitOptions, ExperimentalOptions experimentalOptions, OtlpExporterTransmissionHandler transmissionHandler)
   at OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.BuildOtlpLogExporter(IServiceProvider serviceProvider, OtlpExporterOptions exporterOptions, LogRecordExportProcessorOptions processorOptions, SdkLimitOptions sdkLimitOptions, ExperimentalOptions experimentalOptions, Boolean skipUseOtlpExporterRegistrationCheck, Func`2 configureExporterInstance)
   at OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.<>c__DisplayClass8_0.<AddOtlpExporter>b__1(IServiceProvider sp)
   at OpenTelemetry.Logs.LoggerProviderBuilderExtensions.<>c__DisplayClass4_0.<AddProcessor>b__0(IServiceProvider sp, LoggerProviderBuilder builder)
   at OpenTelemetry.Logs.OpenTelemetryDependencyInjectionLoggingServiceCollectionExtensions.ConfigureLoggerProviderBuilderCallbackWrapper.ConfigureBuilder(IServiceProvider serviceProvider, LoggerProviderBuilder loggerProviderBuilder)
   at OpenTelemetry.Logs.LoggerProviderSdk..ctor(IServiceProvider serviceProvider, Boolean ownsServiceProvider)
   at OpenTelemetry.Logs.LoggerProviderBuilderBase.<>c.<.ctor>b__3_0(IServiceProvider sp)

Additional Context

No response

Tip

React with 👍 to help prioritize this issue. Please use comments to provide useful context, avoiding +1 or me too, to help us triage it. Learn more here.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingneeds-triageNew issues which have not been classified or triaged by a community memberpkg:OpenTelemetryIssues related to OpenTelemetry NuGet package

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions