wrap produder config support customize trace option #6579
Open
Description
Problem Statement
in my case, we support add some customize trace spanStartOption within producer: like this
type config struct {
TracerProvider trace.TracerProvider
Propagators propagation.TextMapPropagator
Tracer trace.Tracer
SpanStartOptions []trace.SpanStartOption // add span start options
}
func startProducerSpan(cfg config, version sarama.KafkaVersion, msg *sarama.ProducerMessage) trace.Span {
// If there's a span context in the message, use that as the parent context.
carrier := NewProducerMessageCarrier(msg)
ctx := cfg.Propagators.Extract(context.Background(), carrier)
// Create a span.
attrs := []attribute.KeyValue{
semconv.MessagingSystem("kafka"),
semconv.MessagingDestinationKindTopic,
semconv.MessagingDestinationName(msg.Topic),
semconv.MessagingMessagePayloadSizeBytes(msgPayloadSize(msg, version)),
semconv.MessagingOperationPublish,
}
// add users customize trace option
opts :=append(cfg.SpanStartOptions , []trace.SpanStartOption{
trace.WithAttributes(attrs...),
trace.WithSpanKind(trace.SpanKindProducer),
}...)
ctx, span := cfg.Tracer.Start(ctx, fmt.Sprintf("%s publish", msg.Topic), opts...)
if version.IsAtLeast(sarama.V0_11_0_0) {
// Inject current span context, so consumers can use it to propagate span.
cfg.Propagators.Inject(ctx, carrier)
}
return span
}