diff --git a/lib/promscrape/config.go b/lib/promscrape/config.go index b0c8eb578e..b41bcc4632 100644 --- a/lib/promscrape/config.go +++ b/lib/promscrape/config.go @@ -197,7 +197,7 @@ func (cfg *Config) getKubernetesSDScrapeWork(prev []*ScrapeWork) []*ScrapeWork { for j := range sc.KubernetesSDConfigs { sdc := &sc.KubernetesSDConfigs[j] var okLocal bool - dst, okLocal = appendKubernetesScrapeWork(dst, sdc, cfg.baseDir, sc.swc) + dst, okLocal = appendSDScrapeWork(dst, sdc, cfg.baseDir, sc.swc, "kubernetes_sd_config") if ok { ok = okLocal } @@ -225,7 +225,7 @@ func (cfg *Config) getOpenStackSDScrapeWork(prev []*ScrapeWork) []*ScrapeWork { for j := range sc.OpenStackSDConfigs { sdc := &sc.OpenStackSDConfigs[j] var okLocal bool - dst, okLocal = appendOpenstackScrapeWork(dst, sdc, cfg.baseDir, sc.swc) + dst, okLocal = appendSDScrapeWork(dst, sdc, cfg.baseDir, sc.swc, "openstack_sd_config") if ok { ok = okLocal } @@ -253,7 +253,7 @@ func (cfg *Config) getDockerSwarmSDScrapeWork(prev []*ScrapeWork) []*ScrapeWork for j := range sc.DockerSwarmConfigs { sdc := &sc.DockerSwarmConfigs[j] var okLocal bool - dst, okLocal = appendDockerSwarmScrapeWork(dst, sdc, cfg.baseDir, sc.swc) + dst, okLocal = appendSDScrapeWork(dst, sdc, cfg.baseDir, sc.swc, "dockerswarm_sd_config") if ok { ok = okLocal } @@ -281,7 +281,7 @@ func (cfg *Config) getConsulSDScrapeWork(prev []*ScrapeWork) []*ScrapeWork { for j := range sc.ConsulSDConfigs { sdc := &sc.ConsulSDConfigs[j] var okLocal bool - dst, okLocal = appendConsulScrapeWork(dst, sdc, cfg.baseDir, sc.swc) + dst, okLocal = appendSDScrapeWork(dst, sdc, cfg.baseDir, sc.swc, "consul_sd_config") if ok { ok = okLocal } @@ -309,7 +309,7 @@ func (cfg *Config) getEurekaSDScrapeWork(prev []*ScrapeWork) []*ScrapeWork { for j := range sc.EurekaSDConfigs { sdc := &sc.EurekaSDConfigs[j] var okLocal bool - dst, okLocal = appendEurekaScrapeWork(dst, sdc, cfg.baseDir, sc.swc) + dst, okLocal = appendSDScrapeWork(dst, sdc, cfg.baseDir, sc.swc, "eureka_sd_config") if ok { ok = okLocal } @@ -337,7 +337,7 @@ func (cfg *Config) getDNSSDScrapeWork(prev []*ScrapeWork) []*ScrapeWork { for j := range sc.DNSSDConfigs { sdc := &sc.DNSSDConfigs[j] var okLocal bool - dst, okLocal = appendDNSScrapeWork(dst, sdc, sc.swc) + dst, okLocal = appendSDScrapeWork(dst, sdc, cfg.baseDir, sc.swc, "dns_sd_config") if ok { ok = okLocal } @@ -365,7 +365,7 @@ func (cfg *Config) getEC2SDScrapeWork(prev []*ScrapeWork) []*ScrapeWork { for j := range sc.EC2SDConfigs { sdc := &sc.EC2SDConfigs[j] var okLocal bool - dst, okLocal = appendEC2ScrapeWork(dst, sdc, sc.swc) + dst, okLocal = appendSDScrapeWork(dst, sdc, cfg.baseDir, sc.swc, "ec2_sd_config") if ok { ok = okLocal } @@ -393,7 +393,7 @@ func (cfg *Config) getGCESDScrapeWork(prev []*ScrapeWork) []*ScrapeWork { for j := range sc.GCESDConfigs { sdc := &sc.GCESDConfigs[j] var okLocal bool - dst, okLocal = appendGCEScrapeWork(dst, sdc, sc.swc) + dst, okLocal = appendSDScrapeWork(dst, sdc, cfg.baseDir, sc.swc, "gce_sd_config") if ok { ok = okLocal } @@ -535,79 +535,20 @@ type scrapeWorkConfig struct { scrapeAlignInterval time.Duration } -func appendKubernetesScrapeWork(dst []*ScrapeWork, sdc *kubernetes.SDConfig, baseDir string, swc *scrapeWorkConfig) ([]*ScrapeWork, bool) { - targetLabels, err := kubernetes.GetLabels(sdc, baseDir) - if err != nil { - logger.Errorf("error when discovering kubernetes targets for `job_name` %q: %s; skipping it", swc.jobName, err) - return dst, false - } - return appendScrapeWorkForTargetLabels(dst, swc, targetLabels, "kubernetes_sd_config"), true +type targetLabelsGetter interface { + GetLabels(baseDir string) ([]map[string]string, error) } -func appendOpenstackScrapeWork(dst []*ScrapeWork, sdc *openstack.SDConfig, baseDir string, swc *scrapeWorkConfig) ([]*ScrapeWork, bool) { - targetLabels, err := openstack.GetLabels(sdc, baseDir) +func appendSDScrapeWork(dst []*ScrapeWork, sdc targetLabelsGetter, baseDir string, swc *scrapeWorkConfig, discoveryType string) ([]*ScrapeWork, bool) { + targetLabels, err := sdc.GetLabels(baseDir) if err != nil { - logger.Errorf("error when discovering openstack targets for `job_name` %q: %s; skipping it", swc.jobName, err) + logger.Errorf("skipping %s targets for job_name %q because of error: %s", discoveryType, swc.jobName, err) return dst, false } - return appendScrapeWorkForTargetLabels(dst, swc, targetLabels, "openstack_sd_config"), true + return appendScrapeWorkForTargetLabels(dst, swc, targetLabels, discoveryType), true } -func appendDockerSwarmScrapeWork(dst []*ScrapeWork, sdc *dockerswarm.SDConfig, baseDir string, swc *scrapeWorkConfig) ([]*ScrapeWork, bool) { - targetLabels, err := dockerswarm.GetLabels(sdc, baseDir) - if err != nil { - logger.Errorf("error when discovering dockerswarm targets for `job_name` %q: %s; skipping it", swc.jobName, err) - return dst, false - } - return appendScrapeWorkForTargetLabels(dst, swc, targetLabels, "dockerswarm_sd_config"), true -} - -func appendConsulScrapeWork(dst []*ScrapeWork, sdc *consul.SDConfig, baseDir string, swc *scrapeWorkConfig) ([]*ScrapeWork, bool) { - targetLabels, err := consul.GetLabels(sdc, baseDir) - if err != nil { - logger.Errorf("error when discovering consul targets for `job_name` %q: %s; skipping it", swc.jobName, err) - return dst, false - } - return appendScrapeWorkForTargetLabels(dst, swc, targetLabels, "consul_sd_config"), true -} - -func appendEurekaScrapeWork(dst []*ScrapeWork, sdc *eureka.SDConfig, baseDir string, swc *scrapeWorkConfig) ([]*ScrapeWork, bool) { - targetLabels, err := eureka.GetLabels(sdc, baseDir) - if err != nil { - logger.Errorf("error when discovering eureka targets for `job_name` %q: %s; skipping it", swc.jobName, err) - return dst, false - } - return appendScrapeWorkForTargetLabels(dst, swc, targetLabels, "eureka_sd_config"), true -} - -func appendDNSScrapeWork(dst []*ScrapeWork, sdc *dns.SDConfig, swc *scrapeWorkConfig) ([]*ScrapeWork, bool) { - targetLabels, err := dns.GetLabels(sdc) - if err != nil { - logger.Errorf("error when discovering dns targets for `job_name` %q: %s; skipping it", swc.jobName, err) - return dst, false - } - return appendScrapeWorkForTargetLabels(dst, swc, targetLabels, "dns_sd_config"), true -} - -func appendEC2ScrapeWork(dst []*ScrapeWork, sdc *ec2.SDConfig, swc *scrapeWorkConfig) ([]*ScrapeWork, bool) { - targetLabels, err := ec2.GetLabels(sdc) - if err != nil { - logger.Errorf("error when discovering ec2 targets for `job_name` %q: %s; skipping it", swc.jobName, err) - return dst, false - } - return appendScrapeWorkForTargetLabels(dst, swc, targetLabels, "ec2_sd_config"), true -} - -func appendGCEScrapeWork(dst []*ScrapeWork, sdc *gce.SDConfig, swc *scrapeWorkConfig) ([]*ScrapeWork, bool) { - targetLabels, err := gce.GetLabels(sdc) - if err != nil { - logger.Errorf("error when discovering gce targets for `job_name` %q: %s; skippint it", swc.jobName, err) - return dst, false - } - return appendScrapeWorkForTargetLabels(dst, swc, targetLabels, "gce_sd_config"), true -} - -func appendScrapeWorkForTargetLabels(dst []*ScrapeWork, swc *scrapeWorkConfig, targetLabels []map[string]string, sectionName string) []*ScrapeWork { +func appendScrapeWorkForTargetLabels(dst []*ScrapeWork, swc *scrapeWorkConfig, targetLabels []map[string]string, discoveryType string) []*ScrapeWork { startTime := time.Now() // Process targetLabels in parallel in order to reduce processing time for big number of targetLabels. type result struct { @@ -623,7 +564,7 @@ func appendScrapeWorkForTargetLabels(dst []*ScrapeWork, swc *scrapeWorkConfig, t target := metaLabels["__address__"] sw, err := getScrapeWork(swc, target, nil, metaLabels) if err != nil { - err = fmt.Errorf("skipping target %q for job_name %q in %s because of error: %w", target, swc.jobName, sectionName, err) + err = fmt.Errorf("skipping %s target %q for job_name %q because of error: %w", discoveryType, target, swc.jobName, err) } resultCh <- result{ sw: sw, @@ -646,7 +587,7 @@ func appendScrapeWorkForTargetLabels(dst []*ScrapeWork, swc *scrapeWorkConfig, t dst = append(dst, r.sw) } } - metrics.GetOrCreateHistogram(fmt.Sprintf("vm_promscrape_target_relabel_duration_seconds{type=%q}", sectionName)).UpdateDuration(startTime) + metrics.GetOrCreateHistogram(fmt.Sprintf("vm_promscrape_target_relabel_duration_seconds{type=%q}", discoveryType)).UpdateDuration(startTime) return dst } diff --git a/lib/promscrape/discovery/consul/consul.go b/lib/promscrape/discovery/consul/consul.go index 9c980f7793..b0e81d0623 100644 --- a/lib/promscrape/discovery/consul/consul.go +++ b/lib/promscrape/discovery/consul/consul.go @@ -29,7 +29,7 @@ type SDConfig struct { } // GetLabels returns Consul labels according to sdc. -func GetLabels(sdc *SDConfig, baseDir string) ([]map[string]string, error) { +func (sdc *SDConfig) GetLabels(baseDir string) ([]map[string]string, error) { cfg, err := getAPIConfig(sdc, baseDir) if err != nil { return nil, fmt.Errorf("cannot get API config: %w", err) diff --git a/lib/promscrape/discovery/dns/dns.go b/lib/promscrape/discovery/dns/dns.go index 40d8c580d3..7d330a2d5f 100644 --- a/lib/promscrape/discovery/dns/dns.go +++ b/lib/promscrape/discovery/dns/dns.go @@ -24,7 +24,7 @@ type SDConfig struct { } // GetLabels returns DNS labels according to sdc. -func GetLabels(sdc *SDConfig) ([]map[string]string, error) { +func (sdc *SDConfig) GetLabels(baseDir string) ([]map[string]string, error) { if len(sdc.Names) == 0 { return nil, fmt.Errorf("`names` cannot be empty in `dns_sd_config`") } diff --git a/lib/promscrape/discovery/dockerswarm/dockerswarm.go b/lib/promscrape/discovery/dockerswarm/dockerswarm.go index bd95643066..b58f68fcd3 100644 --- a/lib/promscrape/discovery/dockerswarm/dockerswarm.go +++ b/lib/promscrape/discovery/dockerswarm/dockerswarm.go @@ -31,7 +31,7 @@ type Filter struct { } // GetLabels returns dockerswarm labels according to sdc. -func GetLabels(sdc *SDConfig, baseDir string) ([]map[string]string, error) { +func (sdc *SDConfig) GetLabels(baseDir string) ([]map[string]string, error) { cfg, err := getAPIConfig(sdc, baseDir) if err != nil { return nil, fmt.Errorf("cannot get API config: %w", err) diff --git a/lib/promscrape/discovery/ec2/ec2.go b/lib/promscrape/discovery/ec2/ec2.go index 8ffa1697ea..6a830e1631 100644 --- a/lib/promscrape/discovery/ec2/ec2.go +++ b/lib/promscrape/discovery/ec2/ec2.go @@ -31,7 +31,7 @@ type Filter struct { } // GetLabels returns ec2 labels according to sdc. -func GetLabels(sdc *SDConfig) ([]map[string]string, error) { +func (sdc *SDConfig) GetLabels(baseDir string) ([]map[string]string, error) { cfg, err := getAPIConfig(sdc) if err != nil { return nil, fmt.Errorf("cannot get API config: %w", err) diff --git a/lib/promscrape/discovery/eureka/eureka.go b/lib/promscrape/discovery/eureka/eureka.go index c8ebc55efc..c9759e6e04 100644 --- a/lib/promscrape/discovery/eureka/eureka.go +++ b/lib/promscrape/discovery/eureka/eureka.go @@ -82,7 +82,7 @@ type DataCenterInfo struct { } // GetLabels returns Eureka labels according to sdc. -func GetLabels(sdc *SDConfig, baseDir string) ([]map[string]string, error) { +func (sdc *SDConfig) GetLabels(baseDir string) ([]map[string]string, error) { cfg, err := getAPIConfig(sdc, baseDir) if err != nil { return nil, fmt.Errorf("cannot get API config: %w", err) diff --git a/lib/promscrape/discovery/gce/gce.go b/lib/promscrape/discovery/gce/gce.go index f0629d2ef7..4234c7655c 100644 --- a/lib/promscrape/discovery/gce/gce.go +++ b/lib/promscrape/discovery/gce/gce.go @@ -48,7 +48,7 @@ func (z *ZoneYAML) UnmarshalYAML(unmarshal func(interface{}) error) error { } // GetLabels returns gce labels according to sdc. -func GetLabels(sdc *SDConfig) ([]map[string]string, error) { +func (sdc *SDConfig) GetLabels(baseDir string) ([]map[string]string, error) { cfg, err := getAPIConfig(sdc) if err != nil { return nil, fmt.Errorf("cannot get API config: %w", err) diff --git a/lib/promscrape/discovery/kubernetes/kubernetes.go b/lib/promscrape/discovery/kubernetes/kubernetes.go index 2c7a489952..d1f29ed753 100644 --- a/lib/promscrape/discovery/kubernetes/kubernetes.go +++ b/lib/promscrape/discovery/kubernetes/kubernetes.go @@ -38,7 +38,7 @@ type Selector struct { } // GetLabels returns labels for the given sdc and baseDir. -func GetLabels(sdc *SDConfig, baseDir string) ([]map[string]string, error) { +func (sdc *SDConfig) GetLabels(baseDir string) ([]map[string]string, error) { cfg, err := getAPIConfig(sdc, baseDir) if err != nil { return nil, fmt.Errorf("cannot create API config: %w", err) diff --git a/lib/promscrape/discovery/openstack/openstack.go b/lib/promscrape/discovery/openstack/openstack.go index 0a1e9bd1db..f4b17bac30 100644 --- a/lib/promscrape/discovery/openstack/openstack.go +++ b/lib/promscrape/discovery/openstack/openstack.go @@ -31,8 +31,8 @@ type SDConfig struct { Availability string `yaml:"availability,omitempty"` } -// GetLabels returns gce labels according to sdc. -func GetLabels(sdc *SDConfig, baseDir string) ([]map[string]string, error) { +// GetLabels returns OpenStack labels according to sdc. +func (sdc *SDConfig) GetLabels(baseDir string) ([]map[string]string, error) { cfg, err := getAPIConfig(sdc, baseDir) if err != nil { return nil, fmt.Errorf("cannot get API config: %w", err)