in internal/pkg/config/output.go [85:178]
func (c *Elasticsearch) ToESConfig(longPoll bool) (elasticsearch.Config, error) {
// build the addresses
addrs := make([]string, len(c.Hosts))
for i, host := range c.Hosts {
addr, err := makeURL(c.Protocol, c.Path, host, 9200)
if err != nil {
return elasticsearch.Config{}, err
}
addrs[i] = addr
}
// build the transport from the config
httpTransport := &http.Transport{
DialContext: (&net.Dialer{
Timeout: 10 * time.Second,
KeepAlive: 30 * time.Second,
}).DialContext,
TLSHandshakeTimeout: 10 * time.Second,
DisableKeepAlives: false,
DisableCompression: false,
MaxIdleConns: 100,
MaxIdleConnsPerHost: 32,
MaxConnsPerHost: c.MaxConnPerHost,
IdleConnTimeout: 60 * time.Second,
ResponseHeaderTimeout: c.Timeout,
ExpectContinueTimeout: 1 * time.Second,
}
disableRetry := false
if longPoll {
httpTransport.IdleConnTimeout = httpTransportLongPollTimeout
httpTransport.ResponseHeaderTimeout = httpTransportLongPollTimeout
// no retries for long poll monitoring
disableRetry = true
}
if c.TLS != nil && c.TLS.IsEnabled() {
tls, err := tlscommon.LoadTLSConfig(c.TLS)
if err != nil {
return elasticsearch.Config{}, err
}
httpTransport.TLSClientConfig = tls.ToConfig()
}
if !c.ProxyDisable {
if c.ProxyURL != "" {
proxyURL, err := urlutil.ParseURL(c.ProxyURL)
if err != nil {
return elasticsearch.Config{}, err
}
httpTransport.Proxy = http.ProxyURL(proxyURL)
} else {
httpTransport.Proxy = http.ProxyFromEnvironment
}
var proxyHeaders http.Header
if len(c.ProxyHeaders) > 0 {
proxyHeaders = make(http.Header, len(c.ProxyHeaders))
for k, v := range c.ProxyHeaders {
proxyHeaders.Add(k, v)
}
}
httpTransport.ProxyConnectHeader = proxyHeaders
}
h := http.Header{}
for key, val := range c.Headers {
h.Set(key, val)
}
// Set special header "X-elastic-product-origin" for .fleet-* indices based on the latest conversation with ES team
// This eliminates the warning while accessing the system index
h.Set("X-elastic-product-origin", "fleet")
serviceToken := c.ServiceToken
if c.ServiceToken == "" && c.ServiceTokenPath != "" {
p, err := os.ReadFile(c.ServiceTokenPath)
if err != nil {
return elasticsearch.Config{}, fmt.Errorf("unable to read service_token_path: %w", err)
}
serviceToken = string(p)
}
return elasticsearch.Config{
Addresses: addrs,
ServiceToken: serviceToken,
Header: h,
Transport: httpTransport,
MaxRetries: c.MaxRetries,
DisableRetry: disableRetry,
}, nil
}