From f98d41a5a65518dada41ae32d9b2885add61974a Mon Sep 17 00:00:00 2001 From: Paschalis Tsilias Date: Tue, 12 Mar 2024 16:37:50 +0200 Subject: [PATCH] otelcolconvert: support converting jaegerremotesampling extension (#6658) Signed-off-by: Paschalis Tsilias --- ...converter_jaegerremotesamplingextension.go | 73 +++++++++++++++++++ .../testdata/jaegerremotesampling.river | 38 ++++++++++ .../testdata/jaegerremotesampling.yaml | 43 +++++++++++ 3 files changed, 154 insertions(+) create mode 100644 internal/converter/internal/otelcolconvert/converter_jaegerremotesamplingextension.go create mode 100644 internal/converter/internal/otelcolconvert/testdata/jaegerremotesampling.river create mode 100644 internal/converter/internal/otelcolconvert/testdata/jaegerremotesampling.yaml diff --git a/internal/converter/internal/otelcolconvert/converter_jaegerremotesamplingextension.go b/internal/converter/internal/otelcolconvert/converter_jaegerremotesamplingextension.go new file mode 100644 index 000000000000..2076a7290d7f --- /dev/null +++ b/internal/converter/internal/otelcolconvert/converter_jaegerremotesamplingextension.go @@ -0,0 +1,73 @@ +package otelcolconvert + +import ( + "fmt" + + "github.com/grafana/agent/internal/component/otelcol/extension/jaeger_remote_sampling" + "github.com/grafana/agent/internal/converter/diag" + "github.com/grafana/agent/internal/converter/internal/common" + "github.com/open-telemetry/opentelemetry-collector-contrib/extension/jaegerremotesampling" + "go.opentelemetry.io/collector/component" +) + +func init() { + converters = append(converters, jaegerRemoteSamplingExtensionConverter{}) +} + +type jaegerRemoteSamplingExtensionConverter struct{} + +func (jaegerRemoteSamplingExtensionConverter) Factory() component.Factory { + return jaegerremotesampling.NewFactory() +} + +func (jaegerRemoteSamplingExtensionConverter) InputComponentName() string { + return "otelcol.extension.jaeger_remote_sampling" +} + +func (jaegerRemoteSamplingExtensionConverter) ConvertAndAppend(state *state, id component.InstanceID, cfg component.Config) diag.Diagnostics { + var diags diag.Diagnostics + + label := state.FlowComponentLabel() + + args := toJaegerRemoteSamplingExtension(cfg.(*jaegerremotesampling.Config)) + block := common.NewBlockWithOverride([]string{"otelcol", "extension", "jaeger_remote_sampling"}, label, args) + + diags.Add( + diag.SeverityLevelInfo, + fmt.Sprintf("Converted %s into %s", stringifyInstanceID(id), stringifyBlock(block)), + ) + + state.Body().AppendBlock(block) + return diags +} + +func toJaegerRemoteSamplingExtension(cfg *jaegerremotesampling.Config) *jaeger_remote_sampling.Arguments { + if cfg == nil { + return nil + } + + var grpc *jaeger_remote_sampling.GRPCServerArguments + if cfg.GRPCServerSettings != nil { + grpc = (*jaeger_remote_sampling.GRPCServerArguments)(toGRPCServerArguments(cfg.GRPCServerSettings)) + } + var http *jaeger_remote_sampling.HTTPServerArguments + if cfg.HTTPServerSettings != nil { + http = (*jaeger_remote_sampling.HTTPServerArguments)(toHTTPServerArguments(cfg.HTTPServerSettings)) + } + var remote *jaeger_remote_sampling.GRPCClientArguments + if cfg.Source.Remote != nil { + r := toGRPCClientArguments(*cfg.Source.Remote) + remote = (*jaeger_remote_sampling.GRPCClientArguments)(&r) + } + + return &jaeger_remote_sampling.Arguments{ + GRPC: grpc, + HTTP: http, + Source: jaeger_remote_sampling.ArgumentsSource{ + Content: "", + Remote: remote, + File: cfg.Source.File, + ReloadInterval: cfg.Source.ReloadInterval, + }, + } +} diff --git a/internal/converter/internal/otelcolconvert/testdata/jaegerremotesampling.river b/internal/converter/internal/otelcolconvert/testdata/jaegerremotesampling.river new file mode 100644 index 000000000000..5d1efebc6968 --- /dev/null +++ b/internal/converter/internal/otelcolconvert/testdata/jaegerremotesampling.river @@ -0,0 +1,38 @@ +otelcol.extension.jaeger_remote_sampling "default" { + grpc { } + + http { } + + source { + remote { + endpoint = "jaeger-collector:14250" + } + reload_interval = "30s" + } +} + +otelcol.receiver.jaeger "default" { + protocols { + grpc { } + + thrift_http { } + + thrift_binary { + max_packet_size = "63KiB488B" + } + + thrift_compact { + max_packet_size = "63KiB488B" + } + } + + output { + traces = [otelcol.exporter.otlp.default.input] + } +} + +otelcol.exporter.otlp "default" { + client { + endpoint = "database:4317" + } +} diff --git a/internal/converter/internal/otelcolconvert/testdata/jaegerremotesampling.yaml b/internal/converter/internal/otelcolconvert/testdata/jaegerremotesampling.yaml new file mode 100644 index 000000000000..d85b388771d6 --- /dev/null +++ b/internal/converter/internal/otelcolconvert/testdata/jaegerremotesampling.yaml @@ -0,0 +1,43 @@ +extensions: + jaegerremotesampling: + # Our defaults have drifted from upstream so we explicitly set our defaults + # below by adding the 0.0.0.0 prefix for http.endpoint and grpc.endpoint. + http: + endpoint: "0.0.0.0:5778" + grpc: + endpoint: "0.0.0.0:14250" + source: + reload_interval: 30s + remote: + endpoint: jaeger-collector:14250 + # Our defaults have drifted from upstream so we explicitly set our + # defaults below for the remote block that is used as GRPC client + # arguments (balancer_name, compression, write_buffer_size). + balancer_name: pick_first + compression: "gzip" + write_buffer_size: 524288 # 512 * 1024 + +receivers: + jaeger: + protocols: + grpc: + thrift_binary: + thrift_compact: + thrift_http: + +exporters: + otlp: + # Our defaults have drifted from upstream, so we explicitly set our + # defaults below (balancer_name and queue_size). + endpoint: database:4317 + balancer_name: pick_first + sending_queue: + queue_size: 5000 + +service: + extensions: [jaegerremotesampling] + pipelines: + traces: + receivers: [jaeger] + processors: [] + exporters: [otlp]