mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-11-21 14:44:00 +00:00
c6dee6c52d
* adds consul watch api, it must reduce load on consul service with blocking wait requests, changed discoveryClient api with fetchResponseMeta callback. * small fix * fix after master merge * adds watch client at discovery utils * fixes consul watcher, changes namings, fixes data race * small typo fix * sanity fix * fix naming and service node update
54 lines
2.2 KiB
Go
54 lines
2.2 KiB
Go
package consul
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/promauth"
|
|
)
|
|
|
|
var (
|
|
// SDCheckInterval - check interval for consul discovery.
|
|
SDCheckInterval = flag.Duration("promscrape.consulSDCheckInterval", 30*time.Second, "Interval for checking for changes in consul. "+
|
|
"This works only if `consul_sd_configs` is configured in '-promscrape.config' file. "+
|
|
"See https://prometheus.io/docs/prometheus/latest/configuration/configuration/#consul_sd_config for details")
|
|
// duration for consul blocking request, maximum wait time is 10 min.
|
|
// But fasthttp client has readTimeout for 1 min, so we use 50s timeout.
|
|
// also consul adds random delay up to wait/16, so there is no need in jitter.
|
|
// https://www.consul.io/api-docs/features/blocking
|
|
watchTime = time.Second * 50
|
|
)
|
|
|
|
// SDConfig represents service discovery config for Consul.
|
|
//
|
|
// See https://prometheus.io/docs/prometheus/latest/configuration/configuration/#consul_sd_config
|
|
type SDConfig struct {
|
|
Server string `yaml:"server,omitempty"`
|
|
Token *string `yaml:"token"`
|
|
Datacenter string `yaml:"datacenter"`
|
|
Scheme string `yaml:"scheme,omitempty"`
|
|
Username string `yaml:"username"`
|
|
Password string `yaml:"password"`
|
|
TLSConfig *promauth.TLSConfig `yaml:"tls_config,omitempty"`
|
|
Services []string `yaml:"services,omitempty"`
|
|
Tags []string `yaml:"tags,omitempty"`
|
|
NodeMeta map[string]string `yaml:"node_meta,omitempty"`
|
|
TagSeparator *string `yaml:"tag_separator,omitempty"`
|
|
AllowStale bool `yaml:"allow_stale,omitempty"`
|
|
// RefreshInterval time.Duration `yaml:"refresh_interval"`
|
|
// refresh_interval is obtained from `-promscrape.consulSDCheckInterval` command-line option.
|
|
}
|
|
|
|
// GetLabels returns Consul labels according to sdc.
|
|
func GetLabels(sdc *SDConfig, baseDir string) ([]map[string]string, error) {
|
|
cfg, err := getAPIConfig(sdc, baseDir)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("cannot get API config: %w", err)
|
|
}
|
|
ms, err := getServiceNodesLabels(cfg)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error when fetching service nodes data from Consul: %w", err)
|
|
}
|
|
return ms, nil
|
|
}
|