From 3f1104ea7416f17b6170b14d97f7c2f36d655151 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Tue, 21 Sep 2021 13:28:12 +0300 Subject: [PATCH] app/vmselect: fix accessing `/graphite/*` endpoints --- app/vmselect/main.go | 20 ++++++++++---------- docs/CHANGELOG.md | 2 ++ docs/Single-server-VictoriaMetrics.md | 2 +- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/app/vmselect/main.go b/app/vmselect/main.go index 87b9d36dff..27aee9f7c5 100644 --- a/app/vmselect/main.go +++ b/app/vmselect/main.go @@ -259,17 +259,17 @@ func selectHandler(startTime time.Time, w http.ResponseWriter, r *http.Request, http.StripPrefix(prefix, vmuiFileServer).ServeHTTP(w, r) 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. - 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}, "/") if strings.HasPrefix(p.Suffix, "prometheus/graph/") { r.URL.Path = strings.Replace(r.URL.Path, "/prometheus/graph/", "/vmui/", 1) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 3fd6b5bc4b..4544780674 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -6,6 +6,8 @@ sort: 15 ## 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) diff --git a/docs/Single-server-VictoriaMetrics.md b/docs/Single-server-VictoriaMetrics.md index bef5159970..6d5361dad7 100644 --- a/docs/Single-server-VictoriaMetrics.md +++ b/docs/Single-server-VictoriaMetrics.md @@ -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 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).