mirror of
https://github.com/hanzoai/otel-collector.git
synced 2026-11-03 02:20:04 +00:00
- Go module: github.com/SigNoz/signoz-otel-collector → github.com/hanzoai/otel-collector - All signoz-prefixed packages → o11y-prefixed - Docker: signoz/* → ghcr.io/hanzoai/otel-collector - ClickHouse exporter → Hanzo Datastore - Env vars: SIGNOZ_* → HANZO_* - Directory renames for all processor/receiver/exporter packages
92 lines
2.3 KiB
Go
92 lines
2.3 KiB
Go
// Copyright The OpenTelemetry Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package o11ykafkaexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter"
|
|
|
|
import (
|
|
"bytes"
|
|
|
|
"github.com/Shopify/sarama"
|
|
"github.com/gogo/protobuf/jsonpb"
|
|
jaegerproto "github.com/jaegertracing/jaeger/model"
|
|
"go.opentelemetry.io/collector/pdata/ptrace"
|
|
"go.uber.org/multierr"
|
|
|
|
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger"
|
|
)
|
|
|
|
type jaegerMarshaler struct {
|
|
marshaler jaegerSpanMarshaler
|
|
}
|
|
|
|
var _ TracesMarshaler = (*jaegerMarshaler)(nil)
|
|
|
|
func (j jaegerMarshaler) Marshal(traces ptrace.Traces, topic string) ([]*sarama.ProducerMessage, error) {
|
|
batches := jaeger.ProtoFromTraces(traces)
|
|
var messages []*sarama.ProducerMessage
|
|
|
|
var errs error
|
|
for _, batch := range batches {
|
|
for _, span := range batch.Spans {
|
|
span.Process = batch.Process
|
|
bts, err := j.marshaler.marshal(span)
|
|
// continue to process spans that can be serialized
|
|
if err != nil {
|
|
errs = multierr.Append(errs, err)
|
|
continue
|
|
}
|
|
key := []byte(span.TraceID.String())
|
|
messages = append(messages, &sarama.ProducerMessage{
|
|
Topic: topic,
|
|
Value: sarama.ByteEncoder(bts),
|
|
Key: sarama.ByteEncoder(key),
|
|
})
|
|
}
|
|
}
|
|
return messages, errs
|
|
}
|
|
|
|
func (j jaegerMarshaler) Encoding() string {
|
|
return j.marshaler.encoding()
|
|
}
|
|
|
|
type jaegerSpanMarshaler interface {
|
|
marshal(span *jaegerproto.Span) ([]byte, error)
|
|
encoding() string
|
|
}
|
|
|
|
type jaegerProtoSpanMarshaler struct {
|
|
}
|
|
|
|
var _ jaegerSpanMarshaler = (*jaegerProtoSpanMarshaler)(nil)
|
|
|
|
func (p jaegerProtoSpanMarshaler) marshal(span *jaegerproto.Span) ([]byte, error) {
|
|
return span.Marshal()
|
|
}
|
|
|
|
func (p jaegerProtoSpanMarshaler) encoding() string {
|
|
return "jaeger_proto"
|
|
}
|
|
|
|
type jaegerJSONSpanMarshaler struct {
|
|
pbMarshaler *jsonpb.Marshaler
|
|
}
|
|
|
|
var _ jaegerSpanMarshaler = (*jaegerJSONSpanMarshaler)(nil)
|
|
|
|
func newJaegerJSONMarshaler() *jaegerJSONSpanMarshaler {
|
|
return &jaegerJSONSpanMarshaler{
|
|
pbMarshaler: &jsonpb.Marshaler{},
|
|
}
|
|
}
|
|
|
|
func (p jaegerJSONSpanMarshaler) marshal(span *jaegerproto.Span) ([]byte, error) {
|
|
out := new(bytes.Buffer)
|
|
err := p.pbMarshaler.Marshal(out, span)
|
|
return out.Bytes(), err
|
|
}
|
|
|
|
func (p jaegerJSONSpanMarshaler) encoding() string {
|
|
return "jaeger_json"
|
|
}
|