in config/configelasticsearch/esclient.go [103:165]
func (cfg *ClientConfig) ToClient(
ctx context.Context,
host component.Host,
telemetry component.TelemetrySettings,
) (*elasticsearch.Client, error) {
httpClient, err := cfg.ClientConfig.ToClient(ctx, host, telemetry)
if err != nil {
return nil, err
}
// endpoints converts Config.Endpoints, Config.CloudID,
// and Config.ClientConfig.Endpoint to a list of addresses.
endpoints, err := cfg.endpoints()
if err != nil {
return nil, err
}
esLogger := clientLogger{
Logger: telemetry.Logger,
logRequestBody: cfg.TelemetrySettings.LogRequestBody,
logResponseBody: cfg.TelemetrySettings.LogResponseBody,
}
maxRetries := defaultMaxRetries
if cfg.Retry.MaxRetries != 0 {
maxRetries = cfg.Retry.MaxRetries
}
return elasticsearch.NewClient(elasticsearch.Config{
Transport: httpClient.Transport,
// configure connection setup
Addresses: endpoints,
// configure retry behavior
RetryOnStatus: cfg.Retry.RetryOnStatus,
DisableRetry: !cfg.Retry.Enabled,
// RetryOnError: retryOnError, // should be used from esclient version 8 onwards
MaxRetries: maxRetries,
RetryBackoff: createElasticsearchBackoffFunc(&cfg.Retry),
// configure sniffing
DiscoverNodesOnStart: cfg.Discovery.OnStart,
DiscoverNodesInterval: cfg.Discovery.Interval,
// configure internal metrics reporting and logging
EnableMetrics: false, // TODO
EnableDebugLogger: false, // TODO
Logger: &esLogger,
Instrumentation: func() elastictransport.Instrumentation {
// only set tracing if enabled and not the noop tracer
// The actual implementation of the no-op tracer (tracer.noopNoContextTracer)
// is not exported by the OpenTelemetry collector, so we cannot directly check for it.
// Instead, we assert if the default Go SDK Tracer provider is used: https://github.com/open-telemetry/opentelemetry-collector/blob/v0.118.0/service/telemetry/tracer.go#L66
// TODO: use tracer.Enabled() once available in the Go SDK:https: //github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/api.md#enabled
if _, ok := telemetry.TracerProvider.(*traceSdk.TracerProvider); ok {
return elasticsearch.NewOpenTelemetryInstrumentation(telemetry.TracerProvider, false)
}
return nil
}(),
})
}