app/vmselect: fix accessing /graphite/* endpoints

This commit is contained in:
Aliaksandr Valialkin 2021-09-21 13:28:12 +03:00
parent e8700b57b9
commit 3f1104ea74
No known key found for this signature in database
GPG key ID: A72BEC6CD3D0DED1
3 changed files with 13 additions and 11 deletions

View file

@ -259,17 +259,17 @@ func selectHandler(startTime time.Time, w http.ResponseWriter, r *http.Request,
http.StripPrefix(prefix, vmuiFileServer).ServeHTTP(w, r) http.StripPrefix(prefix, vmuiFileServer).ServeHTTP(w, r)
return true return true
} }
if strings.HasPrefix(p.Suffix, "graph") || strings.HasPrefix(p.Suffix, "prometheus/graph") { if p.Suffix == "graph" || p.Suffix == "prometheus/graph" {
// Redirect to /graph/, otherwise vmui redirects to /vmui/, which can be inaccessible in user env.
// Use relative redirect, since, since the hostname and path prefix may be incorrect if VictoriaMetrics
// is hidden behind vmauth or similar proxy.
_ = r.ParseForm()
newURL := "graph/?" + r.Form.Encode()
http.Redirect(w, r, newURL, http.StatusFound)
return true
}
if strings.HasPrefix(p.Suffix, "graph/") || strings.HasPrefix(p.Suffix, "prometheus/graph/") {
// This is needed for serving /graph URLs from Prometheus datasource in Grafana. // This is needed for serving /graph URLs from Prometheus datasource in Grafana.
if p.Suffix == "graph" || p.Suffix == "prometheus/graph" {
// Redirect to /graph/, otherwise vmui redirects to /vmui/, which can be inaccessible in user env.
// Use relative redirect, since, since the hostname and path prefix may be incorrect if VictoriaMetrics
// is hidden behind vmauth or similar proxy.
_ = r.ParseForm()
newURL := "graph/?" + r.Form.Encode()
http.Redirect(w, r, newURL, http.StatusFound)
return true
}
prefix := strings.Join([]string{"", p.Prefix, p.AuthToken}, "/") prefix := strings.Join([]string{"", p.Prefix, p.AuthToken}, "/")
if strings.HasPrefix(p.Suffix, "prometheus/graph/") { if strings.HasPrefix(p.Suffix, "prometheus/graph/") {
r.URL.Path = strings.Replace(r.URL.Path, "/prometheus/graph/", "/vmui/", 1) r.URL.Path = strings.Replace(r.URL.Path, "/prometheus/graph/", "/vmui/", 1)

View file

@ -6,6 +6,8 @@ sort: 15
## tip ## tip
* BUGFIX: vmselect: fix accessing [Graphite APIs](https://docs.victoriametrics.com/#graphite-api-usage). The access has been broken in v1.66.0, because `/graphite/*` path prefix accidentally clashed with `/graph*` path prefix used for VictoriaMetrics UI (aka `vmui`).
## [v1.66.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.66.0) ## [v1.66.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.66.0)

View file

@ -521,7 +521,7 @@ and it is easier to use when migrating from Graphite to VictoriaMetrics.
[VictoriaMetrics Enterprise](https://victoriametrics.com/enterprise.html) supports [Graphite Render API](https://graphite.readthedocs.io/en/stable/render_api.html) subset [VictoriaMetrics Enterprise](https://victoriametrics.com/enterprise.html) supports [Graphite Render API](https://graphite.readthedocs.io/en/stable/render_api.html) subset
at `/render` endpoint, which is used by [Graphite datasource in Grafana](https://grafana.com/docs/grafana/latest/datasources/graphite/). at `/render` endpoint, which is used by [Graphite datasource in Grafana](https://grafana.com/docs/grafana/latest/datasources/graphite/).
It supports `Storage-Step` http request header, which must be set to a step between data points stored in VictoriaMetrics when configuring Graphite datasource in Grafana. When configuring Graphite datasource in Grafana, the `Storage-Step` http request header must be set to a step between Graphite data points stored in VictoriaMetrics. For example, `Storage-Step: 10s` would mean 10 seconds distance between Graphite datapoints stored in VictoriaMetrics.
Enterprise binaries can be downloaded and evaluated for free from [the releases page](https://github.com/VictoriaMetrics/VictoriaMetrics/releases). Enterprise binaries can be downloaded and evaluated for free from [the releases page](https://github.com/VictoriaMetrics/VictoriaMetrics/releases).