diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index dcf6b1d93e..3b7efab644 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -10,6 +10,7 @@ sort: 15 * FEATURE: vmagent: change the default value for `-remoteWrite.queues` from 4 to `2 * numCPUs`. This should reduce scrape duration for highly loaded vmagent, which scrapes tens of thousands of targets. See [this pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/1385). * FEATURE: vmagent: show the number of samples the target returned during the last scrape on `/targets` and `/api/v1/targets` pages. This should simplify debugging targets, which may return too big or too low number of samples. See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1377). * FEATURE: vmagent: show jobs with zero discovered targets on `/targets` page. This should help debugging improperly configured scrape configs. +* FEATURE: vmagent: support for http-based service discovery (aka [http_sd_config](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#http_sd_config)), which has been added since Prometheus 2.28. See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1392). * FEATURE: vmagent: support namespace in Consul serive discovery in the same way as Prometheus 2.28 does. See [this issue](https://github.com/prometheus/prometheus/issues/8894) for details. * FEATURE: vmagent: support generic auth configs in `consul_sd_configs` in the same way as Prometheus 2.28 does. See [this issue](https://github.com/prometheus/prometheus/issues/8924) for details. * FEATURE: [vmctl](https://docs.victoriametrics.com/vmctl.html): limit the number of samples per each imported JSON line. This should limit the memory usage at VictoriaMetrics side when importing time series with big number of samples. diff --git a/lib/promscrape/discovery/http/http.go b/lib/promscrape/discovery/http/http.go index 0b5dff8cd3..f1b6cee3e2 100644 --- a/lib/promscrape/discovery/http/http.go +++ b/lib/promscrape/discovery/http/http.go @@ -30,16 +30,14 @@ func (sdc *SDConfig) GetLabels(baseDir string) ([]map[string]string, error) { if err != nil { return nil, fmt.Errorf("cannot get API config: %w", err) } - hts, err := getHTTPTargets(cfg) if err != nil { return nil, err } - - return addHTTPTargetLabels(hts), nil + return addHTTPTargetLabels(hts, sdc.URL), nil } -func addHTTPTargetLabels(src []httpGroupTarget) []map[string]string { +func addHTTPTargetLabels(src []httpGroupTarget, sourceURL string) []map[string]string { ms := make([]map[string]string, 0, len(src)) for _, targetGroup := range src { labels := targetGroup.Labels @@ -49,6 +47,7 @@ func addHTTPTargetLabels(src []httpGroupTarget) []map[string]string { m[k] = v } m["__address__"] = target + m["__meta_url"] = sourceURL ms = append(ms, m) } } diff --git a/lib/promscrape/discovery/http/http_test.go b/lib/promscrape/discovery/http/http_test.go index c287866ccf..3ed48f0829 100644 --- a/lib/promscrape/discovery/http/http_test.go +++ b/lib/promscrape/discovery/http/http_test.go @@ -23,27 +23,29 @@ func Test_addHTTPTargetLabels(t *testing.T) { src: []httpGroupTarget{ { Targets: []string{"127.0.0.1:9100", "127.0.0.2:91001"}, - Labels: map[string]string{"__meta__kubernetes_pod": "pod-1", "__meta_consul_dc": "dc-2"}, + Labels: map[string]string{"__meta_kubernetes_pod": "pod-1", "__meta_consul_dc": "dc-2"}, }, }, }, want: [][]prompbmarshal.Label{ discoveryutils.GetSortedLabels(map[string]string{ - "__address__": "127.0.0.1:9100", - "__meta__kubernetes_pod": "pod-1", - "__meta_consul_dc": "dc-2", + "__address__": "127.0.0.1:9100", + "__meta_kubernetes_pod": "pod-1", + "__meta_consul_dc": "dc-2", + "__meta_url": "http://foo.bar/baz?aaa=bb", }), discoveryutils.GetSortedLabels(map[string]string{ - "__address__": "127.0.0.2:91001", - "__meta__kubernetes_pod": "pod-1", - "__meta_consul_dc": "dc-2", + "__address__": "127.0.0.2:91001", + "__meta_kubernetes_pod": "pod-1", + "__meta_consul_dc": "dc-2", + "__meta_url": "http://foo.bar/baz?aaa=bb", }), }, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - got := addHTTPTargetLabels(tt.args.src) + got := addHTTPTargetLabels(tt.args.src, "http://foo.bar/baz?aaa=bb") var sortedLabelss [][]prompbmarshal.Label for _, labels := range got { sortedLabelss = append(sortedLabelss, discoveryutils.GetSortedLabels(labels))