jaegertracing/jaeger · error

failed to export traces: %w

Error message

failed to export traces: %w

What it means

TraceWriter.WriteTraces wraps any error from the gRPC Export RPC with this message. It means the batch of traces could not be exported to the remote storage service — the write failed at transport, server-side, or serialization level.

Source

Thrown at internal/storage/v2/grpc/tracewriter.go:37

type TraceWriter struct {
	client ptraceotlp.GRPCClient
}

// NewTraceWriter creates a TraceWriter that exports traces to a remote gRPC storage server.
//
// The provided gRPC connection is used exclusively for sending trace data to the backend.
// To prevent recursive trace generation, this connection should not have instrumentation enabled.
func NewTraceWriter(conn *grpc.ClientConn) *TraceWriter {
	return &TraceWriter{
		client: ptraceotlp.NewGRPCClient(conn),
	}
}

func (tw *TraceWriter) WriteTraces(ctx context.Context, td ptrace.Traces) error {
	req := ptraceotlp.NewExportRequestFromTraces(td)
	_, err := tw.client.Export(ctx, req)
	if err != nil {
		return fmt.Errorf("failed to export traces: %w", err)
	}
	return nil
}

View on GitHub (pinned to 806f444784)

Solutions

  1. Check the wrapped error's gRPC status for the root cause
  2. Reduce batch size or raise max send message size if ResourceExhausted
  3. Retry with backoff on codes.Unavailable; consider a queueing/buffering writer upstream
  4. Verify server health, auth, and TLS configuration

Example fix

// before
err := writer.WriteTraces(ctx, hugeBatch) // ResourceExhausted
// after
for _, chunk := range splitTraces(td, 1000) {
    if err := writer.WriteTraces(ctx, chunk); err != nil { return err }
}
Defensive patterns

Strategy: retry

Validate before calling

if td.SpanCount() == 0 { return nil }
if size := approximateSize(td); size > maxGRPCMessageSize { return errors.New("batch too large; split") }

Try / catch

err := writer.WriteTraces(ctx, td)
if err != nil {
    if status.Code(err) == codes.Unavailable {
        // retry with exponential backoff
    }
    return fmt.Errorf("export failed: %w", err)
}

Prevention

When it happens

Trigger: Calling traceWriter.WriteTraces(ctx, td) when client.Export(...) returns an error: server unavailable, message larger than max gRPC size, context deadline exceeded, or server-side persistence failure.

Common situations: Remote storage collector down or overloaded; trace batch exceeding max message size (4MB default); ingestion timeouts under high load; auth/TLS mismatch.

Related errors


AI-assisted analysis of jaegertracing/jaeger@806f444784 (2026-09-01). Data as JSON: /api/errors/92945fb0ce2786d5. Report an issue: GitHub.