1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
func PopulateDiscoveredLabels(lb *labels.Builder, cfg *config.ScrapeConfig, tLabels, tgLabels model.LabelSet) { lb.Reset(labels.EmptyLabels())
for ln, lv := range tLabels { lb.Set(string(ln), string(lv)) } for ln, lv := range tgLabels { if _, ok := tLabels[ln]; !ok { lb.Set(string(ln), string(lv)) } }
scrapeLabels := []labels.Label{ {Name: model.JobLabel, Value: cfg.JobName}, {Name: model.ScrapeIntervalLabel, Value: cfg.ScrapeInterval.String()}, {Name: model.ScrapeTimeoutLabel, Value: cfg.ScrapeTimeout.String()}, {Name: model.MetricsPathLabel, Value: cfg.MetricsPath}, {Name: model.SchemeLabel, Value: cfg.Scheme}, }
for _, l := range scrapeLabels { if lb.Get(l.Name) == "" { lb.Set(l.Name, l.Value) } } for k, v := range cfg.Params { if name := model.ParamLabelPrefix + k; len(v) > 0 && lb.Get(name) == "" { lb.Set(name, v[0]) } } }
func PopulateLabels(lb *labels.Builder, cfg *config.ScrapeConfig, tLabels, tgLabels model.LabelSet) (res labels.Labels, err error) { PopulateDiscoveredLabels(lb, cfg, tLabels, tgLabels) keep := relabel.ProcessBuilder(lb, cfg.RelabelConfigs...)
if !keep { return labels.EmptyLabels(), nil } if v := lb.Get(model.AddressLabel); v == "" { return labels.EmptyLabels(), errors.New("no address") }
addr := lb.Get(model.AddressLabel)
if err := config.CheckTargetAddress(model.LabelValue(addr)); err != nil { return labels.EmptyLabels(), err }
interval := lb.Get(model.ScrapeIntervalLabel) intervalDuration, err := model.ParseDuration(interval) if err != nil { return labels.EmptyLabels(), fmt.Errorf("error parsing scrape interval: %w", err) } if time.Duration(intervalDuration) == 0 { return labels.EmptyLabels(), errors.New("scrape interval cannot be 0") }
timeout := lb.Get(model.ScrapeTimeoutLabel) timeoutDuration, err := model.ParseDuration(timeout) if err != nil { return labels.EmptyLabels(), fmt.Errorf("error parsing scrape timeout: %w", err) } if time.Duration(timeoutDuration) == 0 { return labels.EmptyLabels(), errors.New("scrape timeout cannot be 0") }
if timeoutDuration > intervalDuration { return labels.EmptyLabels(), fmt.Errorf("scrape timeout cannot be greater than scrape interval (%q > %q)", timeout, interval) }
lb.Range(func(l labels.Label) { if strings.HasPrefix(l.Name, model.MetaLabelPrefix) { lb.Del(l.Name) } })
if v := lb.Get(model.InstanceLabel); v == "" { lb.Set(model.InstanceLabel, addr) }
res = lb.Labels() err = res.Validate(func(l labels.Label) error { if !model.LabelValue(l.Value).IsValid() { return fmt.Errorf("invalid label value for %q: %q", l.Name, l.Value) } return nil }) if err != nil { return labels.EmptyLabels(), err } return res, nil }
|