diff --git a/discovery/consul/consul.go b/discovery/consul/consul.go index 3a1614b52..7063ae88c 100644 --- a/discovery/consul/consul.go +++ b/discovery/consul/consul.go @@ -147,7 +147,6 @@ func init() { // and updates them via watches. type Discovery struct { client *consul.Client - clientConf *consul.Config clientDatacenter string tagSeparator string watchedServices []string // Set of services which will be discovered. @@ -155,6 +154,7 @@ type Discovery struct { watchedNodeMeta map[string]string allowStale bool refreshInterval time.Duration + finalizer func() logger log.Logger } @@ -169,6 +169,7 @@ func NewDiscovery(conf *SDConfig, logger log.Logger) (*Discovery, error) { return nil, err } transport := &http.Transport{ + IdleConnTimeout: 5 * time.Duration(conf.RefreshInterval), TLSClientConfig: tls, DialContext: conntrack.NewDialContextFunc( conntrack.DialWithTracing(), @@ -197,14 +198,14 @@ func NewDiscovery(conf *SDConfig, logger log.Logger) (*Discovery, error) { } cd := &Discovery{ client: client, - clientConf: clientConf, tagSeparator: conf.TagSeparator, watchedServices: conf.Services, watchedTag: conf.ServiceTag, watchedNodeMeta: conf.NodeMeta, allowStale: conf.AllowStale, refreshInterval: time.Duration(conf.RefreshInterval), - clientDatacenter: clientConf.Datacenter, + clientDatacenter: conf.Datacenter, + finalizer: transport.CloseIdleConnections, logger: logger, } return cd, nil @@ -298,6 +299,9 @@ func (d *Discovery) initialize(ctx context.Context) { // Run implements the Discoverer interface. func (d *Discovery) Run(ctx context.Context, ch chan<- []*targetgroup.Group) { + if d.finalizer != nil { + defer d.finalizer() + } d.initialize(ctx) if len(d.watchedServices) == 0 || d.watchedTag != "" {