{"record":{"id":"df9c2ad3ab5a57ae","repo":"grafana/k6","slug":"invalid-header-q-expected-format-key-value","errorCode":null,"errorMessage":"invalid header %q, expected format key=value","messagePattern":"invalid header %q, expected format key=value","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/output/opentelemetry/exporter.go","lineNumber":114,"sourceCode":"\t}\n\n\tif len(headers) > 0 {\n\t\topt = append(opt, otlpmetricgrpc.WithHeaders(headers))\n\t}\n\n\tif tlsConfig != nil {\n\t\topt = append(opt, otlpmetricgrpc.WithTLSCredentials(credentials.NewTLS(tlsConfig)))\n\t}\n\n\treturn otlpmetricgrpc.New(ctx, opt...)\n}\n\nfunc parseHeaders(raw string) (map[string]string, error) {\n\theaders := make(map[string]string)\n\tfor header := range strings.SplitSeq(raw, \",\") {\n\t\trawKey, rawValue, ok := strings.Cut(header, \"=\")\n\t\tif !ok {\n\t\t\treturn nil, fmt.Errorf(\"invalid header %q, expected format key=value\", header)\n\t\t}\n\n\t\tkey, err := url.PathUnescape(rawKey)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to unescape header key %q: %w\", rawKey, err)\n\t\t}\n\n\t\tvalue, err := url.PathUnescape(rawValue)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to unescape header value %q: %w\", rawValue, err)\n\t\t}\n\n\t\theaders[key] = value\n\t}\n\n\treturn headers, nil\n}\n","sourceCodeStart":96,"sourceCodeEnd":132,"githubUrl":"https://github.com/grafana/k6/blob/01ffac6f245854c1b8adc6a69857c76a15f90022/internal/output/opentelemetry/exporter.go#L96-L132","documentation":"parseHeaders in the OpenTelemetry output splits the exporter header config value on commas and requires every entry to contain '='. This error fires when a header fragment has no '=' separator, meaning the header list was malformed (e.g. a missing value or a stray comma), so the exporter cannot start.","triggerScenarios":"Thrown at internal/output/opentelemetry/exporter.go:114 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Include the '=' in every header entry, e.g. Authorization=Bearer token","Remove stray commas that create empty entries"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"01ffac6f245854c1b8adc6a69857c76a15f90022","analyzedAt":"2026-08-18T03:05:52.393Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}