diff --git a/app/vmagent/main.go b/app/vmagent/main.go index 30b70de00a..47648c82fe 100644 --- a/app/vmagent/main.go +++ b/app/vmagent/main.go @@ -23,6 +23,7 @@ import ( "github.com/VictoriaMetrics/VictoriaMetrics/app/vmagent/vmimport" "github.com/VictoriaMetrics/VictoriaMetrics/lib/auth" "github.com/VictoriaMetrics/VictoriaMetrics/lib/buildinfo" + "github.com/VictoriaMetrics/VictoriaMetrics/lib/bytesutil" "github.com/VictoriaMetrics/VictoriaMetrics/lib/envflag" "github.com/VictoriaMetrics/VictoriaMetrics/lib/flagutil" "github.com/VictoriaMetrics/VictoriaMetrics/lib/httpserver" @@ -284,6 +285,22 @@ func requestHandler(w http.ResponseWriter, r *http.Request) bool { w.Header().Set("Content-Type", "text/plain; charset=utf-8") promscrape.WriteConfigData(w) return true + case "/api/v1/status/config": + // See https://prometheus.io/docs/prometheus/latest/querying/api/#config + if *configAuthKey != "" && r.FormValue("authKey") != *configAuthKey { + err := &httpserver.ErrorWithStatusCode{ + Err: fmt.Errorf("The provided authKey doesn't match -configAuthKey"), + StatusCode: http.StatusUnauthorized, + } + httpserver.Errorf(w, r, "%s", err) + return true + } + promscrapeStatusConfigRequests.Inc() + w.Header().Set("Content-Type", "application/json") + var bb bytesutil.ByteBuffer + promscrape.WriteConfigData(&bb) + fmt.Fprintf(w, `{"status":"success","data":{"yaml":%q}}`, bb.B) + return true case "/api/v1/targets": promscrapeAPIV1TargetsRequests.Inc() w.Header().Set("Content-Type", "application/json") @@ -455,7 +472,8 @@ var ( promscrapeTargetResponseRequests = metrics.NewCounter(`vmagent_http_requests_total{path="/target_response"}`) promscrapeTargetResponseErrors = metrics.NewCounter(`vmagent_http_request_errors_total{path="/target_response"}`) - promscrapeConfigRequests = metrics.NewCounter(`vmagent_http_requests_total{path="/config"}`) + promscrapeConfigRequests = metrics.NewCounter(`vmagent_http_requests_total{path="/config"}`) + promscrapeStatusConfigRequests = metrics.NewCounter(`vmagent_http_requests_total{path="/api/v1/status/config"}`) promscrapeConfigReloadRequests = metrics.NewCounter(`vmagent_http_requests_total{path="/-/reload"}`) ) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index a6034622c5..568e1f3fca 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -15,6 +15,8 @@ The following tip changes can be tested by building VictoriaMetrics components f ## tip +* FEATURE: [vmagent](https://docs.victoriametrics.com/vmagent.html): expose `/api/v1/status/config` endpoint in the same way as Prometheus does. See [these docs](https://prometheus.io/docs/prometheus/latest/querying/api/#config). + ## [v1.77.2](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.77.2) Released at 21-05-2022