initJaegerTracerProvider initializes a new Jaeger Tracer Provider.
(serviceName string, logger log.Logger, option ...OTelOption)
| 227 | |
| 228 | // initJaegerTracerProvider initializes a new Jaeger Tracer Provider. |
| 229 | func (cfg otelJaegerConfig) initJaegerTracerProvider(serviceName string, logger log.Logger, option ...OTelOption) (io.Closer, error) { |
| 230 | var otelCfg config |
| 231 | for _, opt := range option { |
| 232 | opt.apply(&otelCfg) |
| 233 | } |
| 234 | |
| 235 | // Read environment variables to configure Jaeger |
| 236 | var ep jaegerotel.EndpointOption |
| 237 | // Create the jaeger exporter: address can be either agent address (host:port) or collector Endpoint. |
| 238 | if cfg.agentHostPort != "" { |
| 239 | ep = jaegerotel.WithAgentEndpoint( |
| 240 | jaegerotel.WithAgentHost(cfg.agentHost), |
| 241 | jaegerotel.WithAgentPort(cfg.agentPort)) |
| 242 | } else { |
| 243 | ep = jaegerotel.WithCollectorEndpoint( |
| 244 | jaegerotel.WithEndpoint(cfg.jaegerEndpoint)) |
| 245 | } |
| 246 | exp, err := jaegerotel.New(ep) |
| 247 | |
| 248 | if err != nil { |
| 249 | return nil, err |
| 250 | } |
| 251 | |
| 252 | // Configure sampling strategy |
| 253 | sampler := tracesdk.AlwaysSample() |
| 254 | if cfg.samplerType == "const" { |
| 255 | if cfg.samplerParam == 0 { |
| 256 | sampler = tracesdk.NeverSample() |
| 257 | } |
| 258 | } else if cfg.samplerType == "probabilistic" { |
| 259 | sampler = tracesdk.TraceIDRatioBased(cfg.samplerParam) |
| 260 | } else if cfg.samplerType == "remote" { |
| 261 | sampler = jaegerremote.New(serviceName, jaegerremote.WithSamplingServerURL(cfg.samplingServerURL), |
| 262 | jaegerremote.WithInitialSampler(tracesdk.TraceIDRatioBased(cfg.samplerParam))) |
| 263 | } else if cfg.samplerType != "" { |
| 264 | return nil, errors.Errorf("unknown sampler type %q", cfg.samplerType) |
| 265 | } |
| 266 | customAttrs := cfg.jaegerTags |
| 267 | customAttrs = append(customAttrs, |
| 268 | attribute.String("samplerType", cfg.samplerType), |
| 269 | attribute.Float64("samplerParam", cfg.samplerParam), |
| 270 | attribute.String("samplingServerURL", cfg.samplingServerURL), |
| 271 | ) |
| 272 | customAttrs = append(customAttrs, otelCfg.resourceAttributes...) |
| 273 | if !cfg.samplerNotParentBased { |
| 274 | sampler = tracesdk.ParentBased(sampler) |
| 275 | } else { |
| 276 | customAttrs = append(customAttrs, attribute.Bool("samplerNotParentBased", true)) |
| 277 | } |
| 278 | |
| 279 | res, err := NewResource(serviceName, customAttrs) |
| 280 | if err != nil { |
| 281 | return nil, err |
| 282 | } |
| 283 | |
| 284 | var batcherOptions []tracesdk.BatchSpanProcessorOption |
| 285 | if cfg.reporterMaxQueueSize > 0 { |
| 286 | batcherOptions = append(batcherOptions, tracesdk.WithMaxQueueSize(cfg.reporterMaxQueueSize)) |
no test coverage detected