func (lj *logstash) init( config outputs.MothershipConfig, topologyExpire int, ) error { useTLS := (config.TLS != nil) timeout := logstashDefaultTimeout if config.Timeout != 0 { timeout = time.Duration(config.Timeout) * time.Second } defaultPort := logstashDefaultPort if config.Port != 0 { defaultPort = config.Port } maxWindowSize := defaultMaxWindowSize if config.BulkMaxSize != nil { maxWindowSize = *config.BulkMaxSize } var clients []mode.ProtocolClient var err error if useTLS { var tlsConfig *tls.Config tlsConfig, err = outputs.LoadTLSConfig(config.TLS) if err != nil { return err } clients, err = mode.MakeClients(config, makeClientFactory(maxWindowSize, timeout, func(host string) (TransportClient, error) { return newTLSClient(host, defaultPort, tlsConfig) })) } else { clients, err = mode.MakeClients(config, makeClientFactory(maxWindowSize, timeout, func(host string) (TransportClient, error) { return newTCPClient(host, defaultPort) })) } if err != nil { return err } sendRetries := defaultSendRetries if config.MaxRetries != nil { sendRetries = *config.MaxRetries } logp.Info("Max Retries set to: %v", sendRetries) maxAttempts := sendRetries + 1 if sendRetries < 0 { maxAttempts = 0 } var m mode.ConnectionMode if len(clients) == 1 { m, err = mode.NewSingleConnectionMode(clients[0], maxAttempts, waitRetry, timeout, maxWaitRetry) } else { loadBalance := config.LoadBalance != nil && *config.LoadBalance if loadBalance { m, err = mode.NewLoadBalancerMode(clients, maxAttempts, waitRetry, timeout, maxWaitRetry) } else { m, err = mode.NewFailOverConnectionMode(clients, maxAttempts, waitRetry, timeout) } } if err != nil { return err } lj.mode = m lj.index = config.Index return nil }
func (out *elasticsearchOutput) init( config outputs.MothershipConfig, topologyExpire int, ) error { tlsConfig, err := outputs.LoadTLSConfig(config.TLS) if err != nil { return err } clients, err := mode.MakeClients(config, makeClientFactory(tlsConfig, config)) if err != nil { return err } timeout := elasticsearchDefaultTimeout if config.Timeout != 0 { timeout = time.Duration(config.Timeout) * time.Second } maxRetries := defaultMaxRetries if config.MaxRetries != nil { maxRetries = *config.MaxRetries } maxAttempts := maxRetries + 1 // maximum number of send attempts (-1 = infinite) if maxRetries < 0 { maxAttempts = 0 } var waitRetry = time.Duration(1) * time.Second var maxWaitRetry = time.Duration(60) * time.Second var m mode.ConnectionMode out.clients = clients if len(clients) == 1 { client := clients[0] m, err = mode.NewSingleConnectionMode(client, maxAttempts, waitRetry, timeout, maxWaitRetry) } else { loadBalance := config.LoadBalance == nil || *config.LoadBalance if loadBalance { m, err = mode.NewLoadBalancerMode(clients, maxAttempts, waitRetry, timeout, maxWaitRetry) } else { m, err = mode.NewFailOverConnectionMode(clients, maxAttempts, waitRetry, timeout) } } if err != nil { return err } if config.Save_topology { err := out.EnableTTL() if err != nil { logp.Err("Fail to set _ttl mapping: %s", err) // keep trying in the background go func() { for { err := out.EnableTTL() if err == nil { break } logp.Err("Fail to set _ttl mapping: %s", err) time.Sleep(5 * time.Second) } }() } } out.TopologyExpire = 15000 if topologyExpire != 0 { out.TopologyExpire = topologyExpire * 1000 // millisec } out.mode = m out.index = config.Index return nil }