grafana/k6 · error

invalid header %q, expected format key=value

Error message

invalid header %q, expected format key=value

What it means

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.

Source

Thrown at internal/output/opentelemetry/exporter.go:114

	}

	if len(headers) > 0 {
		opt = append(opt, otlpmetricgrpc.WithHeaders(headers))
	}

	if tlsConfig != nil {
		opt = append(opt, otlpmetricgrpc.WithTLSCredentials(credentials.NewTLS(tlsConfig)))
	}

	return otlpmetricgrpc.New(ctx, opt...)
}

func parseHeaders(raw string) (map[string]string, error) {
	headers := make(map[string]string)
	for header := range strings.SplitSeq(raw, ",") {
		rawKey, rawValue, ok := strings.Cut(header, "=")
		if !ok {
			return nil, fmt.Errorf("invalid header %q, expected format key=value", header)
		}

		key, err := url.PathUnescape(rawKey)
		if err != nil {
			return nil, fmt.Errorf("failed to unescape header key %q: %w", rawKey, err)
		}

		value, err := url.PathUnescape(rawValue)
		if err != nil {
			return nil, fmt.Errorf("failed to unescape header value %q: %w", rawValue, err)
		}

		headers[key] = value
	}

	return headers, nil
}

View on GitHub (pinned to 01ffac6f24)

Solutions

  1. Include the '=' in every header entry, e.g. Authorization=Bearer token
  2. Remove stray commas that create empty entries
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at internal/output/opentelemetry/exporter.go:114 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of grafana/k6@01ffac6f24 (2026-08-18). Data as JSON: /api/errors/df9c2ad3ab5a57ae. Report an issue: GitHub.