Skip to content

Commit

Permalink
otelcolconvert: support converting jaegerremotesampling extension (#6658
Browse files Browse the repository at this point in the history
)

Signed-off-by: Paschalis Tsilias <[email protected]>
  • Loading branch information
tpaschalis authored Mar 12, 2024
1 parent 7c3372a commit f98d41a
Show file tree
Hide file tree
Showing 3 changed files with 154 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -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,
},
}
}
Original file line number Diff line number Diff line change
@@ -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"
}
}
Original file line number Diff line number Diff line change
@@ -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]

0 comments on commit f98d41a

Please sign in to comment.